「マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
ネイティブアプリが、外部ブラウザを使用してOAuth 2.0認証要求を発行する場合、
「Implicit Flowではなく、Authorization Code Flowを使用し、
redirect_uriにカスタムURIスキームを使用してcodeを取得する。」
という方式があるが(下図を参照)、
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+ | End Device (e.g., Smartphone) | | | | +-------------+ +----------+ | (6) Access Token +----------+ | |Legitimate | | Malicious|<--------------------| | | |OAuth 2.0 App| | App |-------------------->| | | +-------------+ +----------+ | (5) Authorization | | | | ^ ^ | Grant | | | | \ | | | | | | \ (4) | | | | | (1) | \ Authz| | | | | Authz| \ Code | | | Authz | | Request| \ | | | Server | | | \ | | | | | | \ | | | | | v \ | | | | | +----------------------------+ | | | | | | | (3) Authz Code | | | | Operating System/ |<--------------------| | | | Browser |-------------------->| | | | | | (2) Authz Request | | | +----------------------------+ | +----------+ +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+
このフローは、
+-------------------+
| Authz Server |
+--------+ | +---------------+ |
| |--(A)- Authorization Request ---->| | |
| | + t(code_verifier), t_m | | Authorization | |
| | | | Endpoint | |
| |<-(B)---- Authorization Code -----| | |
| | | +---------------+ |
| Client | | |
| | | +---------------+ |
| |--(C)-- Access Token Request ---->| | |
| | + code_verifier | | Token | |
| | | | Endpoint | |
| |<-(D)------ Access Token ---------| | |
+--------+ | +---------------+ |
+-------------------+
を使用して、code_verifierの妥当性を検証する。
| # | パラメタ | 要否 | 説明 |
| 1 | code_challenge | 必須 | Code Verifier を元に計算された Code Challenge の値 |
| 2 | code_challenge_method | 任意 | Code Challenge の計算に用いるハッシュ関数。 "plain"と"S256"があり、デフォルトは "plain"。 |
| # | パラメタ | 要否 | 説明 |
| 1 | code_verifier | 必須 | 動的に作成された暗号的にランダムな43-128文字以上のbase64url文字列 |
サーバー・ステートレスで"code"から"code_challenge"および"code_challenge_method"を
取り出す場合の処理は、当該サーバだけが可能になるように実装する必要がある。
code_challengeの生成にソルト(やストレッチ)が不要な理由。
このため、code_challengeの生成にソルト(やストレッチ)は不要。
Tags: :認証基盤, :クレームベース認証, :OAuth