SalesforceがSCIMに対応しているということで試してみました! SCIMの説明はこちらが詳しいです↓ SAML / OpenID Connect / OAuth / SCIM 技術解説 - ID&IT 2014 #idit2014
SalesforceのSCIMのリファレンスはこちら↓ System for Cross-domain Identity Management (SCIM) の使用
ユーザ情報の取得
リクエストは以下の通りです。あらかじめOAuth2.0等でaccess_tokenを取得しておく必要があります。
curl -i -X GET \
-H "Authorization:Bearer {access_token}" \
'https://{salesforce domain}/services/scim/v1/Users'
レスポンスはこんな感じ
{
"totalResults": 13,
"schemas": [
"urn:scim:schemas:core:1.0",
"urn:scim:schemas:extension:enterprise:1.0"
],
"Resources": [
{
"schemas": [
"urn:scim:schemas:core:1.0",
"urn:scim:schemas:extension:enterprise:1.0"
],
"id": "005A0000001cd4cIAA",
"meta": {
"created": "2011-04-22T06:57:30Z",
"lastModified": "2015-08-02T11:47:02Z",
"version": "eb77ba86f4891e4613788f7eae895c0e86c056fa"
}
},...
]
}
詳細なユーザ情報を取得する場合は以下のリクエストで取得可能です。
$ curl -i -X GET \
-H "Authorization:Bearer {access_token}" \
'https://{salesforce domain}/services/scim/v1/Users/{User Salesforce ID}'
レスポンスはこんな感じ
{
"schemas": [
"urn:scim:schemas:core:1.0",
"urn:scim:schemas:extension:enterprise:1.0"
],
"id": "005A0000001cd4cIAA",
"userName": "hoge@freedom-man.com",
"externalId": "SSO12345",
"name": {
"formatted": "HOGE 太郎",
"familyName": "HOGE",
"givenName": "太郎"
},...
}
グループ情報の取得
Salesforceのグループオブジェクトを取得できます。
リクエスト
$ curl -i -X GET \
-H "Authorization:Bearer {access_token}" \
'https://{salesforce domain}/services/scim/v1/Groups'
レスポンス
{
"totalResults": 1,
"schemas": [
"urn:scim:schemas:core:1.0"
],
"Resources": [
{
"schemas": [
"urn:scim:schemas:core:1.0"
],
"id": "00GA0000002TVrgMAG",
"displayName": "HOGEグループ",
"members": [
{
"value": "00GA0000002TVrHMAW",
"type": "Group"
}
],
"meta": {
"created": "2011-04-28T09:53:25Z",
"lastModified": "2011-04-28T09:53:25Z",
"version": "988cf6635aed45cb8ab62c2aef2127bd6ca9f624"
}
},...
]
}
プロファイル・権限セットの取得
プロファイルと権限セットの情報を取得できます。
リクエスト
$ curl -i -X GET \
-H "Authorization:Bearer {access_token}" \
'https://{salesforce domain}/services/scim/v1/Entitlements'
レスポンス
{
"totalResults": 34,
"schemas": [
"urn:scim:schemas:core:1.0"
],
"Resources": [
{
"schemas": [
"urn:scim:schemas:core:1.0"
],
"id": "00eA0000000G83kIAC",
"displayName": "test",
"members": [],
"meta": {
"created": "2014-01-29T11:16:26Z",
"lastModified": "2015-07-03T06:24:25Z",
"version": "e679a48ed6146a9e15fb9583f217276c2431945f"
}
},...
]
}
ユーザ情報の登録
リクエストはこんな感じ。userName、name.familyName、emails、entitlementsは必須項目です。
curl -i -X POST \
-H "Authorization:Bearer {access_token}" \
-d \
'{
"userName":"hoge@scim.freedom-man.com",
"name":{"familyName":"HOGE"},
"emails":[{"value":"*******@hotmail.co.jp"}],
"entitlements":[{"value":"00eA0000000KXII"}]
}' \
'https://{salesforce domain}/services/scim/v1/Users'
レスポンスはこんな感じ
{
"schemas": [
"urn:scim:schemas:core:1.0",
"urn:scim:schemas:extension:enterprise:1.0"
],
"id": "005A0000005kk7yIAA",
"userName": "hoge@scim.freedom-man.com",
"name": {
"formatted": "HOGE",
"familyName": "HOGE"
},
"displayName": "HOGE",
"nickName": "hoge@scim.freedom-man.com",
"emails": [
{
"type": "work",
"primary": true,
"value": "*******@hotmail.co.jp"
}
],
"photos": [
{
"type": "photo",
"value": "https://{salesforce domain}/profilephoto/005/F"
},
{
"type": "thumbnail",
"value": "https://{salesforce domain}/profilephoto/005/T"
}
],
"userType": "Standard",
"preferredLanguage": "en_US",
"locale": "en_US",
"active": true,
"entitlements": [
{
"value": "00eA0000000KXIIIA4",
"display": "Platform",
"primary": true
}
],
"groups": [],
"urn:scim:schemas:extension:enterprise:1.0": {
"organization": "00DA0000000BrW5MAK"
},
"meta": {
"created": "2015-08-18T04:02:42Z",
"lastModified": "2015-08-18T04:02:42Z",
"version": "6af2669248efd62d277fa262c009b1df5bd81e17"
}
}
ちなみに、Salesforce CRM Contentユーザにデフォルトでチェックがついてしまうのか、Salesforce CRM Contentユーザのライセンス数が不足している場合は以下のエラーが発生します。
{
"Errors": [
{
"description": "Insert failed. First exception on row 0; first error: LICENSE_LIMIT_EXCEEDED, content feature license limit exceeded: []",
"code": 409
}
]
}
Salesforce SCIM 実装の機能
SCIM実装の各種機能のサポート可否を取得することができます。
$ curl -i -X GET \
-H "Authorization:Bearer {access_token}" \
'https://{salesforce domain}/services/scim/v1/ServiceProviderConfigs'
レスポンスはこんな感じ
{
"schemas": [
"urn:scim:schemas:core:1.0",
"urn:scim:schemas:extension:enterprise:1.0"
],
"documentationUrl": "http://tools.ietf.org/html/draft-scim-api-01",
"patch": {
"supported": true
},
"bulk": {
"supported": false,
"maxOperations": 0,
"maxPayloadSize": 0
},
"filter": {
"supported": true,
"maxResults": 200
},
"changePassword": {
"supported": true
},
"sort": {
"supported": false
},
"etag": {
"supported": false
},
"xmlDataFormat": {
"supported": false
},
"authenticationSchemes": [
{
"name": "OAuth v2.0",
"description": "Authentication Scheme using the OAuth Standard",
"specUrl": "http://tools.ietf.org/html/rfc6749",
"documentationUrl": "http://tools.ietf.org/html/rfc6749",
"type": "oauth2",
"primary": true
}
]
}