エンジニアの木下です。
今回はWinter'14でサポートされたOpenID Connectを使用したSSOを試してみましたので設定方法をまとめてみました。
1. [Google]OAuthクライアントの登録
まずはOAuthクライアントIDを作成します。
Google Developers Console から"APIs & Auth" > "Credentials Oath"と進み、"Create new Client ID"をクリックします。
ApplicationTypeは"Web application"を選択します。
AUTHORIZED JAVASCRIPT ORIGINS、AUTHORIZED REDIRECT URIは後ほど設定します。
Client IDを作成後、作成されたClient IDとClient Secretなどが表示されます。
これをSalesforceへ設定します。
"APIs & Auth" > "Consent screen"にある"PRODUCT NAME"で最初のログイン時に表示される名前を設定します。
2. [Salesforce]認証プロバイダの設定
Salesforceにログイン後、"設定" > "セキュリティのコントロール" > "認証プロバイダ"と進み、新規ボタンをクリックし以下を設定します。
プロバイダタイプ:Open ID Connect
コンシューマ鍵:1で作成したClient ID
コンシューマの秘密:1で作成したClient Secret
承認エンドポイント URL:https://accounts.google.com/o/oauth2/auth
トークンエンドポイント URL:https://accounts.google.com/o/oauth2/token
ユーザ情報エンドポイント URL:https://www.googleapis.com/oauth2/v3/userinfo
保存するとクライアント設定が表示されるので1で作成したOAuthクライアントを編集します。AUTHORIZED REDIRECT URIにコールバック URLを設定します。AUTHORIZED JAVASCRIPT ORIGINSは空で良いようです。
3. [Salesforce]登録ハンドラの実装
登録ハンドラはAuth.RegistrationHandlerインターフェースを実装する必要があります。実装するメソッドはcreateUserとupdateUserの二つです。
createUserは初回ログイン時に、updateUserは二回目以降のログイン時に呼ばれるメソッドです。Auth.UserDataにはidentifier(GoogleのID)やemail(メールアドレス)などのプロパティがあるのでcreateUserではそれらの情報をもとにユーザを特定します。
updateUserではここでは特になにもしていませんが、Auth.UserData dataからユーザの情報を更新などできそうです。
public class GoogleHandler implements Auth.RegistrationHandler{ public User createUser(Id portalId, Auth.UserData data){ User u = [SELECT Id FROM User WHERE Username = :data.email]; return u; } public void updateUser(Id userId, Id portalId, Auth.UserData data){ }
}
4. [Salesforce]ログイン
最後にログインページの設定です。シングルサインオン初期化 URLからでもSSOできますが、今回はドメインを作成し、ログインページのSSOのボタンからログインしてみます。
"ドメイン" > "私のドメイン"からドメインを作成し、ログインページのブランド設定で認証サービスに2で設定した認証プロバイダ名「Google Login」を追加します。
通常のログインボタンの下に「Google Login」が表示されました。このボタンからSSOでログインができます。
設定も簡単でログインの手間も省けて嬉しい限りです。