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

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


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

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

アサーション属性は、次のいずれかで構成できます:
  • グループ名のカンマ区切りリストを含む単一の属性値要素、または
  • 複数の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スキーマでrequiredとしてマークされるため、実行時にエラーが発生します。テナントがオプションになるように構成されていないかぎり、プライマリ電子メール・アドレスについても同じことが当てはまります。

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

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

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

AttributeStatementには表示されませんが、SAMLアサーション属性の発行者およびサブジェクトNameIDはサポートされています。これらは、次の予約済の式を使用してマップできます:
  • ${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構成は、ユーザー作成とユーザー更新の両方に適用されます。

FAQ

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

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

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

A: はい。

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

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

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

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

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

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