OIDC接続のPKCEとクレームのマッピングを構成する
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では、接続のPKCE構成を管理できます。
[Dashboard] > [Authenticate(認証)] > [Enterprise(エンタープライズ)]に移動して、OIDCプロバイダー(OpenID ConnectまたはOkta Workforce)を選択します。
[Settings(設定)]タブを選択して、[Connection Profile(接続プロファイル)]フィールドを見つけてください。
PKCE
プロパティを、下のリストにあるサポート値の一つに設定します。[Save(保存)]を選択します。
ディスカバリーエンドポイントの使用
curl --request POST \
--url 'https://{yourDomain}/api/v2/connections' \
--header 'authorization: Bearer MGMT_API_ACCESS_TOKEN' \
--data '{
"strategy": "oidc",
"name": "CONNECTION_NAME",
"options": {
"type": "back_channel",
"discovery_url": "https://IDP_DOMAIN/.well-known/openid-configuration",
"client_id" : "IDP_CLIENT_ID",
"client_secret" : "IDP_CLIENT_SECRET",
"scopes": "openid profile",
"connection_settings": { "pkce": "auto" }
}
}'
Was this helpful?
ディスカバリーエンドポイントなし
discovery_url
がない場合、必要なフィールドでoidc_metadata
オブジェクトを手動で入力する必要があります。
curl --request POST \
--url 'https://{yourDomain}/api/v2/connections' \
--header 'authorization: Bearer MGMT_API_ACCESS_TOKEN' \
--data '{
"strategy": "oidc",
"name": "CONNECTION_NAME",
"options": {
"type": "back_channel",
"client_id": "IDP_CLIENT_ID",
"client_secret": "IDP_CLIENT_SECRET",
"connection_settings": { "pkce": "auto" },
"issuer": "https://IDP_DOMAIN",
"authorization_endpoint": "https://IDP_DOMAIN/authorize",
"jwks_uri": "https://IDP_DOMAIN/.well-known/jwks.json",
"scopes": "openid profile",
"oidc_metadata": {
"issuer": "https://IDP_DOMAIN",
"authorization_endpoint": "https://IDP_DOMAIN/authorize",
"jwks_uri": "https://IDP_DOMAIN/.well-known/jwks.json",
"token_endpoint": "https://IDP_DOMAIN/token/refresh",
"code_challenge_methods_supported": ["plain", "S256"]
}
}
}'
Was this helpful?
対応されているPKCEの構成値
Auth0では、PKCEの構成に以下の値を使用できます。
値 | 説明 |
---|---|
auto |
デフォルト値。最も強力なアルゴリズムを使用します。 |
s256 |
SHA-256アルゴリズムを使用します。Auth0は現在、RS512トークンをサポートしていません。 |
plain |
PKCE仕様で説明されたプレーンテキストを使用します。 |
disabled |
PKCEに対するサポートを無効にします。 |
OIDC接続のクレームをマッピングする
OpenID ConnectとOkta Workforce接続は、IDプロバイダー(IdP)から受け取ったクレームを自動的にマッピングできます。このマッピングは、Auth0提供のライブラリーテンプレートで、または、独自のテンプレートを直接入力することで構成できます。
マッピングテンプレートのプロパティ
マッピングテンプレートは、以下のリストにある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
}
}
Was this helpful?
予約済みクレームの完全なリストについては、「カスタムクレームを作成する」をご確認ください。
UserInfoのスコープ
userinfo_scope
プロパティは、要求時にAuth0がIdPへ送信するUserInfoエンドポイントのスコープを定義します。
たとえば、UserInfoエンドポイントの要求時に標準のOIDCスコープとgroups
スコープを送信したい場合には、次のようにします。
"attribute_map": {
. . .
"mapping_mode": "bind_all",
"userinfo_scope": "openid email profile groups",
. . .
}
Was this helpful?
Attributes(属性)
attributes
プロパティは、マッピング情報を含むオブジェクトです。この情報に基づいてAuth0がIdPからのクレームを解釈します。マッピング情報は、キー・値のペアとして入力しなければなりません。
左側のキーは、Auth0のユーザープロファイル属性に対応します。右側の値は、IdPからのクレームで、リテラル値、動的なコンテキストオブジェクト、またはその組み合わせとして表されます。動的コンテキストオブジェクトは、おなじみの${variable}
形式で作成されたテンプレート式です。
"attribute_map": {
. . .
"attributes": {
"name": "${context.tokenset.name}",
"email": "${context.tokenset.email}",
"username": "${context.tokenset.preferred_username}"
}
}
Was this helpful?
リテラル値
リテラル値とは、接続の全ユーザーに対して特定のプロファイル属性にマッピングされる静的な値です。
たとえば、SalesForceのOIDC接続を構成していて、すべてのユーザープロファイルに同じSFDC Community IDを割り当てたい場合は、次のようにします。
"attribute_map": {
. . .
"attributes": {
…
"sf_community_id": "3423409219032-32"
}
}
Was this helpful?
コンテキストオブジェクト
ユーザープロファイル属性に動的な値をマッピングするには、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}"
}
}
Was this helpful?
グループクレームマッピング
この例では、受信IdPからグループをAuth0のユーザープロファイルにマッピングしています。
"attribute_map": {
. . .
"attributes": {
"federated_groups": "${context.userinfo.groups}",
"federated_locale": "${context.userinfo.locale}",
"federated_zoneinfo": "${context.userinfo.zoneinfo}"
}
}
Was this helpful?
リテラル値とコンテキストオブジェクトの組み合わせ
この例では、リテラル値と動的テンプレート式を組み合わせて、複雑な値をAuth0のユーザープロファイル属性にマッピングしています。
"attribute_map":{
. . .
"attributes": {
"alt_id": "user_email|${context.tokenset.email}",
. . .
}
}
Was this helpful?