SalesforceをAzureADでSSOする構成にしてみた

8/23/2020

Azure AD Microsoft 365 Office 365 SSO

シングルサインオンは、システムごとにアカウント管理するよりもはるかに効率が良い。ユーザーは覚えるパスワードが減り、管理工数が下がり、多くの場合セキュリティも向上する。複数のSaaS使うなら、認証管理するシステムの費用も下がる場合も。

今回は、SalesforceをAzureADにSSOさせてみた。をまだ課題はあるもののとりあえずは実現できたし、手順をまとめてみた。

1.事前準備

・Salesforceにカスタムドメイン(xxx.my.salesforce.com)を登録しておいた
・Salesforceにユーザーを作成すること。ユーザー名はOffice365のUPNにそろえておいた


UPNなので、Office365の配布リストはSalesforceのアカウントとしては使えない。

2.AzureADでの設定

1.[Azureポータル]→[Azure ActiveDirectry]→[エンタープライズアプリケーション]→[すべてのアプリケーション]→[新しいアプリケーション]

2.Salesforceを検索して、任意の名前を付けて、追加。

3.[エンタープライズアプリケーション]に戻り→先ほど追加したSalesforceを検索し→[シングルサインオン]→[SAML]

4.SAML設定を登録していく。

- 1基本的なSAML構成の、[識別子(エンティティID)][サインオンURL]に、Salesforceのカスタムドメインを入力

- 2ユーザー属性とクレームは特に変更しない

- 3SAML署名証明書で[証明書(Base64)]をダウンロードしておく。

- 4Salesforceのセットアップは今は操作しない


3.Salesforceでの設定

1.Salesforceを開き、歯車マーク→[サービスの設定]→[ID]→[シングルサインオン設定]

2.[SAMLを使用した統合シングルサインオン]→[編集]→[SAMLを有効化]にチェック→保存

3.[SAMLシングルサインオン構成]→[新規]から設定を入れる


項目
名前 任意の名前。Office365とか。入力するとAPI参照名も同じになる。
発行者 先のAzureADのSAML設定画面の[AzureAD識別子]の値をペースト
エンティティID salesforceのカスタムドメイン名。https://xxx.my.salesforce.comとか
発行者 AzureADのSAML設定画面の[AzureAD識別子]の値をペースト
IDプロバイダの証明書 さっきダウンロードしたBase64証明書をアップロード
SAML ID種別 [アサーションには、ユーザーのSalesforceユーザー名が含まれます]
SAML IDの場所 [IDはSubjectステートメントのNameIdentifinder要素にあります]
サービスプロバイダの起動要求バインド [HTTPポスト]
IDプロバイダのログインURL 先のAzureADのSAML設定画面の[ログインURL]の値をペースト
カスタムログアウトURL 先のAzureADのSAML設定画面の[ログアウトURL]の値をペースト

4.保存する

5.サイドメニュー→[会社の設定]→[サイトおよびドメイン]→[私のドメイン]→[認証設定]

6.[認証サービス]に先ほど登録した名前(上記だとOffice365)があるので、チェックし、保存。

[SAML ID種別]について、AzureADの自動プロビジョニングを有効にしていれば設定が違うかもしれないが、すでにSalesforce上にユーザーを作成しているので[統合IDが含まれます]ではなく[Salesforceユーザー名が含まれます]を選択したとこと、うまくいった。


4.もう一度AzureADの設定

先のAzureADのSAML設定の画面→[ユーザーとグループ]から、ユーザーを追加する。ユーザーを選択し、Salesforceの権限を設定して保存。

[AzureActive Directry]→[エンタープライズアプリケーション]→[条件付きアクセス]から、条件付きアクセスポリシーに今回作成しているSalesforceを登録する。


MSの公開ドキュメントでは、[フェデレーションメタデータXML]とあるので、公開ドキュメント通りすすめたらSSO設定はうまくいったのだが、正常に動作せずしなかった。


結局上記の手順で全部作り直しした。正常に動作しなかったのは設定ミスがあったかもしれないが・・・。

5.テスト

1回目の設定では、カスタムドメイン開いて、365の認証画面にリダイレクトされ、AzureADは認証されるが、「このアプリはAAD Graphに権限がないよ!」と表示されてしまった。アプリ名に半角()入れてるためか、XMLでうまくいかないとか、にっちもさっちもいかず・・・。結局作り直しした。

2回目の設定では、カスタムドメイン開いて、365の認証画面にリダイレクトされ、AzureADは認証され、Salesforceにリダイレクトされるのだが、Salesforce側ではじかれてしまった。

エラーメッセージは「ログインできません!アサーションかログイン履歴見てね」なのだけど、Salesforceのログイン履歴にも出てこない。Salesforceユーザーは個別作成しているからか?ひょっとしてこれかなー、というところでSAMLID種別を変更したところ、解決した。


6.トラブルシュートで参考にしたもの

qiita - @uekikazuki さんのSalesforce(sandbox)にAzure ADでSingleSignonする
https://qiita.com/uekikazuki/items/ce1f0fcc73c4ccbc0e45

うしがみさん Azure AD でシングル サインオン!! ~フェデレーション編~
https://www.cloudou.net/azure-active-directory/aad003/

公開ドキュメントではないが、AzureAD管理センター内の上記のSAML設定画面の中にある「ステップ バイ ステップの手順を表示」(英語)

7.感想とか

意外と簡単。もっとハードル高いかと思っていたけど、やってみたらそうでもない。ほかのSaaSでもいけるんじゃないか。というか、どんどんやるべき。

公式ドキュメントを全部丸のみしてはいけない。(でも、条件次第では正しい。やった後ならある程度わかる)

AzureサポートもSalesforceサポートも、ある程度答えてくれるが、相手の設定によるところは答えてくれない。(サポートでは、当然答えられない)

8.参考にしたもの

MicrosoftからもSalesforceからも手順は公開されている。

[Microsoft]チュートリアル:Azure Active Directory と Salesforce の統合
https://docs.microsoft.com/ja-jp/azure/active-directory/saas-apps/salesforce-tutorial


[Salesforce]Azure AD 認証プロバイダの設定
https://help.salesforce.com/articleView?id=sso_provider_azure.htm&type=5


公開されているドキュメントだし大丈夫だろうと高をくくっていたのだが、手順がそれぞれで結構違うし、とりあえずはMSのドキュメントを参考にしつつ進めた。(あとから、公開されているドキュメントも、環境によっては必ずしも正ではないことがあることをしるのだが・・・)