ソーシャルサインオンのフロー整理

ソーシャルサインオンのフロー整理

概要

本記事では、Salesforceの主に外部サイトの構築のログイン認証で使用するソーシャルサインオンを整理します。ソーシャルサインオンではSalesforceがRP(Relying Party)となり、認証/認可はソーシャル(Facebook/Google/Twitter etc)で行います。基本的にはOpenID Connectを用いたシングルサインオンとなるため、内部ユーザというよりExperience Cloudなどの外部ユーザのログインに使用されるケースが多いかと思います。

内部ユーザ向けに利用されるSAMLの認証フローについては下記の記事を参考にしてください。

OpenID Connectとは

RESTベースで実装されており、クラウド系のサービス、アプリケーションに向いた仕組みである。OpenIDに対応した実装を作るプログラマ視点で見るとSAMLよりも容易に実装を構築できる。先にRPにアクセスするユースケースしかサポートしていないため、ログインポータルを作ることはできない。OpenID ConnectはOAuthの技術をベースにしている。OAuthは厳密にはSSOではなく、権限移譲のためのプロトコルである。

OpenID ConnectやOAuthについて、詳細の流れやフローについては下記の記事を参考にしてください。

ソーシャルサインオンの認証フロー

ソーシャルサインオンの認証フローはOpenID Connectを用いており、下記のようなシーケンスとなっております。

ソーシャルサインオンの設定

Facebookに認証用のアプリを作成

Facebookの開発者サイトから自分のアカウントにログインしてアプリ作成を行います。
https://developers.facebook.com/

アプリIDとapp secretを取得します。

認証プロバイダの作成

FacebookをIDPとする認証を行うためにSalesforceの認証プロバイダを作成します。
プロバイダタイプは「Facebook」を選択し、取得したアプリID→コンシューマ鍵、app secret→コンシューマの秘密を入力します。
登録ハンドラは、一旦[登録ハンドラテンプレートを自動作成]を選択しておきます。

登録ハンドラーを更新

開発者コンソールから自動生成されたApexを下記のGitHubのサンプルコードで上書きします。なお、プロファイル名やアカウント名などはサンプルなので組織の情報に合わせてアップデートする必要があります。
https://github.com/salesforceidentity/IdentityTrail-Module3/blob/master/SimpleFacebookRegistrationHandler.cls

外部サイトへの紐付け

Experience Cloudのワークスペース – 管理 – ログイン&登録の設定で先ほど作成した認証プロバイダを有効化します。

FacebookのアプリにリダイレクトURIを登録

動作検証

外部サイトにアクセスしてログイン画面に表示されているFacebookのアイコンを押下します。

Facebookのログイン画面にリダイレクトされます。

Facebookへのログインが成功すると、Facebookの認可の画面が表示されます。

許可するとContactやUserが自動生成されてサイトへログインしている状態となりました。

参考

ソーシャルサインオンの設定
https://trailhead.salesforce.com/ja/content/learn/modules/identity_external/identity_external_social

認証プロバイダ
https://help.salesforce.com/articleView?id=sf.sso_authentication_providers.htm&type=5

登録ハンドラー
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_auth_plugin.htm