ボブは何かを達成するためにWebアプリケーションを使用します。そして:
- 彼のブラウザはダイエット中であるため、クッキーをサポートしていません。
- Webアプリケーションは人気があり、特定の瞬間に多くのユーザーに対応します。適切にスケーリングする必要があります。セッションを維持することが同時接続数に制限を課し、そしてもちろん無視できないパフォーマンスのペナルティをもたらす限り、私たちはセッションのないシステムを持ちたいかもしれません:)
重要な注意事項:
- 我々は持っているトランスポート・セキュリティ(HTTPSとその親友が)。
- カーテンの裏側では、Webアプリケーションは現在のユーザーに代わって多くの操作を外部サービスに委任します(これらのシステムはBobをユーザーの1人として認識します)。つまり、Bobの資格情報を転送する必要があります。
では、どのようにしてボブを認証するのですか(すべてのリクエストで)。そのようなことを実装する合理的な方法はどれでしょうか?
- HTMLフォームの非表示フィールドを介して資格情報でテニスをする... ボールには資格情報(ユーザー名とパスワード)が含まれ、2つのラケットはそれぞれブラウザーとWebアプリケーションです。つまり、Cookieではなくフォームフィールドを介してデータをやり取りする場合があります。各Web要求で、ブラウザーは資格情報を投稿します。ただし、1ページのアプリケーションの場合、これはテニスではなく、ゴムの壁でスカッシュをするように見えます。これは、資格情報を含むWebフォームがWebページの存続期間全体にわたって維持される可能性があるためです。 (サーバーは、資格情報を返さないように構成されます)。
- ユーザー名とパスワードをページのコンテキストに保存する-JavaScript変数など。ここでは単一ページが必要、IMHO。
- 暗号化トークン-ベースの認証。この場合、ログインアクションにより、暗号化されたセキュリティトークン(ユーザー名+パスワード+その他)が生成されます。このトークンはクライアントに返され、今後のリクエストにはトークンが付随します。これは理にかなっていますか?すでにHTTPSを使用しています...
- その他...
- 最後の手段:これを行わないで、資格情報をセッションに保存してください!セッションはいいです。クッキーの有無にかかわらず。
以前に説明されたアイデアのいずれかに関して、Web /セキュリティの懸念が思い浮かびますか?例えば、
- タイムアウト - 資格情報とともにタイムスタンプを保持する場合があります(タイムスタンプ=ボブが資格情報を入力した時間)。たとえば、NOW-timestamp> thresholdの場合、リクエストを拒否する可能性があります。
- クロスサイトスクリプティング保護-どのような違いもないはずですよね?
これを読んでくれてありがとう:)