Implicit Grant では、アクセス トークンはコールバック URL で返されます。このコールバック URL がホップにキャッシュされている場合、これはセキュリティ リスクではありませんか。一般に、URL パラメーターで機密データを送信しないことをお勧めします。このアクセス トークンは、保護されたすべてのユーザー リソースにアクセスするためのトークンになります。では、なぜURLのフラグメントとして渡されるのですか
3 に答える
うーん、上記の回答には誤解があると思います。TLS を使用すると URL クエリ文字列が保護されるため、アクセス トークンは飛行中に保護されますが、ユーザーのブラウザー (履歴の一部) と宛先 Web ブラウザーのログにも公開されます。ほとんどの Web ブラウザーは、着信要求の URL 全体をログに記録します。これは、クエリ文字列がサードパーティのサイトに渡される「リファラー」リークの問題として知られる追加の問題です。良い概要は次の場所にあります。
http://blog.httpwatch.com/2009/02/20/how-secure-are-query-strings-over-https/
@vlatkoの応答について詳しく説明しています...
フラグメントで (または他の OAuth2 許可を介して) トークンを送信するリスクを軽減するには:
- OAuth エンドポイントとコールバック エンドポイントが TLS (https) であることを確認します (対策を参照してください) 。
- クロスサイト フォージェリを防止するために状態パラメータを送信する( https://www.rfc-editor.org/rfc/rfc6749#section-4.2.1も参照)
(@vlatko が言ったように) 有効期間の短いアクセス トークンを発行すると、リークされたトークンの影響が軽減されますが、予防策ではありません。
ご指摘のとおり、トークンには URI フラグメントが渡されます。ブラウザは URL のフラグメントを HTTP サーバーに送信しないため、誰かが盗聴してアクセス トークンを取得する可能性は大幅に減少します。
暗黙的な付与フローで有効期間が短いアクセス トークンのみを発行するなど、追加のセキュリティ対策もあります。
詳細については、OAuth2脅威モデルのドキュメントを参照してください。