SamlJitHandler インターフェース
名前空間
使用方法
SAML シングルサインオン時にユーザプロビジョニングのカスタムロジックを使用するには、Auth.SamlJitHandler を実装するクラスを作成する必要があります。これにより、ユーザがシングルサインオンで Salesforce にログインするときに、組織固有のロジック (カスタム項目の自動入力など) を組み込むことができます。クラスは、関連付けられた取引先レコードと取引先責任者レコードを含め、ユーザデータを作成および更新するロジックを必要に応じて実行する必要があります。
Salesforce で、[SAML シングルサインオン設定] の [SAML JIT ハンドラ] 項目にこのインターフェースを実装するクラスを指定します。クラスを実行するよう指定するユーザに「ユーザの管理」権限があることを確認します。
SamlJitHandler メソッド
SamlJitHandler のメソッドは次のとおりです。
createUser(samlSsoProviderId, communityId, portalId, federationId, attributes, assertion)
署名
public User createUser(Id samlSsoProviderId, Id communityId, Id portalId, String federationId, Map<String,String> attributes, String assertion)
パラメータ
- samlSsoProviderId
- 型: Id
- SamlSsoConfig 標準オブジェクトの ID。
- communityId
- 型: Id
- コミュニティの ID。コミュニティユーザを作成しない場合、このパラメータは null にできます。
- portalId
- 型: Id
- ポータルの ID。ポータルユーザを作成しない場合、このパラメータは null にできます。
- federationId
- 型: String
- このユーザに使用されると Salesforce が想定する ID。
- attributes
- 型: Map<String, String>
- SAML アサーションのうち、デフォルトのアサーションに追加された属性すべて (カスタム属性など)。属性では、大文字と小文字が区別されます。
- assertion
- 型: String
- Base-64 エンコードされたデフォルトの SAML アサーション。
戻り値
型: User
User sObject。
使用方法
この組織にコミュニティとポータルが設定されていない場合、communityId および portalId パラメータ値は null または空のキーになる可能性があります。
updateUser(userId, samlSsoProviderId, communityId, portalId, federationId, attributes, assertion)
署名
public void updateUser(Id userId, Id samlSsoProviderId, Id communityId, Id portalId, String federationId, Map<String,String> attributes, String assertion)
パラメータ
- userId
- 型: Id
- Salesforce ユーザの ID。
- samlSsoProviderId
- 型: Id
- SamlSsoConfig オブジェクトの ID。
- communityId
- 型: Id
- コミュニティの ID。コミュニティユーザを更新しない場合、このパラメータは null にできます。
- portalId
- 型: Id
- ポータルの ID。ポータルユーザを更新しない場合、このパラメータは null にできます。
- federationId
- 型: String
- このユーザに使用されると Salesforce が想定する ID。
- attributes
- 型: Map<String, String>
- SAML アサーションのうち、デフォルトのアサーションに追加された属性すべて (カスタム属性など)。属性では、大文字と小文字が区別されます。
- assertion
- 型: String
- Base-64 エンコードされたデフォルトの SAML アサーション。
戻り値
型: void
SamlJitHandler の実装例
これは、Auth.SamlJitHandler インターフェースの実装例です。このコードでは、非公開メソッドを使用して取引先と取引先責任者を処理します (handleContact() と handleAccount() は、この例には含まれていません)。
1global class StandardUserHandler implements Auth.SamlJitHandler {
2 private class JitException extends Exception{}
3 private void handleUser(boolean create, User u, Map<String, String> attributes,
4 String federationIdentifier, boolean isStandard) {
5 if(create && attributes.containsKey('User.Username')) {
6 u.Username = attributes.get('User.Username');
7 }
8 if(create) {
9 if(attributes.containsKey('User.FederationIdentifier')) {
10 u.FederationIdentifier = attributes.get('User.FederationIdentifier');
11 } else {
12 u.FederationIdentifier = federationIdentifier;
13 }
14 }
15 if(attributes.containsKey('User.ProfileId')) {
16 String profileId = attributes.get('User.ProfileId');
17 Profile p = [SELECT Id FROM Profile WHERE Id=:profileId];
18 u.ProfileId = p.Id;
19 }
20 if(attributes.containsKey('User.UserRoleId')) {
21 String userRole = attributes.get('User.UserRoleId');
22 UserRole r = [SELECT Id FROM UserRole WHERE Id=:userRole];
23 u.UserRoleId = r.Id;
24 }
25 if(attributes.containsKey('User.Phone')) {
26 u.Phone = attributes.get('User.Phone');
27 }
28 if(attributes.containsKey('User.Email')) {
29 u.Email = attributes.get('User.Email');
30 }
31
32 //More attributes here - removed for length
33
34 //Handle custom fields here
35
36 if(!create) {
37 update(u);
38 }
39 }
40
41 private void handleJit(boolean create, User u, Id samlSsoProviderId, Id communityId, Id portalId,
42 String federationIdentifier, Map<String, String> attributes, String assertion) {
43 if(communityId != null || portalId != null) {
44 String account = handleAccount(create, u, attributes);
45 handleContact(create, account, u, attributes);
46 handleUser(create, u, attributes, federationIdentifier, false);
47 } else {
48 handleUser(create, u, attributes, federationIdentifier, true);
49 }
50 }
51
52 global User createUser(Id samlSsoProviderId, Id communityId, Id portalId,
53 String federationIdentifier, Map<String, String> attributes, String assertion) {
54 User u = new User();
55 handleJit(true, u, samlSsoProviderId, communityId, portalId,
56 federationIdentifier, attributes, assertion);
57 return u;
58 }
59
60 global void updateUser(Id userId, Id samlSsoProviderId, Id communityId, Id portalId,
61 String federationIdentifier, Map<String, String> attributes, String assertion) {
62 User u = [SELECT Id FROM User WHERE Id=:userId];
63 handleJit(false, u, samlSsoProviderId, communityId, portalId,
64 federationIdentifier, attributes, assertion);
65 }
66}