みなさん、こんにちは。 今回は Spring '15 から利用可能となった認証プロバイダに Google を使用して、シングルサインオン(SSO)可能になるまでの設定方法をご案内したいと思います。 本当に簡単なので、10分で出来ると思います。 ぜひ、ご一緒にお試し下さい。
Google 認証プロバイダ
以前に今岡の記事 SalesforceでSSO(認証プロバイダ:Twitter編)で、認証プロバイダに Twitter を利用した SSO をご紹介しましたが、Spring '15 から認証プロバイダとして Google が新たに利用可能となりました。 なお、Spring '14 でリリースされた OpenID Connect を使用することで、Google との SSO は既に可能でした。 OpenID Connect は汎用的な API 仕様であるため、Google に限らず多くのサイトが対象となりますが、その分設定に分かりにくい部分がありました。 そこで、需要の多い Google を認証プロバイダとして切り出して、より簡単に利用可能にしたのではないかと思います(ここは個人的な憶測です)
Google アプリケーションの設定
それではさっそく、設定してみましょう。 まずは Google アプリケーションを設定します。 Google アカウントで予めログインした上で、Google Developer Consoleを開きます。 次に、Google Developer Console から新しいプロジェクトを作成します。
[プロジェクト名] は任意のものを入力してください。[プロジェクト ID] は世界で一意にする必要がありますが、こだわりがなければ初期値のままでも問題ありません。 プロジェクトが作成されたら、左側メニューを [APIと認証] > [認証情報] と展開し、新しいクライアント ID の作成を行います。
ウェブアプリケーションを選択し、[同意画面を設定] ボタンをクリックして同意画面に遷移します。
同意画面ではメールアドレス、サービス名を設定して [保存] をクリックします。 クライアント IDの作成ウィンドウでは、特に変更せずに [クライアント ID の作成] をクリックしましょう。 なお、[承認済みのリダイレクト URI] は後で変更します。
これで、Google 側の設定が90%できました!簡単ですね。 発行されたクライアント ID、クライアントシークレットを利用して、Salesforce の認証プロバイダの設定を行います。
Salesforce 組織の認証プロバイダ設定
Salesforce 組織の [設定] から、[セキュリティのコントロール] > [認証プロバイダ] を選択し、[新規] ボタンをクリックして認証プロバイダの作成を開始します。
- プロバイダタイプ:Google を選択しましょう。この選択内容によって、表示される項目が変わります
- 名前:任意の名前を入力しましょう
- URL 接尾辞:生成される SSO の URL の末尾になる部分です。名前と同じ値が初期値です
- コンシューマ鍵:Google で生成されたクライアント ID を入力しましょう
- コンシューマの秘密:Google で生成されたクライアント シークレット を入力しましょう。コンシューマの秘密って、なんだかヘンな言葉だなぁと思うのは私だけでしょうか?
- 登録ハンドラ:最初に表示されている[登録ハンドラテンプレートを自動生成]をクリックしておきましょう
- 他のアカウントで登録を実行:登録ハンドラである Apex クラスを実行するユーザを指定しましょう
ここまでできたら、[保存] ボタンをクリックしましょう。
これで認証プロバイダの設定ができました。 サクサクできますね! ここからは、クライアント設定に表示されている各種 URL を利用して、設定を進めます。
Goole アプリケーションのリダイレクト URI設定
まずは、[コールバック URL] をコピーして Google アプリケーションに戻りましょう。
[設定を編集] から、承認済みのリダイレクト URI に、コピーしたコールバック URL を設定して [更新] をクリックします。
接続テストおよび初期化
それでは、接続テストと初期化を行いましょう。 [テスト専用初期化 URL] をコピーして、ブラウザで開きます。
Google の承認画面が開きますので、問題なければ [承認する] をクリックしましょう。
XMLを直表示する残念な画面になりましたが、気にせず次に進みましょう
既存ユーザのリンク
それでは次に、既存のSalesforce ユーザと Google アカウントの紐付けを行いましょう。 リンクするユーザで Salesforce にログインして、[既存ユーザをリンクする URL] をブラウザで開きます。(Salesforce にログインしていない場合は、Salesforce のログイン画面が最初に表示されますので、そこでログインしても問題ありません)
Google アカウント 情報を入力して、ログインを行います。
アカウントのリンクを確認する画面が出ますので、[許可] をクリックします。
おめでとうございます! SSO 設定完了です!!
リンクしたユーザ詳細の関連リストには、サードパーティ取引先のリンク というセクションに 外部アカウントがリンクされていることを示す情報が表示されます。
外部アカウントのリンクを無効にしたい場合は、ここから [取り消し]をクリックしましょう。
ところで、「サードパーティ取引先のリンク」って誤訳っぽい気がします。「Third-Party Account Links」の Account はこの場合、取引先ではなくてアカウントのままが正解ですよね??
リンクしたユーザは [シングルサインオン初期化 URL] にアクセスすると、Google アカウントで Salesforce にログインできます。 また、ログイン履歴にも「サードパーティの SSO」と記録されます。
Apex 登録ハンドラ
ここからは余談です。 開発者の方は、今回とりあえず自動生成した登録ハンドラであるApexクラスを見てみましょう。
Apex 登録ハンドラクラスでは Auth.RegistrationHandler インターフェースを実装します。 このインターフェースでは createUser、updateUser という 2 つのメソッドを定義します。 自動生成されたテンプレートでは、createUser での Salesforce ユーザの作成は行わないようになっていますね。 createUser の実装例は、前述の記事 SalesforceでSSO(認証プロバイダ:Twitter編)でコミュニティユーザを作成するサンプルがあります。 updateUser はユーザが以前この認証プロバイダを使用してログインしたことがあり、再度ログインする場合、または [既存ユーザをリンクするURL] でリンクを行う際に呼び出されるメソッドです。 これらは要件に応じて、適切に書き換えましょう。
身近になった SSO
簡単な設定で、ノンコーディングでも SSO ができましたね。 Google Apps や Gmail など、Google のサービスをビジネスユーザが利用するケースも、最近ではまったく珍しくはなくなりました。 既に Google のサービスを正式に利用している企業でしたら、Salesforce との SSO は大変有用ですよね。 まずは実際に試してみて、便利な技術はどんどん活用しましょう!