第 5 章 クラウドサービス利用企業向け実装ガイド
5.2. SCIM クライアントの実装
5.2.1. ユーザー情報の操作
5.2.1.2. ユーザーの更新
ユーザーの更新を行なう場合は、対象ユーザーのユーザーリソースに対して、JSON で表現さ れたユーザー情報をHTTP PUTする。
更新対象のユーザーリソースを指定するために、SCIM サーバー上でのユーザーリソースの識 別子 (id) が必要となる。そのため、ユーザーの更新は以下の2つのステップで実行する必要があ る。
1. ユーザー検索によるユーザーリソース識別子 (id) の取得
2. HTTP PUTによるユーザー情報の更新
5.2.1.2.1. ユーザーリソース識別子 (id) の取得
ユーザーリソース識別子を取得するために、ID 管理サーバー上の識別子 (externalId) を条件 としてユーザーリソースを検索する。
POST /.search HTTP/1.1 Host: scim.svc.example.net Accept: application/scim+json Content-Type: application/scim+json
Authorization: Basic Yzc2NTQzMjE6Z3lOOUpSN3pUWDRteXd0NHFiMW5ZdUhpTTA3WFI0Q1U=
Content-Length: ...
{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:SearchRequest"], "attributes": ["externalId", "meta"],
"filter": "externalId eq \"e1234567\""
}
該当ユーザーが見つかれば、次のとおり1件のユーザーリソースが応答される。一意性を持つ 属性 externalId を用いた検索のため、検索が成功した場合は必ず1件 (totalResultsが1) の応 答となる。
HTTP/1.1 200 OK
Content-Type: application/scim+json
{
"schemas":[
"urn:ietf:params:scim:api:messages:2.0:ListResponse"
],
"totalResults": 1, "Resources": [ {
"id": "a2e492da-e2ed-4d90-a186-6fc01b56b8d9", "externalId": "e1234567",
"meta": {
"resourceType": "User",
"created": "2015-04-01T01:23:45.678Z", "lastModified": "2015-04-01T01:23:45.678Z",
"location": "https://scim.svc.example.net/v2/User/a2e492da-e2ed-4d90-a186-6fc01b56b8d9",
"version": "W/\"4124bc0a9335c27f086f24ba207a4912\""
} } ] }
この結果の Resources属性の 1番目の要素の id属性の値が、更新対象のユーザーのリソース
また、SCIMサーバーが Resource Versioning に対応している場合は、meta.version属性の値 が、現在のリソースのバージョンとなる。
SCIMを用いてユーザーを検索する場合のSCIMリクエスト・レスポンスの例を [付録 B.3] に 掲載する。
5.2.1.2.2. ユーザー情報の更新
更新対象ユーザーのユーザーリソースの URI は、SCIM サーバーの User エンドポイント URIと "/" とリソース識別子 (id) を連結したものとなる。
このエンドポイントに対して、JSONで表現されたユーザー情報をHTTP PUT することで、
ユーザー情報を更新することができる。HTTP PUT はユーザー情報を置き換える操作のため、
SCIM クライアントは変更の有無にかかわらず、ユーザーデータの全属性を送る必要がある点に 注意が必要である。
SCIMサーバーが Resource Versioning に対応している場合は、どのバージョンのユーザーリ ソースへの変更であるかを示すため、リクエストヘッダにIf-Matchヘッダを追加する。
PUT /Users/a2e492da-e2ed-4d90-a186-6fc01b56b8d9 HTTP/1.1 Host: scim.svc.example.net
Accept: application/scim+json Content-Type: application/scim+json
Authorization: Basic Yzc2NTQzMjE6Z3lOOUpSN3pUWDRteXd0NHFiMW5ZdUhpTTA3WFI0Q1U=
Content-Length: ...
If-Match: W/"4124bc0a9335c27f086f24ba207a4912"
{
"schemas": [
"urn:ietf:params:scim:schemas:core:2.0:User",
"urn:ietf:params:scim:schemas:extension:enterprise:2.0:User", "urn:oidfj:params:scim:schemas:extention:enterprisejp:2.0:User"
],
"id": "a2e492da-e2ed-4d90-a186-6fc01b56b8d9", "userName": "[email protected]", "externalId": "e1234567",
...(更新内容を含むユーザーデータ。以下省略)...
}
ユーザー情報が正しく更新された場合は、HTTPステータスコード200 (OK) とともに、登録 されたユーザーリソースが応答される。
このユーザーリソースは、リクエストしたユーザー情報にリソース識別子 (id) とメタ情報
(meta) が付加されたものとなっている。情報の更新によりメタ情報の中の "lastModified" 属性
と "version" 属性の値も更新される。
HTTP/1.1 200 OK
Content-Type: application/scim+json
Location: https://scim.svc.example.net/v2/User/a2e492da-e2ed-4d90-a186-6fc01b56b8d9 ETag: W/"21ad0bd836b90d08f4cf640b4c298e7c"
{
"schemas": [
"urn:ietf:params:scim:schemas:core:2.0:User",
"urn:ietf:params:scim:schemas:extension:enterprise:2.0:User", "urn:oidfj:params:scim:schemas:extention:enterprisejp:2.0:User"
],
"id": "a2e492da-e2ed-4d90-a186-6fc01b56b8d9", "userName": "[email protected]", "externalId": "e1234567",
"meta": {
"resourceType": "User",
"created": "2015-04-01T01:23:45.678Z", "lastModified": "2015-07-01T01:02:03.004Z",
"location": "https://scim.svc.example.net/v2/User/a2e492da-e2ed-4d90-a186-6fc01b56b8d9",
"version": "W/\"21ad0bd836b90d08f4cf640b4c298e7c"\""
},
...(ユーザーデータ。以下省略)...
}
SCIMサーバーからのエラーの応答については、[5.2.1.4節] で解説する。
SCIMを用いてユーザーを更新する場合のSCIMリクエスト・レスポンスの例を [付録 B.4] に 掲載する。