- IdP側で更新したユーザー属性情報をSalesforceとプロビジョニングする方法の備忘録記事。
- プロビジョニングには、SCIMプロトコルを使用する。
準備
- Salesforce側の接続アプリケーション設定を行い、
client_id
,client_secret
,password
などの認証情報を払い出しておく。
想定シーケンス
各処理
①トークンエンドポイントからアクセストークンを取得する
- 以降のAPI実行に必要なアクセストークンを取得する。
- リクエスト例
GET /services/oauth2/token HTTP/1.1
Host: login.salesforce.com
Content-Type: application/x-www-form-urlencoded; charset=utf-8
grant_type=password&client_id=YOUR_CLINET_ID&client_secret=YOUR_CLIENT_SECRET&&username=YOUR_USERNAME&password=YOUR_PASSWORD
- レスポンス例
- 200 OK
{
"id":"https://login.salesforce.com/id/00Dx0000000BV7z/005x00000012Q9P",
"issued_at":"1278448832702",
"instance_url":"https://na1.salesforce.com",
"signature":"0CmxinZir53Yex7nE0TD+zMpvIWYGb/bdJh6XfOH6EQ=",
"access_token":"00Dx0000000BV7z!AR8AQAxo9UfVkh8AlV0Gomt9Czx9LjHnSSpwBMmbRcgKFmxOtvxjTrKW19ye6PE3Ds1eQz3z8jr3W7_VbWmEu4Q8TVGSTHxs"
}
②更新対象ユーザーIDを取得する
-
(IdP側がSalesforce側のユーザーIDを持っていない場合、)Salesforce側のユーザーIDを取得する。
-
リクエスト例
- ①で取得したアクセストークンを
Authorization
ヘッダーに指定する。 -
userName
で検索する場合。
- ①で取得したアクセストークンを
GET /services/scim/v2/Users?filters=userName ... HTTP/1.1
Host: sales_force_org_url
Content-Type: application/json; charset=utf-8
Authorization: Bearer {access_token}
- レスポンス例
- HTTP/1.1 200 OK
{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:ListResponse"],
"totalResults": 1,
"Resources": [{
"schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"],
"id": "user_id",
"userName": "...",
...
}]
}],
"startIndex": 1,
"itemsPerPage": 20
}
③ユーザー属性を更新する
- ②で取得したユーザーIDを指定し、Salesforce側ユーザー属性を更新する。
- リクエスト例
- ①で取得したアクセストークンを
Authorization
ヘッダーに指定する。
- ①で取得したアクセストークンを
PATCH /services/scim/v2/Users/{user_id} HTTP/1.1
Host: sales_force_org_url
Content-Type: application/json; charset=utf-8
Authorization: Bearer {access_token}
{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
"emails": [{
"value": "UpdatedTest@example.com",
...
}]
}
- レスポンス例
- HTTP/1.1 200 OK
{
"schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"],
"id": "5171a35d82074e068ce2",
...
"emails": [{
"value": "UpdatedTest@example.com",
...
}]
}