OpenID Connect (OIDC) におけるリダイレクト URI と認可コードフローの理解
リダイレクト URI は OIDC 認証プロセスにおける重要なセキュリティコンポーネントですので、詳しく見ていきましょう。
リダイレクト 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 を登録する方法:
サインインを開始するとき:
- 認可リクエスト: アプリケーションは
client_id
、response_type
、scope
、およびredirect_uri
などのパラメーターを含めて、ユーザーを OIDC プロバイダーの認可エンドポイントに誘導します。 - ユーザー認証: ユーザーは OIDC プロバイダーで認証します。
- 認可コードの配信: 正常な認証が行われると、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
に返された認可コードを処理するには、次の手順に従ってください:
-
認可コードを抽出する: リダイレクト URI のクエリストリングからコードパラメーターを取得します。
-
認可コードをトークンと交換する: OIDC プロバイダーのトークンエンドポイントに以下を含む POST リクエストを作成します:
client_id
: OIDC プロバイダー内のアプリケーション IDcode
: リダイレクト URI から受け取った認可コードcode_verifier
: クライアントで生成されたランダムな文字列redirect_uri
: 認可リクエストで使用した URIgrant_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 を活用して開発作業を簡素化できます。