IDプロバイダーにOpenID Connect またはOkta Workforce を使用しているエンタープライズ接続では、Proof Key for Code Exchange(PKCE)や、属性・トークンのマッピングをサポートできます。
OIDC接続のPKCEを構成する
OpenID Connect・Okta Workforce接続は、自動的にPKCEをサポートするよう構成されます。
OIDCのIDプロバイダー(IdP )がOIDC Discoveryメタデータを介してPKCEをサポートしている場合、Auth0のデフォルト設定では、使用可能なアルゴリズムのうち最強のものが使用されます。OIDC Discoveryメタデータの詳細については、OpenIDのドキュメント をご確認ください。
接続のPKCE構成を表示する
Auth0 Dashboard では、特定の接続のPKCE構成を表示できます。
[Authentication(認証)]>[Enterprise(エンタープライズ)] に移動して、OIDCプロバイダー(OpenID ConnectまたはOkta Workforce)を選択します。
[設定] タブを選択します。
[General(一般)] セクションで、** [Connection Profile(接続プロファイル)]** フィールドを見つけてください。
Auth0 Dashboard
Management API
対応されているPKCEの構成値
Auth0では、PKCEの構成に以下の値を使用できます。
値 説明 auto
デフォルト値。最も強力なアルゴリズムを使用します。 s256
SHA-256アルゴリズムを使用します。Auth0は現在、RS512トークンをサポートしていません。 plain
PKCE仕様 で説明されたプレーンテキストを使用します。disabled
PKCEに対するサポートを無効にします。
pkce
プロパティをauto
以外の値に設定すると、選択した値がIDプロバイダーでサポートされていない場合には、接続が正常に動作しないことがあります。認証問題のトラブルシューティング以外の目的で、プロパティをdisabled
に設定しないでください。
Entra IDでの制限 Entra IDにOpenID Connect接続を使用している場合は、接続のメタデータが使用されているハッシュアルゴリズムを公開しないため、pkce
をs256
に設定する必要があります。現在、Entra ID Enterprise接続 はPKCEに対応していません。
OIDC接続のクレームをマッピングする
OpenID ConnectとOkta Workforce接続は、IDプロバイダー(IdP)から受け取ったクレームを自動的にマッピングできます。このマッピングは、Auth0提供のライブラリーテンプレートで、または、独自のテンプレートを直接入力することで構成できます。
マッピングされたクレームは、自動的にAuth0のIDトークンに追加されるわけではありません。クレームをIDトークンに追加するには、「カスタムクレームを作成する 」を参照してください。
マッピングテンプレートのプロパティ
マッピングテンプレートは、以下のリストにあるoptions.attribute_map
オブジェクトプロパティをサポートしています。テンプレートは、有効なキー・値のペアを持つJSON形式でなくてはなりません。
プロパティ 必須? 説明 mapping_mode
必須 受信クレームをマッピングするために使用される方法。 userinfo_scope
任意 IdPのユーザー情報エンドポイントに送信するためのスコープ。 attributes
必須 受信クレームのマッピング詳細が含まれるオブジェクト。
モードのマッピング
mapping_mode
プロパティは、IdPから受け取るクレームをどのような方法でAuth0のユーザープロファイルにマッピングするかを定義します。mapping_mode
には、以下の値を使用できます。
値 説明 use_map
提供されたテンプレートを使用してデータをマッピングする。 bind_all
IdPが提供したすべてのデータ要素をコピーする。
予約済みのクレーム
一部のクレームは、Auth0用に予約されているため、ユーザープロファイルの属性キーとして使うことはできません。
mapping_mode
プロパティをbind_all
に設定すると、IdPが値を予約済みのクレームにマッピングしようとする場合があります。その接続でのユーザー認証が妨げられることはありませんが、予約済みクレームに関連付けられた値は、Auth0のユーザープロファイルにマッピングされません 。
mapping_mode
をuse_map
に設定すれば、受け取る予約済みクレームを有効なクレームにマッピングできます。
"attribute_map": {
"mapping_mode": "use_map",
"attributes": {
"amr": "{context.tokenset.amr}" // `amr` is a restricted claim and will not be mapped
"federated_amr": "{context.tokenset.amr}" // `federated_amr` is not a restricted claim and will be mapped
}
}
予約済みクレームの完全なリストについては、「カスタムクレームを作成する 」をご確認ください。
UserInfoのスコープ
userinfo_scope
プロパティは、要求時にAuth0がIdPへ送信するUserInfoエンドポイントのスコープを定義します。
たとえば、UserInfoエンドポイントの要求時に標準のOIDCスコープとgroups
スコープを送信したい場合には、次のようにします。
"attribute_map": {
. . .
"mapping_mode": "bind_all",
"userinfo_scope": "openid email profile groups",
. . .
}
Attributes(属性)
attributes
プロパティは、マッピング情報を含むオブジェクトです。この情報に基づいてAuth0がIdPからのクレームを解釈します。マッピング情報は、キー・値のペアとして入力しなければなりません。
左側のキーは、Auth0のユーザープロファイル属性に対応します。右側の値は、IdPからのクレームで、リテラル値、動的なコンテキストオブジェクト、またはその組み合わせとして表されます。動的コンテキストオブジェクトは、おなじみの${variable}
形式で作成されたテンプレート式です。
"attribute_map": {
. . .
"attributes": {
"name": "${context.tokenset.name}",
"email": "${context.tokenset.email}",
"username": "${context.tokenset.preferred_username}"
}
}
リテラル値
リテラル値とは、接続の全ユーザーに対して特定のプロファイル属性にマッピングされる静的な値です。
たとえば、SalesForceのOIDC接続を構成していて、すべてのユーザープロファイルに同じSFDC Community IDを割り当てたい場合は、次のようにします。
"attribute_map": {
. . .
"attributes": {
…
"sf_community_id": "3423409219032-32"
}
}
コンテキストオブジェクト
ユーザープロファイル属性に動的な値をマッピングするには、context
オブジェクトを使用します。全プロファイルで静的なリテラル値とは対照的に、個々のプロファイルに一意の値が保管できるようになります。
context
オブジェクトは以下のプロパティをサポートしています。
プロパティ 説明 context.connection
含まれるプロパティ: id
:接続の一意の識別子(con_4423423423432423
など)。 strategy
:接続戦略(oidc
など)。 context.tokenset
含まれるプロパティ:access_token
:IdPによって送信される検証済みアクセストークン全体。<claim name>
:IdPによって送信される任意のIDトークン。 context.userinfo
含まれるプロパティ:<claim name>
:IdPのUserInfoエンドポイントによって提供される任意の使用可能なクレーム。
シンプルなユーザークレームマッピング
この例では、IDトークンからのデータを使用して一般的なユーザークレームをAuth0のユーザープロファイルにマッピングしています。
"attribute_map": {
. . .
"attributes": {
"name": "${context.tokenset.name}",
"email": "${context.tokenset.email}",
"username": "${context.tokenset.preferred_username}"
}
}
グループクレームマッピング
この例では、受信IdPからグループをAuth0のユーザープロファイルにマッピングしています。
"attribute_map": {
. . .
"attributes": {
"federated_groups": "${context.userinfo.groups}",
"federated_locale": "${context.userinfo.locale}",
"federated_zoneinfo": "${context.userinfo.zoneinfo}"
}
}
リテラル値とコンテキストオブジェクトの組み合わせ
この例では、リテラル値と動的テンプレート式を組み合わせて、複雑な値をAuth0のユーザープロファイル属性にマッピングしています。
"attribute_map":{
. . .
"attributes": {
"alt_id": "user_email|${context.tokenset.email}",
. . .
}
}