2015-11-11 12 views
5

JSON Webトークンを使用したトークンベースの認証について学習しています。スウィフト: "patrickbateman"、 パスワード: "ismyknifesharp"、 役割: "定期的に"、 モバイルアプリケーションからのトークンベースの認証

  1. 私は

    { ユーザ名と同様に、ユーザの入力を使用して、アプリ内のオブジェクトを作成することができます。 .. }

  2. 次に、libraryでJWTトークンを生成することができます。

  3. 次に、/api/contacts/listのようなサポートされているAPIエンドポイントに送信します。または、認証のためにログイン/パスワードを送信する必要がありますか?
  4. サーバーは何とかトークンの正しさをチェックします。しかしどうですか?このサーバー生成のトークンをデータベースに保存し、キーとして使用する必要がありますか?または、クライアントから要求を受け取り、それをクライアントトークンと比較するたびに、サーバー上にトークンを生成する必要がありますか?
  5. 必要なデータをすべて取得して管理します。私は、ユーザーを認証するために、サーバへのログイン/パスワードのペアを送信する必要はありません

    1. :ここ

  6. が私の結論です。
  7. 私は認証専用データを取得する必要があるたびにトークンを送信する必要があります。
  8. トークンを期限切れにするために、時間が経過するなどの要因によって生成されたトークンが変更されるアルゴリズムを実装する必要があります。
  9. ヘッダー内にトークンを送信する必要がありますが、必ずしもそうではありません。これはJSON要求の本文内で行うことができるためです。

これらの結論は正しいですか?クライアントが送信するトークンをチェックする方法は何ですか?

答えて

1

私の意見は:

  1. 私たちは、クライアント上のユーザーのパスワードを維持するべきではありません。クライアントはサインアップ/サインイン時にサーバーにパスワードを投稿し、クライアントのどこにでも保存しないでください。リクエストはhttpsで、パスワードは暗号化しないでください。パスワードは後でサーバー側で暗号化します。

  2. ユーザーログインに成功すると、サーバーはこのユーザーに対してtokenを生成します。 tokenには有効期限の日付が入ります。トークンを使用してサーバーとのアクセス許可を認証します。

  3. 私はAPIへのすべてのリクエストが、サインアップ/サインイン/フォワードパスワードリクエストを除いてトークンを提供する必要があると思います。

  4. トークンは要求のヘッダーの内側に配置する必要があります。

  5. サーバーは、クライアントの要求古いトークン(多分期限切れのこと)

そして、「どのようにサーバーがクライアントからのトークンをチェックする?」の答えと新しいトークン許可する必要があります。それを行うには多くの方法があります。以下は現在の私のアプローチです:

サーバ側では、トークンが生成されます。トークンは、user info(トークンの期限切れ時刻、userid、ユーザーのロールなど)の暗号化された文字列であり、パスワードはサーバー上にのみ保持されますHMACまたはRSAアルゴリズムを使用します。ユーザーがtokenを送信すると、サーバーは解読し、user info、データベースからの照会なしで期限切れの時間を取得できます。

とにかく、この質問はSwiftタグとは関係ありません。

+0

なぜクライアント側にパスワードとユーザー名を保存するのは良い考えではありませんか? iOSではキーチェーンに安全に保存できますか? – user805981

+0

安全な方法で保管することができますが、それには何のメリットもありません。再ログインするために保存されたパスワードを使用しないでください。良い方法は、トークンを使って作業しているか、ユーザーがログインフォームを使用してパスワードを再入力するよう要求することです。 – t4nhpt

+0

私は参照してください。そして、私たちがjwtとリフレッシュトークンを使用するのであれば。 HTTPリクエストを送信する前にjwtがクライアント側で期限切れになっているかどうかを判断する必要がありますか?または、リフレッシュサイクルに入る前に、jwtの有効期限を切って、クライアント側に400を返す必要がありますか? – user805981

関連する問題