Liberty での SCIM 操作
Liberty では、System for Cross-domain Identity Management (SCIM) 1.1 仕様がサポートされます。
リソースの取得
WebSphere® Application Server Liberty は、SCIM 1.1 仕様をサポートします。 仕様について詳しくは、「http://www.simplecloud.info/」を参照してください。
既知のリソースを取得するには、構成された HTTP エンドポイントに GET 要求を送信する必要があります。 以下の例を参照してください。/Users/{id} または /Groups/{id}。
また、以下の例は、LDAP レジストリーに対する操作を示しています。
<ldapRegistry id="LDAP1" realm="SampleLdapIDSRealm" host="9.127.1.90" port="1389" ignoreCase="true"
baseDN="o=ibm,c=us" ldapType="IBM Tivoli Directory Server" searchTimeout="8m" recursiveSearch="true"
bindDN="xxxxxx" bindPassword="xxxxxxx">
<ldapEntityType name="PersonAccount">
<rdnProperty name="uid" objectClass="inetOrgPerson"/>
<objectClass>inetOrgPerson</objectClass>
</ldapEntityType>
<ldapEntityType name="Group">
<objectClass>groupofnames</objectClass>
<objectClass>ibm-nestedGroup</objectClass>
<rdnProperty name="cn" objectClass="groupofnames"/>
</ldapEntityType>
<attributeConfiguration>
<attribute name="title" propertyName="honorificPrefix" syntax="String" entityType="PersonAccount">
</attribute>
<attribute name="initials" propertyName="middleName" syntax="String" entityType="PersonAccount">
</attribute>
<attribute name="st" propertyName="honorificSuffix" syntax="String" entityType="PersonAccount">
</attribute>
<attribute name="l" propertyName="homeStateOrProvinceName" syntax="String" entityType="PersonAccount">
</attribute>
<attribute name="street" propertyName="homeStreet" syntax="String" entityType="PersonAccount">
</attribute>
<attribute name="postalAddress" propertyName="homeCity" syntax="String" entityType="PersonAccount">
</attribute>
<attribute name="postalCode" propertyName="homePostalCode" syntax="String" entityType="PersonAccount">
</attribute>
<attribute name="postOfficeBox" propertyName="homeCountryName" syntax="String" entityType="PersonAccount">
</attribute>
<attribute name="departmentNumber" propertyName="photoURLThumbnail" syntax="String" entityType="PersonAccount">
</attribute>
<attribute name="description" propertyName="photoURL" syntax="String" entityType="PersonAccount">
</attribute>
</attributeConfiguration>
<groupProperties>
<memberAttribute name="member" dummyMember="uid=dummy" objectClass="groupOfNames" scope="direct"/>
<memberAttribute name="ibm-memberGroup" objectClass="ibm-nestedGroup" scope="direct"/>
</groupProperties>
</ldapRegistry>
LDAP からリソースを取得するには、
https://localhost:9090/ibm/api/scim/Users/uid=jsmith,o=ibm,c=us として GET 要求を送信する必要があります。リソースの照会
リソースを照会するには、構成された HTTP エンドポイントに GET 要求を送信し、検索のためのフィルターを指定する必要があります。
また、attributes パラメーターを指定して、戻されたリソースから値のサブセットを戻し、ページとソートのパラメーターを指定して、戻されたリソースを整理することもできます。
以下の例は、いくつかのフィルター・オプションを示したものです。
- 値のサブセットを取得するためのパラメーターを指定します。例えば、https://localhost:9090/ibm/api/scim/Users?filter=givenname sw "Jo" と指定すると、名前が Jo で始まるすべてのユーザーを取得します。
- attributes パラメーターを指定して、値のサブセットを取得します。例えば、https://localhost:9090/ibm/api/scim/Users?filter=givenname sw "Jo"&attributes=username,emails&filter=name.familyname eq "Smith" と指定すると、Jo で始まり、姓が Smith であるユーザー名の E メール・アドレスを取得します。
- ページとソートのパラメーターを指定して、整理されたリソースを取得します。 例えば、https://localhost:9090/ibm/api/scim/Users?filter=givenname sw "Jo"&attributes=username&sortBy=username&startIndex=3&count=5 と指定すると、Jo で始まり、姓が Smith のユーザー名を各ページに 5 つ含むソート結果の 3 ページ目を取得します。
注:
- フィルターに指定された値で大/小文字が区別されるかどうかは、基礎となる統合リポジトリーによって決まります。 LDAP の場合、属性が大/小文字を区別する LDAP 属性にマップされていない限り、デフォルトで値の大/小文字は区別されません。
- 検索フィルターでユーザー名は使用できません。
- SCIM 属性をサポートしない基本レジストリー、SAF レジストリー、またはカスタム・レジストリーを統合した場合、 フィルター・パターンは常にユーザー名に対して検索され、ユーザー名属性のみが戻されます。
リソースの作成
新規リソースを作成するには、リソース・エンドポイント、つまり Users または Groups に POST 要求を送信する必要があります。
POST のコンテンツは、ユーザーの json オブジェクトを含み、HTTP ヘッダー content-type は application/json に設定されなければなりません。
注: application/xml のコンテンツ・タイプはサポートされません。
ユーザーを作成するには、以下の要求が https://localhost:9090/ibm/api/scim/Users
Content-Type にポストされる必要があります。
Content-Type: application/json
Content-Length: ...
{
"schemas":["urn:scim:schemas:core:1.0"],
"userName":"jdoe",
"externalId": "uid=jdoe,o=ibm,c=us",
"name":{
"familyName":"Doe",
"givenName":"Jane"
}
}
ユーザー・レジストリーにユーザーまたはグループを正しく作成するために必要なすべての属性が、要求に含まれていなければなりません。 例えば、バックエンド Tivoli Directory Server LDAP で、ユーザー作成に必要な LDAP 属性の最小セットは、 uid、sn、および cn になります。そのため、ユーザー作成の要求には、 userName、givenName、および familyName が含まれなければなりません。 ユーザー・レジストリーから何らかのスキーマ違反がある場合、作成操作は失敗します。
externalId 属性は ID のように動作するもので、指定が必要です。属性フォーマットは、バックエンド・ユーザー・レジストリーの仕様によって異なります。 前の例で、バックエンドは baseEntry o=ibm,c=us の LDAP サーバーで、ユーザーの RDN プロパティーが UID として設定されるため、externalId は uid=jdoe,o=ibm,c=us になります。
作成要求に基づいて、作成されたユーザー・オブジェクトが戻されます。
{
"schemas":["urn:scim:schemas:core:1.0"],
"id":"uid=jdoe,o=ibm,c=us",
"userName":"jdoe",
"externalId":"uid=jdoe,o=ibm,c=us",
"name":{
"formatted":"Jane Doe",
"familyName":"Doe",
"givenName":"Jane"
},
"meta":{
"lastModified":"2015-09-15T14:30:11", "location":"https:\\localhost:9090\ibm\api\scim\Users\uid=jdoe,o=ibm,c=us",
"created":"2015-09-15T14:30:11"
}
}
複数の LDAP が構成されていて、作成操作を起動する必要がある場合は、エンティティーのデフォルトの親が定義されていなければなりません。
定義された親は、新しいエンティティーが作成される際の基本エントリーを指定します。
以下の例は、PersonAccount のデフォルトの親の構成を示しています。
<federatedRepository>
<primaryRealm name="WIMRegistry">
<participatingBaseEntry name="o=ibm,c=us"/>
<participatingBaseEntry name="o=ldap"/>
</primaryRealm>
<supportedEntityType>
<defaultParent>o=ldap</defaultParent>
<name>PersonAccount</name>
</supportedEntityType>
</federatedRepository>
リソースの変更
リソースを変更するには、リソース・エンドポイント、つまり、/Users または /Groups
に PUT 要求を送信する必要があります。
PUT 要求は、リソースの完全更新を実行します。
入力に指定されていない属性は削除されます。
注: PATCH による部分更新はサポートされません。
前に作成されたリソースを変更するには、以下の要求が https://localhost:9090/ibm/api/scim/Users/uid=jdoe,o=ibm,c=us にポストされる必要があります。
Content-Type: application/json
Content-Length: ...
{
"schemas":["urn:scim:schemas:core:1.0"],
"userName":"jdoe",
"externalId":"uid=jdoe,o=ibm,c=us",
"name":{
"familyName":"Doe",
"givenName":"Janet"
}
}
この要求では、オブジェクトの名を Jane から Janet に変更します。URL に指定された ID は、ユーザー・オブジェクトに指定された externalId に一致する必要があります。グループ cn=employeeGroup,o=ibm,c=us を変更してグループ・メンバーシップを変えるには、
メンバー属性を指定する必要があります。
Content-Type: application/json
Content-Length: ...
{
"id":"cn=employeeGroup,o=ibm,c=us",
"schemas":["urn:scim:schemas:core:1.0"],
"displayName":"employeeGroup",
"externalId":"cn=employeeGroup,o=ibm,c=us",
"members":[{"value":"uid=jdoe,o=ibm,c=us", "type":"User"},{"value":"cn=consultants,o=ibm,c=us", "type":"Group"}]
}
グループ cn=employeeGroup,o=ibm,c=us を変更してグループからすべてのメンバーを削除するには、
空のメンバー属性を指定する必要があります。
Content-Type: application/json
Content-Length: ...
{
"id":"cn=employeeGroup,o=ibm,c=us",
"schemas":["urn:scim:schemas:core:1.0"],
"displayName":"employeeGroup",
"externalId":"cn=employeeGroup,o=ibm,c=us",
"members":[]
}
リソースの削除
リソースを削除するには、リソース・エンドポイント、つまり、/Users または /Groups に DELETE 要求を送信する必要があります。 例えば、前の例で作成されたユーザー uid=jdoe,o=ibm,c=us を削除するには、https://localhost:9090/ibm/api/scim/Users/uid=jdoe,o=ibm,c=us に要求を送信します。注: SCIM は、Java 7 以降でのみ実行されます。