2

新しい Web API フレームワークを使用するための REST API を実装しています。この API は他の企業によって使用されるため、認証方法を追加します。

認証に関しては、トークンに基づいたものを実装しようと考えています。このようなもの

  • クライアントはログイン方法に資格情報を提供します
  • システムはクライアントを認証し、トークンを送信します
  • クライアントは、次の API 呼び出しでこのトークンを使用します

このスキーマが私のシナリオに役立つかどうかは疑問です。操作は主にアトミックであり、基本的にクライアントは定期的にこの API に ping を実行して特定のデータを取得するため、セッション トークンを使用する意味があるかどうかはわかりません (ある時点でトークンの有効期限が切れる必要があり、これを管理する方法がわからない)。

このシナリオの認証スキーマをどのように実装することをお勧めしますか?

4

2 に答える 2

2

トークンを生成すると、認証されたログインの主キーに戻る外部キーとともにデータベースに保存されます。また、(トークンを使用して)確立された日付と時刻、およびタイムアウト期間を保存します(これをトークンごとに設定するか、構成に保存できます)。そのユーザーがサービスにpingを実行するたびにトークン/時間を確認し、その時間が経過したら強制的に再認証させます(トークンとともに保存されている作成日と照合して確認します)。

これにより、トークンの有効期限が切れた後にのみログイン情報が送信されるようになり、新しいトークンが生成されると、古いトークン レコードが削除されます。

私はあなたの要件を正しく理解していますか?

于 2012-08-09T13:50:52.747 に答える
1

このようなトークンベースの認証スキームを作成するのは簡単ではありません。

どうすればそれを適切かつ安全な方法で実装できるかについて、私には本当に答えがありません。しかし、あなたが対処しなければならない問題について、私の頭のてっぺんからいくつかの考えを提供します:

  • トークンの生成は十分にランダム化する必要があり、誰かが「ヒットする」かどうかを確認するために誰かがさまざまなトークンの束を送信するのを防ぐために、トークンは「十分に」(十分な定義では)長い必要があります

上記の問題は、実装するのがそれほど難しくないはずです。しかし、理解するのが難しいのは次のとおりです。

  • トークンが「誘拐」されていないことを確実に確認するにはどうすればよいですか。

トークンが単にランダムな文字列である場合、転送でトークンを「見る」(SSLを使用)人は誰でも、トークンが生成された用途のIDを推測できます。

トークンは、サービスによって受信されると、次のことを通知します。

  • アプリケーションがユーザー/アプリケーション/エンティティXにトークンを発行しました
  • トークンはそのままです(変更されていません)
  • トークンと一緒に保存するその他のもの(期限切れなど)

しかし、それ以上の努力がなければ、それがユーザー/アプリケーション/エンティティXによって送信されたことを確実に知らせることはできません。トークンを手に入れることができたのはYである可能性があります。

もちろん、これは多くの認証スキームに当てはまります。したがって、データの機密性や、サービスを介して実行できる操作の種類によっては、大きな問題にはならない場合があります。

于 2012-08-09T15:16:25.387 に答える