この文章は Salesforce 機械翻訳システムを使用して翻訳されました。詳細はこちらをご参照ください。
英語に切り替える

ConfirmUserRegistrationHandler インターフェース

Salesforce とサードパーティ ID プロバイダー間のシングルサインオン (SSO) ユーザーの対応付けを管理します。このインターフェースを使用して、更新前にユーザーの対応付けを確認します。

名前空間

Auth

使用方法

サードパーティ ID プロバイダーを使用するように SSO を設定するときは、Auth.RegistrationHandler インターフェースを使用して、登録ハンドラーを実装するクラスを作成します。このクラスは、ユーザーの作成および更新プロセスを管理します。アップグレードプロセスでユーザー情報の確認が必要な高度な使用事例では、クラスに Auth.ConfirmUserRegistrationHandler インターフェースを実装します。このインターフェースは、Auth.RegistrationHandler に加えて実装する必要があります。

Auth.ConfirmUserRegistrationHandler インターフェースを使用すると、Salesforce とサードパーティの間でユーザーが正しく対応付けられていることを確認できます。認証プロバイダーを使用してすでにログインしているユーザーが再ログインする場合、受信ユーザーデータがユーザーのサードパーティ識別子と一致していることを確認できます。一致していない場合、どのユーザーがログインすることになっているかを識別できます。

Auth.ConfirmUserRegistrationHandler インターフェースを使用して、複数のレコードを持つユーザーのコンテキストを切り替えることもできます。たとえば、あるユーザーが管理ユーザーと標準ユーザーの 2 つのレコードを持っているとします。ユーザーがログインするとき、サードパーティ ID プロバイダーは、ログインに使用されたアカウントを確認し、UserInfo エンドポイント経由で Salesforce に応答を送信します。この情報を使用して、ユーザーを管理ユーザーと標準ユーザーのいずれでログインさせるかを決定できます。

ConfirmUserRegistrationHandler のメソッド

ConfirmUserRegistrationHandler のメソッドは次のとおりです。

confirmUser(userId, tpalId, portalId, userdata)

ログインするユーザーの ID をサードパーティ識別子への対応付けに基づいて返します。このメソッドは、updateUser() メソッドより先にコールされます。ただし、このメソッドがコールされるのは、受信ユーザーがすでにログインし、Salesforce ユーザーへのサードパーティアカウントリンクを持っている場合のみです。

署名

public Id confirmUser(Id userId, Id tpalId, Id portalId, Auth.UserData userdata)

パラメーター

userId
型: Id
サードパーティアカウントリンクを介してサードパーティ識別子に対応付けられているユーザーの ID。
tpalId
型: Id
サードパーティ識別子に対応するサードパーティアカウントリンク。
portalId
型: Id
ユーザーがログインしているポータル ID。ポータルが設定されていない場合は、この値を null にします。
userData
型: Auth.UserData
サードパーティ ID プロバイダーからのユーザー情報を指定します。

戻り値

型: Id

ログインするユーザーの ID。null の場合、ログインは失敗します。

ConfirmUserRegistrationHandler の実装例

この例では、ユーザー更新プロセスで Auth.ConfirmUserRegistrationHandler インターフェースを実装し、メールアドレスと姓に基づいて正しいユーザーがログインしていることを確認します。

1global class StandardUserRegistrationHandler implements Auth.RegistrationHandler, Auth.ConfirmUserRegistrationHandler {
2    global User createUser(Id portalId, Auth.UserData data){
3        User u = new User();
4        Profile p = [SELECT Id FROM profile WHERE name='Standard User'];
5        u.username = data.username + '@salesforce.com';
6        u.email = data.email;
7        u.lastName = data.lastName;
8        u.firstName = data.firstName;
9        String alias = data.username;
10        if(alias.length() > 8) {
11            alias = alias.substring(0, 8);
12        }
13        u.alias = alias;
14        u.languagelocalekey = data.attributeMap.get('language');
15        u.localesidkey = data.locale;
16        u.emailEncodingKey = 'UTF-8';
17        u.timeZoneSidKey = 'America/Los_Angeles';
18        u.profileId = p.Id;
19        return u;
20    }
21    
22    global void updateUser(Id userId, Id portalId, Auth.UserData data) {
23        User u = new User(id=userId);
24        u.username = data.username + '@salesforce.com';
25        u.email = data.email;
26        u.lastName = data.lastName;
27        u.firstName = data.firstName;
28        String alias = data.username;
29        if(alias.length() > 8) {
30            alias = alias.substring(0, 8);
31        }
32        u.alias = alias;
33        u.languagelocalekey = data.attributeMap.get('language');
34        u.localesidkey = data.locale;
35        update(u);
36    }
37    
38    global Id confirmUser(Id userId, Id tpalId, Id portalId, Auth.UserData data) {
39        if (data.email.contains(data.lastName)) { // looks genuine 
40            return userId;
41        } else { // find the right user
42            User confirmedUser = [SELECT id FROM user WHERE email=:data.email];
43            return confirmedUser.Id;
44        }
45    }
46}

次の例では、実装をテストしています。

1@isTest
2public class StandardUserRegistrationHandlerTest {
3    static testMethod void testConfirmUser() {
4        StandardUserRegistrationHandler handler = new StandardUserRegistrationHandler();
5        Auth.UserData sampleData = new Auth.UserData('idA', 'firstName', 'A',
6            'firstName A', 'userA@example.org', null, 'usernameA', 'en_US', 'facebook',
7            null, new Map<String, String>{'language' => 'en_US'});
8        User u = handler.createUser(null, sampleData);
9        insert(u);
10        String uid = u.id;
11        
12        sampleData = new Auth.UserData('idB', 'firstName', 'B',
13            'firstName B', 'userA@example.org', null, 'usernameB', 'en_US', 'facebook',
14            null, new Map<String, String>{}); // note that user B is using userA's email
15        Id confirmedUserId = handler.confirmUser(uid, '060xx0000004Eh6', null, sampleData);
16        System.assertEquals(uid, confirmedUserId); // we should see userA's id
17    }
18}