「マイクロソフト系技術情報 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の生成にソルト(やストレッチ)は不要。
OAuth PKCE、client_secretは不要と言うが、
Tags: :認証基盤, :クレームベース認証, :OAuth