LinkedIn 認証プロバイダーの設定
LinkedIn を認証プロバイダーとして設定し、ユーザーが LinkedIn ログイン情報を使用して Salesforce にログインできるようにします。
必要なエディション
| 使用可能なインターフェース: Lightning Experience および Salesforce Classic |
| 使用可能なエディション: Enterprise Edition、Performance Edition、Unlimited Edition、および Developer Edition |
| 必要なユーザー権限 | |
|---|---|
| 設定を参照する | 「設定・定義の参照」 |
| 設定を編集する | 「アプリケーションのカスタマイズ」 および 「認証プロバイダーの管理」 |
LinkedIn を認証プロバイダーとして設定するには、次のタスクを実行します。
- 登録ハンドラーを設定します。
- LinkedIn の範囲を表示します。
- LinkedIn アプリケーションを設定します。
- Salesforce で LinkedIn プロバイダーを定義します。
- Salesforce で生成されるコールバック URL を LinkedIn [OAuth 2.0 リダイレクト URL] のエントリとして使用するように、LinkedIn パッケージを更新します。
- シングルサインオン (SSO) 接続をテストします。
- ログインページに LinkedIn 認証プロバイダーを追加します。
Sandbox の使用事例では、これらの手順の一部をスキップして、Salesforce が管理する LinkedIn アプリケーションを使用できます。本番の使用事例では、常に独自の LinkedIn アプリケーションを作成し、そのログイン情報を認証プロバイダーに使用します。Salesforce 管理アプリケーションではダウンタイムが発生する可能性があるため、本番環境ではお勧めしません。
登録ハンドラーの設定
シングルサインオンに認証プロバイダーを使用するには、登録ハンドラーを作成する必要があります。登録ハンドラーがユーザーを作成し、ID プロバイダーを介して Salesforce にアクセスする既存のユーザーを更新します。Apex または Flow Builder を使用して登録ハンドラを設定できます。詳細は、「Create an Authentication Provider Registration Handler (認証プロバイダー登録ハンドラーの作成)」を参照してください。
LinkedIn認証プロバイダーのApex登録ハンドラの例を次に示します。この登録ハンドラは、要求された範囲に r_liteprofile と r_emailaddress が含まれていることを前提としています。また、ユーザーがカスタマーポータルにログインしていることを想定しています。
GET
https://api.linkedin.com/v2/emailAddress?q=members&projection=(elements*(handle~))を参照してください。//TODO:This auto-generated class includes the basics for a Registration
//Handler class. You will need to customize it to ensure it meets your needs and
//the data provided by the third party.
global class LinkedInRegHandler implements Auth.RegistrationHandler {
//Creates a Standard salesforce or a community user
global User createUser(Id portalId, Auth.UserData data) {
if (data.attributeMap.containsKey('sfdc_networkid')) {
//We have a community id, so create a user with community access
//TODO: Get an actual account
Account a =[SELECT Id FROM account WHERE name = 'LinkedIn Account'];
Contact c = new Contact();
c.accountId = a.Id;
c.email = data.email;
c.firstName = data.firstName;
c.lastName = data.lastName;
insert(c);
//TODO: Customize the username and profile. Also check that the username
//doesn't already exist and possibly ensure there are enough org licenses
//to create a user. Must be 80 characters or less.
User u = new User();
Profile p =[SELECT Id FROM profile WHERE name = 'Customer Portal Manager'];
u.username = data.firstName + '@sfdc.linkedin.com';
u.email = data.email;
u.lastName = data.lastName;
u.firstName = data.firstName;
String alias = data.firstName;
//Alias must be 8 characters or less
if (alias.length() > 8) {
alias = alias.substring(0, 8);
}
u.alias = alias;
u.languagelocalekey = UserInfo.getLocale();
u.localesidkey = UserInfo.getLocale();
u.emailEncodingKey = 'UTF-8';
u.timeZoneSidKey = 'America/Los_Angeles';
u.profileId = p.Id;
u.contactId = c.Id;
return u;
} else {
//This is not a community, so create a regular standard user
User u = new User();
Profile p =[SELECT Id FROM profile WHERE name = 'Standard User'];
//TODO: Customize the username. Also check that the username doesn't
//already exist and possibly ensure there are enough org licenses
//to create a user. Must be 80 characters or less
u.username = data.firstName + '@salesforce.com';
u.email = data.email;
u.lastName = data.lastName;
u.firstName = data.firstName;
String alias = data.firstName;
//Alias must be 8 characters or less
if (alias.length() > 8) {
alias = alias.substring(0, 8);
}
u.alias = alias;
u.languagelocalekey = UserInfo.getLocale();
u.localesidkey = UserInfo.getLocale();
u.emailEncodingKey = 'UTF-8';
u.timeZoneSidKey = 'America/Los_Angeles';
u.profileId = p.Id;
return u;
}
}
//Updates the user's first and last name
global void updateUser(Id userId, Id portalId, Auth.UserData data) {
User u = new User(id = userId);
u.lastName = data.lastName;
u.firstName = data.firstName;
update(u);
}
}
LinkedIn の範囲を表示
範囲により、認証プロセス時に LinkedIn から取得するユーザー情報の内容が決まります。プライバシーに対する懸念から、API のバージョンを v2 に更新して、メンバーがサインインしたときに開発者アプリケーションに返されるメンバー情報を削減するようにしました。v2 では、識別に必要な重要なメンバーデータのみが返されます。LinkedIn v2 の Lite Profile は v1 では Basic Profile でした。Lite Profile は、メンバーの ID、姓名、旧姓、プロファイル写真で構成されます。v1 と同様に、ユーザーは情報共有の承認を LinkedIn に与える必要があります。
LinkedIn を認証プロバイダーとして設定した場合、範囲を LinkedIn アプリケーション設定および Salesforce の認証プロバイダー設定で参照できます。項目セレクターを使用した LinkedIn のユーザー情報エンドポイントへのクエリで範囲を参照することもできます。
- LinkedIn 設定と Salesforce 設定では、範囲値を空白にすることができます。Salesforce は、最も基本的なユーザー情報のみが提供される r_basicprofile を備えています。また、ユーザーのメールアドレスを含む r_emailaddress も提供します。
- LinkedIn v2 でメンバーのプロファイルを取得するための要求は、
GEThttps://api.linkedin.com/v2/me です。 - Salesforce には、ユーザーのメールアドレスが必要です。r_emailaddress を使用すると、ユーザーのメールアドレスを取得する個別の要求を行うことができます。メンバーのメールアドレスを取得するための要求は次のとおりです。
GET https://api.linkedin.com/v2/emailAddress?q=members&projection=(elements*(handle~))
LinkedIn アプリケーションの設定
Salesforce で LinkedIn を設定する前に、LinkedIn でアプリケーションを設定します。
- LinkedIn の開発者アカウントにサインインします。
- LinkedIn の上部にあるプロファイル写真をクリックして、[My Apps (私のアプリケーション)] を選択します。
- [Create App (アプリケーションを作成)] をクリックします。
- アプリケーション設定を入力します。
- クライアント ID とクライアントの秘密をメモします。
Salesforce 組織での LinkedIn プロバイダーの定義
LinkedIn プロバイダーを設定するには、LinkedIn のクライアント ID とクライアントの秘密に関する情報が必要です。
- [設定] から、[クイック検索] ボックスに「認証プロバイダー」と入力し、[認証プロバイダー] をクリックしてから、[新規] をクリックします。
- プロバイダータイプに [LinkedIn] を選択します。
- プロバイダーの名前を入力します。
- クライアント設定 URL に使用する URL サフィックスを入力します。たとえば、プロバイダーの URL サフィックスが MyLinkedInProvider である場合、SSO URL は https://mydomain_url または community_url /services/auth/sso/MyLinkedInProvider のようになります。
- [コンシューマーの秘密] に LinkedIn クライアントの秘密を使用します。
-
Apex 登録ハンドラを使用するには、次の手順を実行します。
- [登録ハンドラ種別] で、[Apex] を選択します。
-
[登録ハンドラ] で、
Auth.RegistrationHandlerインタフェースを実装する既存の Apex クラスを選択します。または、登録ハンドラのテンプレートを作成するには、[登録ハンドラテンプレートを自動的に作成] をクリックします。このクラスを後で編集してデフォルトのコンテンツを変更してから使用します。
-
登録ハンドラーにフローを使用するには、次の手順を実行します。
- [登録ハンドラ種別] で、[フロー] を選択します。
- [登録ハンドラー] で、[ID ユーザー登録] フロー種別の既存のフローを選択します。
-
デフォルトプロファイルを選択します。登録ハンドラーを実行するには、デフォルトプロファイルが必要です。ここでデフォルトプロファイルを指定しない場合、フロー自体でデフォルトプロファイルを設定します。
認証プロバイダーユーザー登録フローテンプレートを使用する場合、ここで設定したプロファイルは defaultProfileId 変数に自動的に保存されます。
-
デフォルトの取引先を選択します。Experience Cloud サイトで認証プロバイダーを使用している場合、このアカウントには新しい内部ユーザーが保存されます。
「認証プロバイダーのユーザー登録」フローテンプレートを使用する場合、ここで設定したプロファイルは自動的に defaultAccountId 変数に保存されます。
-
[Execute Registration As (登録の実行ユーザー)] で、Apex クラスまたはフローを実行する実行ユーザーを選択します。このユーザーは「ユーザーの管理」権限を持っている必要があります。
[他のアカウントで登録を実行] では、登録ハンドラーが動作するコンテキストが提供されます。本番環境では、通常、[他のアカウントで登録を実行] ユーザー用にシステムユーザーを作成します。このように、ハンドラーによって実行される操作は、その登録プロセスが簡単に特定されます。たとえば取引先責任者が作成される場合、システムユーザーがそれを作成します。
-
必要に応じて、次の項目を設定します。
- [承認エンドポイント URL] に「https://www.linkedin.com/oauth/v2/authorization」と入力します。
- トークンエンドポイント URL には、LinkedIn から OAuth トークンの URL を指定します。たとえば「https://www.linked.com/oauth/v2/accessToken」と入力します。詳細は、「Authenticating with OAuth 2.0 Overview (OAuth 2.0 を使用した認証の概要)」を参照してください。
- LinkedIn のプロファイル API から要求された値を変更する場合は、ユーザー情報エンドポイント URL を入力します。詳細は、「Profile API (プロファイル API)」を参照してください。URL は https://api.linkedin.com/v2/me で開始する必要があり、要求された項目は要求された範囲に対応している必要があります。
- デフォルトの範囲には、サポートされている値または LinkedIn から取得する情報を表す値 (値が複数の場合は、スペースで区切られた値) を入力します。
- コンシューマー鍵とコンシューマーの秘密を入力すると、コンシューマーの秘密がデフォルトで SOAP API の応答に含まれます。SOAP API 応答で秘密を表示しないようにするには、[SOAP API 応答にコンシューマーの秘密を含める] の選択を解除してください。2022 年 11 月より、メタデータ API 応答では、秘密が常にプレースホルダーの値に置き換えられます。デプロイ時に、プレースホルダーをプレーンテキストのコンシューマーの秘密に置き換えるか、後から UI で値を変更してください。
- [カスタムエラー URL] に、プロバイダーがエラーの報告に使用する URL を入力します。
- [アイコン URL] に、サイトのログインページのボタンとして表示するアイコンのパスを追加します。このアイコンは Experience Cloud サイトにのみ適用されます。Salesforce のログインページまたは [私のドメイン] のログイン URL には表示されません。ユーザーは、このボタンをクリックし、サイトに関連付けられた認証プロバイダーを使用してログインします。独自の画像へのパスを指定するか、いずれかのサンプルアイコンの URL を項目にコピーしてください。
- LinkedIn ユーザーにポータルを使用するには、[ポータル] ドロップダウンリストからポータルを選択します。
- ID プロバイダーの MFA サービスではなく、Salesforce 多要素認証 (MFA) 機能を使用するには、[この SSO プロバイダーで Salesforce MFA を使用] を選択します。この設定は、MFA が直接適用されているユーザーの MFA のみをトリガーします。詳細は、「SSO での Salesforce MFA の使用」を参照してください。
- 変更内容を保存します。
認証プロバイダーを定義すると、Salesforce によって次のクライアント設定 URL が生成されます。
- テスト専用初期化 URL — この URL を使用して、サードパーティプロバイダーが正しく設定されていることを確認します。システム管理者がブラウザーでこの URL を開き、サードパーティにサインインすると、属性の対応付けにより Salesforce にリダイレクトされます。
- シングルサインオン初期化 URL — この URL を使用して、サードパーティのログイン情報でサードパーティから Salesforce への SSO を実行します。ユーザーは、ブラウザーでこの URL を開いて、サードパーティにサインインします。このサードパーティは、ユーザーを作成するか既存のユーザーを更新します。次にサードパーティは、ユーザーを Salesforce にそのユーザーとしてサインインします。
- 既存ユーザーをリンクする URL — この URL を使用して、既存の Salesforce ユーザーをサードパーティアカウントにリンクします。このユーザーはブラウザーでこの URL を開いてサードパーティにサインインし、Salesforce にサインインしてリンクを承認します。
- OAuth 専用初期化 URL — この URL を使用して、サードパーティの OAuth アクセストークンを取得します。サードパーティサービスがトークンを取得するには、ユーザーが Salesforce で認証する必要があります。このフローでは、以降の SSO 機能は提供されません。
- コールバック URL — 認証プロバイダーが設定のためにコールバックするエンドポイントに、この URL を使用します。認証プロバイダーは、各クライアント設定 URL の情報と共に、コールバック URL にリダイレクトする必要があります。
クライアント設定 URL では、次のことを可能にする複数の要求パラメーターがサポートされています。
- ユーザーを特定のサイトにログインさせる。
- サードパーティからカスタマイズされた権限を取得する。
- 認証後に特定の場所に移動する。
LinkedIn アプリケーションの更新
LinkedIn 認証プロバイダーを Salesforce で定義した後で、LinkedIn に戻ります。Salesforce で生成されたコールバック URL を LinkedIn [OAuth 2.0 リダイレクト URL] の値として使用するように、アプリケーションを更新します。
SSO 接続のテスト
ブラウザーの認証プロバイダー設定ページでテスト専用初期化 URL を開きます。ユーザーは LinkedIn にリダイレクトされ、サインインするよう求められます。そしてサインイン時に、アプリケーションを認証するよう求められます。認証後、ユーザーは Salesforce にリダイレクトされます。
ログインページへの認証プロバイダーの追加
認証プロバイダーをログインオプションとして表示するようにログインページを設定します。組織の SSO を設定しているのか、Experience Cloud サイトの SSO を設定しているかに応じて、このステップは異なります。
- 組織の場合、「組織のログインページへの認証プロバイダーの追加」を参照してください。
- Experience Cloud サイトの場合、「Experience Cloud サイトのログインページへの認証プロバイダーの追加」を参照してください。

