OpenID Connectを使用したシングルサインオン

エンジニアの木下です。

今回はWinter'14でサポートされたOpenID Connectを使用したSSOを試してみましたので設定方法をまとめてみました。

1. [Google]OAuthクライアントの登録

まずはOAuthクライアントIDを作成します。

Google Developers Console から"APIs & Auth" > "Credentials Oath"と進み、"Create new Client ID"をクリックします。

101createoauthclient

ApplicationTypeは"Web application"を選択します。
AUTHORIZED JAVASCRIPT ORIGINS、AUTHORIZED REDIRECT URIは後ほど設定します。

02settingapplicationtype

Client IDを作成後、作成されたClient IDとClient Secretなどが表示されます。
これをSalesforceへ設定します。

103createdclientid

"APIs & Auth" > "Consent screen"にある"PRODUCT NAME"で最初のログイン時に表示される名前を設定します。

104consentscreensetting

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は空で良いようです。

106createdauthprovider

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」を追加します。

20140609_63331

通常のログインボタンの下に「Google Login」が表示されました。このボタンからSSOでログインができます。

設定も簡単でログインの手間も省けて嬉しい限りです。

コメント(0)