2015-08-24

SalesforceのSCIM叩いてみた

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
        }
    ]
}
このエントリーをはてなブックマークに追加