OpenID Connect (OIDC) を使用してソーシャルログインを設定する
OpenID Connect (OIDC) プロトコル用の公式 Logto コネクターです。
このガイドは、Logto コネクターについての基本的な理解があることを前提としています。未経験の方は、コネクター ガイドを参照して始めてください。
はじめに
OIDC コネクターを利用すると、OIDC プロトコルをサポートする任意のソーシャルアイデンティティプロバイダー (IdP) へ Logto から接続できます。OIDC コネクターを使うことで、アプリケーションに以下の機能を追加できます:
- ソーシャルサインインボタンの追加
- ユーザーアカウントとソーシャルアイデンティティの連携
- ソーシャルプロバイダーからユーザープロフィール情報の同期
- Logto Secret Vault で安全にトークンを保管し、サードパーティ API へアクセスして自動化タスクを実行(例:Google ドキュメントの編集、アプリ内でのカレンダーイベント管理など)
これらの認証 (Authentication) 機能を設定するには、まず Logto で OIDC コネクターを作成してください:
- Logto コンソール > コネクター > ソーシャルコネクター にアクセスします。
- ソーシャルコネクターを追加 をクリックし、OIDC を選択、次へ をクリックし、手順に従って統合を完了してください。
OIDC コネクターは Logto で特別な種類のコネクターであり、OIDC プロトコルベースのコネクターを複数追加できます。
OIDC アプリの作成
このページを開いた時点で、接続したいソーシャルアイデンティティプロバイダーが決まっていると考えています。最初に行うべきことは、そのアイデンティティプロバイダーが OIDC プロトコルをサポートしているかを確認することです。これは有効なコネクターを構成するための前提条件です。その後、アイデンティティプロバイダーの指示に従って、OIDC 認可用の関連アプリを登録・作成してください。
コネクターの構成
セキュリティ上の理由から「認可コード」グラントタイプのみをサポートしており、これは Logto のシナリオに完全に適合します。
clientId
と clientSecret
は、OIDC アプリの詳細ページで確認できます。
clientId:クライアント ID は、認可サーバーへの登録時にクライアントアプリケーションを識別する一意の識別子です。この ID は、認可サーバーがクライアントアプリケーションのアイデンティティを確認し、認可されたアクセス トークンを特定のクライアントアプリケーションに関連付けるために使用されます。
clientSecret:クライアントシークレットは、登録時に認可サーバーからクライアントアプリケーションに発行される秘密鍵です。クライアントアプリケーションは、この秘密鍵を使用して、アクセス トークンを要求する際に認可サーバーに対して自身を認証します。クライアントシークレットは機密情報と見なされ、常に安全に保管する必要があります。
tokenEndpointAuthMethod:トークンエンドポイント認証方式は、クライアントアプリケーションがアクセス トークンを要求する際に認可サーバーに対して自身を認証するために使用されます。サポートされている方式を確認するには、OAuth 2.0 サービスプロバイダーの OpenID Connect ディスカバリエンドポイントで利用可能な token_endpoint_auth_methods_supported
フィールドを参照するか、OAuth 2.0 サービスプロバイダーが提供する関連ドキュメントを参照してください。
clientSecretJwtSigningAlgorithm (オプション):tokenEndpointAuthMethod
が client_secret_jwt
の場合のみ必要です。クライアントシークレット JWT 署名アルゴリズムは、トークンリクエスト時にクライアントアプリケーションが認可サーバーに送信する JWT に署名するために使用されます。
scope:スコープパラメーターは、クライアントアプリケーションがアクセスを要求するリソースと権限のセットを指定するために使用されます。スコープパラメーターは通常、特定の権限を表す値のスペース区切りリストとして定義されます。例えば、スコープ値が "read write" の場合、クライアントアプリケーションがユーザーデータへの読み取りおよび書き込みアクセスを要求していることを示します。
authorizationEndpoint
、tokenEndpoint
、jwksUri
、issuer
は、OpenID プロバイダーの構成情報として見つける必要があります。これらはソーシャルベンダーのドキュメントで確認できるはずです。
authenticationEndpoint:このエンドポイントは認証 (Authentication) プロセスを開始するために使用されます。認証 (Authentication) プロセスは通常、ユーザーがログインし、クライアントアプリケーションがリソースにアクセスするための認可を与えることを含みます。
tokenEndpoint:このエンドポイントは、クライアントアプリケーションが要求されたリソースにアクセスするために使用できる ID トークンを取得するために使用されます。クライアントアプリケーションは通常、グラントタイプと認可コードを含むリクエストをトークンエンドポイントに送信し、ID トークンを受け取ります。
jwksUri:これは、ソーシャルアイデンティティプロバイダー(略して IdP)の JSON Web Key Set (JWKS) を取得できる URL エンドポイントです。JWKS は、IdP が認証 (Authentication) プロセス中に発行する JSON Web Token (JWT) の署名および検証に使用する暗号鍵のセットです。jwksUri
は、リライングパーティ (RP) が IdP によって署名された JWT の公開鍵を取得するために使用され、RP は IdP から受け取った JWT の真正性と完全性を検証できます。
issuer:これは、RP が IdP から受け取った JWT を検証するために使用する IdP の一意の識別子です。JWT には iss
クレーム として含まれています(ID トークンは常に JWT です)。issuer の値は、IdP の認可サーバーの URL と一致する必要があり、RP が信頼する URI である必要があります。RP が JWT を受け取ると、iss
クレームをチェックして、それが信頼できる IdP によって発行されたものであり、JWT が RP で使用することを意図していることを確認します。
jwksUri
と issuer
を組み合わせることで、RP は認証 (Authentication) プロセス中にエンドユーザーのアイデンティティを安全に検証できます。jwksUri
から取得した公開鍵を使用して、RP は IdP によって発行された JWT の真正性と完全性を検証できます。issuer の値により、RP は信頼できる IdP によって発行された JWT のみを受け入れ、JWT が RP で使用することを意図していることを保証します。
認証リクエストは常に必要なため、authRequestOptionalConfig
でオプション設定をまとめて指定できます。詳細は OIDC 認証リクエスト を参照してください。また、この設定に nonce
がないことに気付くかもしれません。nonce
は各リクエストごとに一意である必要があるため、nonce
の生成はコード実装側に任せています。ご安心ください!前述の jwksUri
と issuer
も idTokenVerificationConfig
に含まれています。
標準の OIDC プロトコルがインプリシットフローやハイブリッドフローもサポートしているのに、Logto コネクターが認可フローのみをサポートしている理由が気になるかもしれません。インプリシットフローやハイブリッドフローは認可フローよりもセキュリティが低いことが判明しています。Logto はセキュリティを重視しているため、ユーザーに最高レベルのセキュリティを提供するために、多少利便性が劣っても認可フローのみをサポートしています。
responseType
と grantType
は「認可コード」フローでのみ固定値となるため、オプション扱いとし、デフォルト値が自動的に入力されます。
すべてのフロータイプに対して、カスタマイズパラメーターを格納するためのオプションの customConfig
キーを用意しています。
各ソーシャルアイデンティティプロバイダーは、OIDC 標準プロトコルに独自のバリエーションを持つ場合があります。ご希望のソーシャルアイデンティティプロバイダーが OIDC 標準プロトコルに厳密に準拠している場合は、customConfig
を気にする必要はありません。
設定タイプ
名前 | 型 | 必須 |
---|---|---|
scope | string | True |
clientId | string | True |
clientSecret | string | True |
authorizationEndpoint | string | True |
tokenEndpoint | string | True |
idTokenVerificationConfig | IdTokenVerificationConfig | True |
authRequestOptionalConfig | AuthRequestOptionalConfig | False |
customConfig | Record<string, string> | False |
AuthRequestOptionalConfig のプロパティ | 型 | 必須 |
---|---|---|
responseType | string | False |
tokenEndpoint | string | False |
responseMode | string | False |
display | string | False |
prompt | string | False |
maxAge | string | False |
uiLocales | string | False |
idTokenHint | string | False |
loginHint | string | False |
acrValues | string | False |
IdTokenVerificationConfig のプロパティ | 型 | 必須 |
---|---|---|
jwksUri | string | True |
issuer | string | string[] | False |
audience | string | string[] | False |
algorithms | string[] | False |
clockTolerance | string | number | False |
crit | Record<string, string | boolean> | False |
currentDate | Date | False |
maxTokenAge | string | number | False |
subject | string | False |
typ | string | False |
IdTokenVerificationConfig
の詳細については こちら をご覧ください。
一般設定
ここでは、アイデンティティプロバイダーへの接続を妨げることはありませんが、エンドユーザーの認証 (Authentication) 体験に影響を与える可能性のある一般的な設定を紹介します。
ソーシャルボタン名とロゴ
ログインページにソーシャルボタンを表示したい場合は、ソーシャルアイデンティティプロバイダーの 名前 と ロゴ(ダークモード・ライトモード)を設定できます。これにより、ユーザーがソーシャルログインオプションを認識しやすくなります。
アイデンティティプロバイダー名
各ソーシャルコネクターには、ユーザーアイデンティティを区別するための一意のアイデンティティプロバイダー (IdP) 名があります。一般的なコネクターは固定の IdP 名を使用しますが、カスタムコネクターは一意の値が必要です。詳細は IdP 名について をご覧ください。
プロフィール情報の同期
OIDC コネクターでは、ユーザー名やアバターなどのプロフィール情報の同期ポリシーを設定できます。次のいずれかを選択できます:
- サインアップ時のみ同期:ユーザーが初めてサインインしたときにプロフィール情報を一度だけ取得します。
- サインイン時に常に同期:ユーザーがサインインするたびにプロフィール情報を更新します。
サードパーティ API へのトークン保存(オプション)
アイデンティティプロバイダーの API にアクセスし、ユーザーの認可のもとで操作(ソーシャルサインインやアカウント連携経由)を行いたい場合、Logto は特定の API スコープを取得し、トークンを保存する必要があります。
- 上記の手順に従い、scope フィールドに必要なスコープを追加します
- Logto OIDC コネクターで 永続的な API アクセスのためにトークンを保存 を有効にします。Logto はアクセス トークンを Secret Vault に安全に保存します。
- 標準 の OAuth/OIDC アイデンティティプロバイダーの場合、リフレッシュ トークンを取得するには
offline_access
スコープを含める必要があり、これによりユーザーの同意プロンプトの繰り返しを防ぎます。
クライアントシークレットは安全に保管し、クライアントサイドのコードで絶対に公開しないでください。漏洩した場合は、アイデンティティプロバイダーのアプリ設定ですぐに新しいものを発行してください。
OIDC コネクターの活用
OIDC コネクターを作成し、アイデンティティプロバイダーと接続したら、エンドユーザーフローに組み込むことができます。ニーズに合ったオプションを選択してください:
ソーシャルサインインボタンの有効化
- Logto コンソールで サインイン体験 > サインアップとサインイン に移動します。
- ソーシャルサインイン セクションで OIDC コネクターを追加し、ユーザーがアイデンティティプロバイダーで認証 (Authentication) できるようにします。
ソーシャルサインイン体験 について詳しく学ぶことができます。
ソーシャルアカウントの連携・解除
Account API を利用して、アプリ内でサインイン済みユーザーがソーシャルアカウントを連携・解除できるカスタムアカウントセンターを構築できます。Account API チュートリアル をご参照ください。
ソーシャルサインインを有効にせず、アカウント連携や API アクセスのためだけに OIDC コネクターを有効にすることも可能です。
アイデンティティプロバイダー API へのアクセスと操作
アプリケーションは Secret Vault から保存されたアクセス トークンを取得し、アイデンティティプロバイダーの API を呼び出してバックエンドタスクを自動化できます。具体的な機能はアイデンティティプロバイダーと要求したスコープによって異なります。API アクセス用の保存トークン取得ガイドを参照してください。
ユーザーのソーシャルアイデンティティ管理
ユーザーがソーシャルアカウントを連携した後、管理者は Logto コンソールでその接続を管理できます:
- Logto コンソール > ユーザー管理 に移動し、ユーザーのプロフィールを開きます。
- ソーシャル接続 セクションでアイデンティティプロバイダー項目を見つけ、管理 をクリックします。
- このページで管理者はユーザーのソーシャル接続を管理し、ソーシャルアカウントから付与・同期されたすべてのプロフィール情報やアクセス トークンの状態を確認できます。
一部のアイデンティティプロバイダーのアクセス トークンレスポンスには、特定のスコープ情報が含まれていない場合があります。そのため、Logto ではユーザーが付与した権限リストを直接表示できません。ただし、ユーザーが認可時に要求されたスコープに同意していれば、アプリケーションは OIDC API へアクセスする際に対応する権限を持つことができます。