SAML JITプロビジョニングの構成

SAMLジャストインタイム(JIT)プロビジョニングでは、ユーザーが最初にSSOを実行しようとしたときに、ユーザーがまだアイデンティティ・ドメインに存在しない場合、ユーザー・アカウントの作成が自動化されます。SAML JITプロビジョニングでは、自動ユーザー作成に加えて、プロビジョニングの一環としてグループ・メンバーシップの付与および取消しが可能です。SAML JITプロビジョニングは、サービス・プロバイダー(SP)ストア内のユーザーの属性をIDプロバイダー(IdP)のユーザー・ストア属性と同期できるように、プロビジョニングされたユーザーを更新するように構成できます。

SAML JITプロビジョニングを構成する場合、SAML IdPによって送信されるユーザー・データを使用してアイデンティティ・ドメイン内のユーザーをどのように作成または更新する(あるいはその両方を行う)かを定義します。最初に、フェデレーテッドSSO用のSAML IdPを作成して構成し、次にそのIdP用のSAML JITプロビジョニング・オプションを有効化および構成します。

SAML JITプロビジョニングは、/admin/v1/IdentityProviders REST APIエンドポイントを使用してのみ構成できます。

次の表では、SAML JITプロビジョニングに関連するIdP構成の属性を説明します。OAuth 2を使用してREST APIにアクセスする方法の詳細は、OAuth 2を使用してREST APIにアクセスを参照してください。
IdentityProviderプロパティ 説明 JSONの例
jitUserProvEnabled

このIdPのSAML JITプロビジョニング機能を有効/無効にするブール・プロパティ。

このプロパティがtrueの場合、少なくともjitUserProvCreateUserEnabledまたはjitUserProvAttributeUpdateEnabledのいずれかがtrueである必要があります。
"jitUserProvEnabled": true,
jitUserProvCreateUserEnabled

ユーザーがまだ存在しない場合に、受信するアサーションに基づいてユーザーを作成するかどうかを示すブール・プロパティ。

デフォルトでは、SAML JITプロビジョニングを使用して作成されたユーザーはフェデレーテッド・ユーザーです。フェデレーテッド・ユーザーには、アイデンティティ・ドメインに直接サインインするための資格証明がありませんが、かわりに外部アイデンティティ・プロバイダによって認証される必要があります。ユーザーのフェデレーテッド・ステータスは、管理コンソールを使用して変更でき、REST APIを使用してisFederatedUser属性を更新できます。たとえば、管理者権限を持つユーザーのフェデレーテッド・ステータスを変更して、コンソールに直接サインインできます。SAML JITプロビジョニングを使用して作成されたすべてのユーザーを(アイデンティティ・ドメインのサインイン・パスワードを使用して作成された)非フェデレーテッド・ユーザーとして作成する場合は、JIT属性マッピング構成でisFederatedUser=falseを設定します。次の表のattributeMappingsを参照してください。

"jitUserProvCreateUserEnabled": true,
jitUserProvAttributeUpdateEnabled

ユーザーがすでに存在する場合に、受信するアサーションに基づいてユーザーの属性を更新するかどうかを示すブール・プロパティ。

"jitUserProvAttributeUpdateEnabled": true,
jitUserProvAttributes

これは、動的ユーザー作成とユーザー属性のアップデートの両方について、IdP SAMLアサーション属性値とアイデンティティ・ドメイン・ユーザー属性のマッピングを定義するMappedAttributesオブジェクトへの参照です。(IdentityProviderの作成時に設定し、この参照を更新しないでください。)

MappedAttributesリソースのjitUserProvAttributesの使用方法の詳細は、次を参照してください。

jitUserProvGroupAssertionAttributeEnabled

SAML属性のIdPから受信したグループ名のリストに基づいて、グループ・メンバーシップがユーザーに割り当てるかどうかを示すブール・プロパティ。

このプロパティがtrueの場合は、プロパティjitUserProvGroupSAMLAttributeNameを設定する必要があります。

"jitUserProvGroupAssertionAttributeEnabled": true,
jitUserProvGroupMappingMode

IdP内のグループをアイデンティティ・ドメイン内のグループにマップする方法を制御する文字列プロパティ。値は次のいずれかにする必要があります:

明示的 - IdPグループは、構成プロパティjitUserProvGroupMappingsを使用してアイデンティティ・ドメインのグループに明示的にマップされます。

暗黙的 - SAMLアサーションのグループ名は、アイデンティティ・ドメインのグループ名と一致する必要があります。

値が指定されていない場合は、デフォルトで explicitに設定されます。

"jitUserProvGroupMappingMode": "explicit",
jitUserProvGroupMappings

IdPアサーション内のグループとアイデンティティ・ドメイン内のグループ間のマッピングの配列。

配列内のすべてのオブジェクトは、IdPグループとアイデンティティ・ドメイン・グループ間のマッピングを表します。

idpGroupはIdPアサーションのグループ識別子で、valueはアイデンティティ・ドメインのグループ識別子です。

IdP当たりのグループ・マッピングの最大数は250です。

ノート:

グループ・マッピングを使用したSAMLジャストインタイム(JIT)プロビジョニングを使用して、ユーザーのグループ権限を割り当てたり削除したりする場合は、グループ・メンバーシップへの変更がすぐに反映されない可能性があることに注意してください。これは、特にOCIコンソールなどのアイデンティティ・データ・プレーンに依存する機能にアクセスする場合の、最終的な一貫性によるものです。その結果、ユーザー割当てまたは削除が関連グループに完全に伝播されるまでに遅延が発生する可能性があります。リージョン間のシナリオでは、伝播時間が長くなる場合があります。


		"jitUserProvGroupMappings": [
   {
     "idpGroup": "7e18e37e-1b2f-46d9-9d9c-6df136570b27",
     "value": "4bce9b677ab447f18b65ba7bf9a61c21"
   },
   {
     "idpGroup": "cf6f7594-d454-40ac-971b-07cf0627ca17",
     "value": "6d8448a643b94b268d986e9d31e20cbc"
   }
 ]
jitUserProvGroupSAMLAttributeName

プロパティjitUserProvGroupAssertionAttributeEnabledtrueの場合に、ユーザーに割り当てるグループを含むSAMLアサーション属性の名前。

アサーション属性は、次のいずれかで構成できます:
  • グループ名のカンマ区切りリストを含む単一のAttribute Value要素、または
  • 複数のAttributeValue要素(それぞれに単一のグループ名があります)。
"jitUserProvGroupSAMLAttributeName": "FederatedGroups",
jitUserProvGroupStaticListEnabled

グループ名の静的リストに基づいて、グループ・メンバーシップにユーザーに割り当てるかどうかを示すブール・プロパティ。

このプロパティがtrueの場合は、プロパティjitUserProvAssignedGroupsを設定する必要があります。

"jitUserProvGroupStaticListEnabled": true,
jitUserProvAssignedGroups

プロパティjitUserProvGroupStaticListEnabledtrueの場合、SAMLアサーションで受信される値に加えて、ユーザーに割り当てるグループの配列。

ノート:この配列に設定されている値はグループID (グループ名ではない)です。

"jitUserProvAssignedGroups": 
[
{"value": "21f273857a304684a8f7e353e452a2e1"},
{"value": "1962687f74b84121b69c5560769e8b06"}
],
jitUserProvGroupAssignmentMethod

グループ・メンバーシップをアイデンティティ・ドメインのユーザーにどのように割り当てるか制御する文字列プロパティ。値は次のいずれかにする必要があります:

  • Overwrite - すべてのユーザーのグループ・メンバーシップを、SAMLアサーションで受信したグループ・メンバーシップ、またはここで静的に構成されたグループ・メンバーシップ(あるいはその両方)に置き換えます。
  • Merge - ユーザーの既存のグループ・メンバーシップに、SAMLアサーションから暗黙的にマップされたグループ・メンバーシップ、またはここで静的に構成されたグループ・のメンバーシップ(あるいはその両方)を追加します。明示的にマップされたグループは、常にSAMLアサーション値で上書きまたは置換されます。ノート:マージ・オプションを使用する場合、IdPからユーザーを削除する場合は、アイデンティティ・ドメインからユーザーを削除する必要もあります。権限はアイデンティティ・ドメインから自動的に削除されません。
"jitUserProvGroupAssignmentMethod": "Merge",
jitUserProvIgnoreErrorOnAbsentGroups

受信アサーション属性が存在しないグループ、またはグループ・マッピングがアイデンティティ・ドメインに存在しないグループを指定した場合に実行するアクションを決定するブール・プロパティ。

このプロパティがtrueの場合、欠落しているグループは無視され、ユーザーが作成されます。

このプロパティがfalseで、存在しないグループが指定されている場合、ユーザーの作成は失敗します。

明示的モードではデフォルトでtrue、jitUserProvGroupMappingModeを使用して指定された暗黙的モードではfalseになります。

"jitUserProvIgnoreErrorOnAbsentGroups": true,

jitUserProvAttributesマッピングの構成

IdentityProviderが作成され、必要に応じてSAML JITプロビジョニング属性が構成された後に、jitUserProvAttributesリソースを更新してインバウンド属性マッピングを追加する必要があります。jitUserProvAttributesによって参照されるMappedAttributesリソースは、IdentityProviderリソースを使用して自動的に作成および削除され、このプロパティはimmutableとしてマークされます。SAML JITプロビジョニング属性マッピングは、置換するのではなく、既存のMappedAttributesオブジェクトを更新することで構成されます。

次の表では、SAML JITプロビジョニングで使用されるMappedAttributesプロパティについて説明します。
MappedAttributesプロパティ 説明 JSONの例
attributeMappings
SAMLアサーション属性とアイデンティティ・ドメイン・ユーザー属性間のマッピングのリスト。各マッピングの構成は次のとおりです:
  • idcsAttributeName - 受信値を割り当てるユーザー属性へのパスを定義する式。式は、アイデンティティ・ドメインのユーザー同期機能で使用されるSCIM構文に従います。この属性に指定する式は、Userスキーマと照合して検証されます。
  • managedObjectAttributeName - ユーザー属性にマップされる値を定義するポリシー式。これには、"firstname"の名前のアサーション属性を参照するための$(assertion.firstname)などの値、または静的な文字列リテラルまたは関数を指定できます。

ノート: SAMLアサーション属性名では、大/小文字が区別されます。

"attributeMappings":[
{
"idcsAttributeName": "userName",
"managedObjectAttributeName": "$(assertion.mail)"
},
{
"idcsAttributeName": "name.givenName",
"managedObjectAttributeName": "$(assertion.firstname)"
},
{
"idcsAttributeName": "name.familyName", 
"managedObjectAttributeName": "$(assertion.lastname)" 
}, 
{ 
"idcsAttributeName": "emails[primary eq true and type eq \"work\"].value", 
"managedObjectAttributeName": "$(assertion.mail)" 
}, 
{ 
 "idcsAttributeName": "urn:ietf:params:scim:schemas:oracle:idcs:extension:user:User:isFederatedUser", 
"managedObjectAttributeName": "#toBoolean(\"false\")"
}, 
{
"idcsAttributeName":
"urn:ietf:params:scim:schemas:extension:enterprise:2.0:User:Organization",
"managedObjectAttributeName": "ACME Corporation"}, 
{ 
"idcsAttributeName": "externalId", 
"managedObjectAttributeName":
"#concat(\"ACME/\",$(assertion.fed.nameidvalue))" 
}
],
refResourceType

このマップ済属性を使用している、または参照しているリソースの名前(SAML JITプロビジョニングの場合は常にIdentityProvider、更新しない)。

"refResourceType": "IdentityProvider",
idcsResourceType

マッピング先のアイデンティティ・ドメイン・リソースのタイプ(SAML JITプロビジョニングの場合は常にUser、更新しないでください)。

"idcsResourceType": "User",
direction

問題のアイデンティティ・ドメイン・リソースに関するマッピングの方向(SAML JITプロビジョニングの場合は常にinbound、更新しない)。

"direction": "inbound",
refResourceID

このMappedAttributeリソースへの参照が含まれるIdentityProviderリソースのID (作成時に設定され、更新されません)。

"refResourceID": "<IDP Resource ID>",

属性マッピングを更新するには、最初に、IdPの正しいMappedAttributesリソースを識別する必要があります。これを行うには、IdentityProviderリソースを取得し、jitUserProvAttributesプロパティの$ref属性を参照します。

たとえば、https://<domainURL>/admin/v1/MappedAttributes/6533d475754845a8b0e971c48b87eddaなどのMappedAttributesリソースがある場合は、PATCHを実行して、そのattributeMappingsプロパティを更新します。

MappedAttributesのサンプルPATCHワークロード


{
 "schemas": [
     "urn:ietf:params:scim:api:messages:2.0:PatchOp"
 ],    "Operations": [
     {
         "op": "replace",
         "path": "attributeMappings",
         "value": [
             {
                 "managedObjectAttributeName": "$(assertion.mail)",
                 "idcsAttributeName": "userName"
             },
             {
                 "managedObjectAttributeName": "$(assertion.firstname)",
                 "idcsAttributeName": "name.givenName"
             },
             {
                 "managedObjectAttributeName": "$(assertion.lastname)",
                 "idcsAttributeName": "name.familyName"
             },
             {
                 "managedObjectAttributeName": "$(assertion.mail)",
                 "idcsAttributeName": "emails[primary eq true and type eq \"work\"].value"
             }
         ]
     }
 ]
}

SAML JITプロビジョニング属性マッピングの使用方法と実行時の動作

userNamename.givenNameおよびname.familyNameの値が存在しない場合は、これらの属性にUserスキーマで必須のマークが付けられるため、実行時にエラーが発生します。テナントがオプションになるよう構成されていないかぎり、プライマリ電子メール・アドレスにも同じことが当てがまります。

実行時に、アサーション属性値をマップ先のユーザー属性に割り当てることができるデータ型に変換できない場合、エラーが発生し、SSOは失敗します。

複数の属性マッピングが同じアイデンティティ・ドメイン・ユーザー属性をターゲットとして構成されている場合、それらの位置の順序で評価および実行され、最後のマッピングの結果のみが保持されます。

jitUserProvAttributeUpdateEnabledtrueの場合、値が含まれない受信アサーション属性によって、対応するマップ済アイデンティティ・ドメイン・ユーザー属性から値が削除されます。

SAMLアサーション属性の発行者およびサブジェクトNameIDは、AttributeStatementには表示されませんが、サポートされています。これらは、次の予約済の式を使用してマップできます:
  • ${assertion.fed.issuerid)
  • $(assertion.fed.nameidvalue)
一部のアイデンティティ・ドメインのユーザー/アカウント・スキーマ属性は、SAML JITプロビジョニングで使用できません:
  • 機密属性- スキーマ内で"idcsSensitive: hash"または"idcsSensitive: encrypt"としてマークされている属性
  • スキーマで"idcsInternal: true"としてマークされている属性
  • readOnlyの属性
  • ユーザー同期で禁止されているすべての属性

SAML JITプロビジョニングを使用してユーザーを作成すると、次の属性が設定されます。次の属性は構成できません:

  • bypassNotification : true - たとえば、アカウントのアクティブ化の電子メールは、新しく作成されたユーザーに送信されません。
  • syncedFromApp - インバウンドSAMLアサーションの発行者に対応するアイデンティティ・プロバイダ・リソースへの参照。
SAML JITプロビジョニングを使用してユーザーを作成すると、isFederatedUser属性がデフォルトでtrueに設定されます。この動作は、SAML JITプロビジョニングのattributeMappings構成でisFederatedUser属性をfalseに設定することで変更できます。
ノート

このデフォルトの動作(isFederatedUser = true)は、ユーザー作成にのみ適用され、ユーザー更新には適用されません。attributeMappings構成は、ユーザー作成とユーザー更新の両方に適用されます。

よくある質問

質問: SAML JITプロビジョニング中にグループ・メンバーシップを更新するために、アイデンティティ・ドメインにグループが存在する必要がありますか。

A: はい。グループ・メンバーシップを更新する前に、アイデンティティ・ドメインでグループを同期または手動で作成する必要があります。SAML JITプロビジョニングでは、グループはオンザフライで作成されません。

質問: 属性マッピングでリテラルをマップできますか。たとえば、ユーザーの作成中にisFederatedUser = trueをマップできますか。

A: はい。

Q: 属性マッピングで複数値属性をサポートしていますか。「はい」の場合、ペイロードにパッチを適用するか、それとも上書きを実行しますか。

A: はい。アイデンティティ・ドメイン・ユーザー属性のすべての値は、SAML JITプロビジョニング属性マッピングの最終的な結果に置き換えられます。

質問: ユーザーがIdPのグループから削除された場合、どのように処理しますか。そのグループがアイデンティティ・ドメインで手動で割り当てられた場合はどうなりますか? 置換とパッチ適用の動作を構成できますか。

A: SAML JITプロビジョニング更新を使用したグループ割当ては、ユーザーのグループ割当て全体に対して、マージまたは上書きのいずれかの動作になるよう構成できます。たとえば、更新が上書き用に構成されている場合、IdPアサーションで表示されない手動グループ割当ては削除されます。

Q: ユーザーの作成時にのみSAML JITプロビジョニングを実行し、後でユーザーを更新しないように構成できますか。

A: はい。jitUserProvCreateUserEnabledがtrueで、jitUserProvAttributeUpdateEnabledがfalseの場合、ユーザーが欠落していると、SAML JITプロビジョニングによってユーザーが作成されますが、以降のログインでは更新されません。