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構成を表示できます。

  1. [Authentication(認証)]>[Enterprise(エンタープライズ)]に移動して、OIDCプロバイダー(OpenID ConnectまたはOkta Workforce)を選択します。

  2. [設定]タブを選択します。

  3. [General(一般)]セクションで、[Connection Profile(接続プロファイル)]フィールドを見つけてください。

Auth0 Dashboardでは、接続のPKCE構成を管理できます。

  1. [Dashboard] > [Authenticate(認証)] > [Enterprise(エンタープライズ)]に移動して、OIDCプロバイダー(OpenID ConnectまたはOkta Workforce)を選択します。

  2. [Settings(設定)]タブを選択して、[Connection Profile(接続プロファイル)]フィールドを見つけてください。

  3. PKCEプロパティを、下のリストにあるサポート値の一つに設定します。

  4. [Save(保存)]を選択します。

対応されている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_modeuse_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?

    /