• リダイレクト uri
  • コールバック
  • 認可コード
  • コードフロー
  • oidc
  • pkce

OpenID Connect (OIDC) におけるリダイレクト URI と認可コードフローの理解

リダイレクト URI は OIDC 認証プロセスにおける重要なセキュリティコンポーネントですので、詳しく見ていきましょう。

Charles
Charles
Developer

リダイレクト URI とは何か?

リダイレクト URI(別名:リプライ URL)は、OIDC 認証プロセスにおける重要なセキュリティコンポーネントです。これは、OIDC プロバイダーを通じて正常にサインインした後にユーザーが送信される URL を指定します。さらに重要なのは、この場所でアプリケーションがトークンを取得するために必要な認可コードを受け取ることです。

詳細は Auth Wiki > Redirect URI をご覧ください。

認可コードフローとは?

認可コードフロー(OAuth 2.0 RFC 6749, セクション 4.1で定義されている)は、OIDC での基本的な認証方法です。これは、認可コードをアクセストークンおよびオプションでリフレッシュトークンと交換することに関与します。このフローは、クライアントシークレットを安全に維持できるサーバーサイド Web アプリケーションなどのアプリケーションに適しています。

詳細は Auth Wiki > Authorization Code Flow をご覧ください。

認可コードフローでのリダイレクト URI の働き

認可コードフローでは、リダイレクト URI は、ユーザーが正常に認証された後に認可コードを送信する OIDC プロバイダーの送信先です。これにより、セキュリティを確保し不正なリダイレクションを防ぐために、OIDC プロバイダーに事前登録されている必要があります。

Logto コンソール でリダイレクト URI を登録する方法: redirect-uri

サインインを開始するとき:

  1. 認可リクエスト: アプリケーションは client_idresponse_typescope、および redirect_uri などのパラメーターを含めて、ユーザーを OIDC プロバイダーの認可エンドポイントに誘導します。
  2. ユーザー認証: ユーザーは OIDC プロバイダーで認証します。
  3. 認可コードの配信: 正常な認証が行われると、OIDC プロバイダーはクエリパラメーターとして認可コードを含めて指定された redirect_uri にユーザーをリダイレクトします。

OIDC プロバイダーは redirect_uri を事前登録された URI のリストと照合して検証します。不一致がある場合、invalid_redirect_uri エラーが返され、不正なエンドポイントがトークンを受け取るのを防ぎます。

リダイレクト URI のベストプラクティス

実際の使用例では、一般的なベストプラクティスとして、専用の「コールバック」ページを宣言し、外部からのアクセスを直接許可するルーター/ディープリンクを関連付けます。このリンクはリダイレクト URI として使用します。

シングルページ Web アプリが https://my-app.com で動作していると仮定すると、通常、リダイレクト URI は https://my-app.com/callbackと宣言します。

また、ネイティブモバイルアプリの場合、リダイレクト URI には通常カスタムスキームが使用されます。例: com.company://myapp/callback

その他のベストプラクティスには以下が含まれます:

  • ワイルドカードを避ける: リダイレクト URI にワイルドカードパターンを使用しないでください。不正アクセスを防ぐため、許可されるすべての URI を明示的にリストします。
  • 正確に一致する: リダイレクト URI が OIDC プロバイダーに登録されているものと正確に一致することを確認します。末尾のスラッシュがあっても不一致が発生する可能性があります。

サインインコールバックの処理

redirect_uri に返された認可コードを処理するには、次の手順に従ってください:

  1. 認可コードを抽出する: リダイレクト URI のクエリストリングからコードパラメーターを取得します。

  2. 認可コードをトークンと交換する: OIDC プロバイダーのトークンエンドポイントに以下を含む POST リクエストを作成します:

    • client_id: OIDC プロバイダー内のアプリケーション ID
    • code: リダイレクト URI から受け取った認可コード
    • code_verifier: クライアントで生成されたランダムな文字列
    • redirect_uri: 認可リクエストで使用した URI
    • grant_type: 通常 authorization_code のグラントタイプ

JavaScript でのサンプルトークン交換リクエスト

Logto SDK を活用することでコード交換プロセスを簡素化

Logto SDK は特定のプログラミング言語やフレームワークで記述された開発キットであり、たとえば Logto React SDK、Next.js SDK、Swift SDK などがあります。SDK を使用することで、1 回または 2 回の関数呼び出しで簡単にできます。

公式 Logto React SDK を使用した React の「コールバック」コンポーネントサンプル:

SDK 統合ガイドは Logto Docs > Quick-starts にあります。

OIDC におけるリダイレクト URI を習得することの重要性の要約

認可コードフローを使用した OIDC のリダイレクト URI の理解は、認証プロセスを保護し最適化する上で重要です。信頼できるリダイレクト URI を登録し、サインインコールバックを効率的に処理することで、ユーザーにシームレスで安全な体験を提供し、Logto SDK を活用して開発作業を簡素化できます。