最適な OAuth 2.0 フローの選び方

最適な OAuth 2.0 フローの選び方

序文

一般的な推奨事項として、PKCE を使用した認可コードフローを優先的に利用してください。認可コードフローが利用できない場合は、各フローの特性と影響を十分に理解した上で、慎重に代替手段を検討してください。

Authlete Management Console におけるグラントタイプの設定

Authlete Management Console でグラントタイプを設定できます。

Authlete は以下のグラントタイプをサポートしています:

  • AUTHORIZATION_CODE
  • IMPLICIT
  • PASSWORD
  • CLIENT_CREDENTIALS
  • REFRESH_TOKEN
  • CIBA
  • DEVICE_CODE
  • TOKEN_EXCHANGE
  • JWT_BEARER
  • PRE_AUTHORIZED_CODE

サービス設定

Authlete では、サービス設定でグラントタイプを設定できます。

  1. Authlete Management Console にログインします。
  2. 組織名をクリックし、対象のサービスを選択します。
  3. Service Settings > Endpoints > Global Settings に移動します。
  4. Supported Grant Types セクションで、使用するグラントタイプを選択します。
  5. 「Save Changes」をクリックして、設定を更新します。
grant_type_1

クライアント設定

Authlete では、クライアント設定でグラントタイプを設定できます。

  1. Authlete Management Console にログインします。
  2. 組織名をクリックし、対象のサービスを選択します。
  3. Client Settings > Endpoints > Global Settings に移動します。
  4. Supported Grant Types セクションで、使用するグラントタイプを選択します。
  5. 「Save Changes」をクリックして、設定を更新します。
grant_type_2

グラントフローの詳細

RFC6749 で定義されているグラントタイプは以下の 5 種類です。各グラントタイプでは、クライアントアプリケーションに対して認可エンドポイントやトークンエンドポイントから発行される要素が異なります。

フロー 認可エンドポイント トークンエンドポイント
認可コードフロー 認可コード アクセストークン、リフレッシュトークン
インプリシットフロー アクセストークン -
リソースオーナーパスワードクレデンシャルフロー - アクセストークン、リフレッシュトークン
クライアントクレデンシャルフロー - アクセストークン
リフレッシュトークンフロー - アクセストークン、リフレッシュトークン

認可コードフロー

このフローは最も一般的なグラントフローです。

このフローは、認可エンドポイントから短命の認可コードを発行することから始まります。その後、認可コードをトークンエンドポイントでアクセストークンに交換します。これは標準的な OAuth 2.0 のフローです。

クライアント(例:公開クライアント)がクライアントシークレットなどの機密情報を安全に保存できない場合(例:モバイルアプリ)、認可コードフローに加えて PKCE (Proof Key for Code Exchange) を使用することが重要です。

インプリシットフロー

このフローでは、アクセストークンが認可エンドポイントから直接発行されます。認可コードフローとは異なり、リフレッシュトークンは発行されません。このフローは、もともとシングルページアプリケーション(SPA)などのトークン要求シナリオ向けに設計されましたが、現在では PKCE を使用した認可コードフローが SPA に推奨されています。

リソースオーナーパスワードクレデンシャルフロー

このフローでは、リソースオーナー(エンドユーザー)の ID とパスワードを受け取り、アクセストークンを発行します。しかし、リソースオーナーの資格情報がクライアントアプリケーションに直接露出するため、一般的には避けられます。このフローは通常、OAuth 2.0 を導入する際の移行期間中にのみ使用されます。

クライアントクレデンシャルフロー

このグラントフローは、ユーザーが関与しないクライアント向けに定義されています。

クライアントは、クライアント自身の認証情報(例:クライアント ID とクライアントシークレットの組み合わせ、クライアント証明書、SAML アサーション)を使用して、認可サーバーからアクセストークンを取得します。

このフローでは、クライアント認証のみに基づいてアクセストークンが発行されます。通常、クライアントとリソースオーナーが同じエンティティである場合に使用されます。

リフレッシュトークンフロー

このフローは、リフレッシュトークンを提示し、新しいアクセストークンを発行するためのものです。

このグラントフローは、以前に発行されたアクセストークン(およびリフレッシュトークン)を更新するために定義されています。

クライアントは、以前に取得したリフレッシュトークンを使用して、新しいアクセストークン(および新しいリフレッシュトークン)を認可サーバーから取得します。