ハイブリッドフロー (Hybrid flow) とは?
ハイブリッドフロー (Hybrid flow) は、 認可コードフロー (Authorization code flow) と インプリシットフロー (Implicit flow) の特徴を組み合わせた認証プロセスです。ハイブリッドフローは OAuth 2.0 の仕様の一部ではなく、 OpenID Connect (OIDC) によって提供される拡張機能である点に留意してください。
このフローは、ユーザー認証においてセキュリティと使いやすさのバランスを提供するために設計されています。しかし、インプリシットフローに関連する セキュリティの考慮事項 のため、ハイブリッドフローは新しいアプリケーションに対して推奨されていません。ハイブリッドフローの一般的な代替手段は、より良いセキュリティのために Proof Key for Code Exchange (PKCE) を使用する認可コードフローです。
ハイブリッドフロー (Hybrid flow) はどのように機能するのか?
ハイブリッドフローの主な手順は次のとおりです:
-
他の OIDC フローと同様に、ハイブリッドフローは クライアント (Client) が OpenID Provider (OP) に 認証要求 (Authentication request) を開始することで始まります。
注意: クライアントは
response_type
パラメータをcode
と少なくともid_token
またはtoken
のいずれかと組み合わせて含める必要があります。これにより、次の3つの組み合わせが可能です:code id_token
: クライアントは認可コードと ID トークンを期待します。code token
: クライアントは認可コードとアクセストークンを期待します。code id_token token
: クライアントは認可コード、ID トークン、アクセストークンを期待します。
これは自明です: クライアントは認可コードと1つ以上のトークンを期待しており、これは認可コードフローとインプリシットフローに対応しています。
-
ユーザーは OpenID Provider (OP) で認証を行います。
-
OpenID Provider (OP) は認可コードおよび要求されたトークンと共にユーザーをクライアントアプリケーションにリダイレクトします。
-
クライアントアプリケーションはトークンを処理し、ユーザーに代わって保護されたリソースにアクセスするためにそれを使用できます。また、 トークンリクエスト (Token request) を介して追加のトークンを取得するために認可コードを使用できます。
ハイブリッドフローの簡略化されたシーケンス図は次のとおりです:
ハイブリッドフロー認証リクエストの非標準的な例は次のとおりです:
GET /authorize?response_type=code%20id_token
&client_id=YOUR_CLIENT_ID
&redirect_uri=https%3A%2F%2Fclient.example.com%2Fcallback
&scope=openid%20profile%20email
&nonce=123456
&state=abc123 HTTP/1.1
Host: your-openid-provider.com
ハイブリッドフロー認証リクエストの主要パラメータ
ハイブリッドフロー認証リクエストには次の主要なパラメータが含まれます:
response_type
: 値はcode
と少なくともid_token
またはtoken
のいずれかを組み合わせたものである必要があります。例えば、code id_token
またはcode token
です。client_id
: OpenID Provider (OP) (認可サーバー) によって発行されたクライアント識別子。redirect_uri
: 認可サーバーが認証プロセス後にユーザーを送信する URI です。scope
: トークンの要求された スコープ (権限)。resource
: 要求されたリソースの リソースインジケーター (Resource indicator) を指定するオプションのパラメータです。このパラメータを使用するには、認可サーバーが RFC 8707 をサポートしている必要があります。
パラメータの完全なリストとその説明については、 ハイブリッドフローを使用した認証 を参照してください。
セキュリティの考慮事項
ハイブリッドフローはセキュリティ制限で知られているインプリシットフローを含んでいます。トークンは依然としてフロントチャンネル (ブラウザ) を介して送信されるため、潜在的な攻撃にさらされる可能性があります。これらの懸念から、インプリシットフローは OAuth 2.1 で廃止される予定です。
Proof Key for Code Exchange (PKCE) を使用した 認可コードフロー (Authorization code flow) は、ハイブリッドフローの推奨代替手段であり、フロントチャンネルでトークンを公開することなくユーザーを認証するためのより安全な方法を提供します。