Help us understand the problem. What is going on with this article?

Salesforce(sandbox)にAzure ADでSingleSignonする

More than 3 years have passed since last update.

はじめに

Salesforceサンドボックス環境にAzure ADを使ってシングルサインオン設定してみました。とても苦労しました。

「ひとまず動いた」というレベルなのでまだ更新する点があると思いますが、備忘録として書き留めておきます。

苦労した点

  • 設定の公式ドキュメントが複数ある。
  • Azureポータルがクラシックポータルと新ポータルの2種類ある。
  • エラーメッセージから原因が特定できない。
  • SalesforceもクラシックとLightningExperience(LEX)で2種類ある。

設定のコツ

  • Azureクラシックポータルでの設定が簡単
  • Salesforceもクラシックでの設定が簡単
  • 先にSalesforceの私のドメインでユーザー名/パスワード方式のログインができることを確認しておくと楽

一番重要なポイントはAzureとSalesforceでエンティティIDの設定を一致させること。これには2通りのやり方がある。

  1. SalesforceのエンティティIDは https://test.salesforce.com にして、Azure側のエンティティIDは設定しない。
  2. SalesforceとAzure、それぞれのエンティティIDに 私のドメイン のURLを設定する。

参照するドキュメント

Microsoft公式からは3種類のドキュメントが公開されている。

ただし、どの手順に従っても正しく設定できない1 。それぞれの設定を組み合わせてあげる必要がある。ここハマリポイント。

正解の設定

Salesforce側の設定

項目名(日本語) 項目名(英語) 設定する値 備考
名前 Name AzureSSO お好きな名前でOK
API参照名 API Name AzureSSO 名前と同じでOK
発行者 Issuer https://sts.windows.net/<ディレクトリID>/ Azure側設定時に提示される値を記入
エンティティ ID Entity ID https://test.salesforce.com My Domain名ではないので注意!
ユーザプロビジョニングの有効化 User Provisioning Enabled チェックしない ひとまず設定しないでOK。Salesforce Summer '17だと項目の場所がページ下方に移動してます。
IDプロバイダの証明書 Identity Provider Certificate sfsandbox.cer をアップロード
証明書の署名要求 Request Signing Certificate SelfSignedCert_xxxxx デフォルト値でOK
署名要求メソッド Request Signature Method RSA-SHA256 デフォルト値でOK
アサーション復号化証明書 Assertion Decryption Certificate アサーション暗号化なし
SAML ID種別 SAML Identity Type アサーションには、ユーザの Salesforce ユーザ名が含まれます(Username)
SAML IDの場所 SAML Identity Location ID は、Subject ステートメントの NameIdentifier 要素にあります(Subject)
サービスプロバイダーの起動要求バインド Service Provider Initiated Request Binding HTTP リダイレクト
IDプロバイダのログインURL Identity Provider Login URL https://login.microsoftonline.com/<ディレクトリID>/saml2 Azure側設定時に提示される値を記入
IDプロバイダのログアウトURL Identity Provider Logout URL https://login.microsoftonline.com/<ディレクトリID>/saml2 2 Azure側設定時に提示される値を記入
カスタムエラーURL Custom Error URL 空値 入力しなくてOK

Active Directory環境固有の設定値については、Azureアプリケーションの「シングルサインオン」画面のページ下部にあるSalesforceの構成をクリックすると確認することができる(英語文章中に記述されている)。

Azure側の設定

項目名(日本語) 設定する値 備考
シングルサインオン モード SAMLベースのサインオン
サインオンURL https://<mydomain>.<node>.salesforce.com 私のドメインで設定したURL。詳細なURL設定は行わない。
ユーザー属性 user.userprincipalname 通常はデフォルト値でOK。ADユーザー名とSalesforceユーザー名が異なる時はSalesforceユーザー名に一致するように調整する。
SAML署名証明書 デフォルトのまま 証明書(未加工)をダウンロードしてSalesforceのIDプロバイダの証明書にアップロードする。
証明書署名の詳細設定 チェックしない デフォルトのままでOK

エラーになる設定

AADSTS50003: No signing key is configured.

エラーメッセージ

AADSTS50003: No signing key is configured.

原因

Azure側 SAML 署名証明書の状態が アクティブ になっていない?
※検証中何度か発生したんですが、いま再現できない。再現したら追記します。

対処方法

Azureで SAML 署名証明書の状態を アクティブ にする。

AADSTS70001: Application with identifier 'https://xxxxx.salesforce.com' was not found in the directory <ディレクトリID>

エラーメッセージ

AADSTS70001: Application with identifier 'https://xxxxx.my.salesforce.com' was not found in the directory <ディレクトリID>

原因

SalesforceのエンティティIDとAzureのエンティティIDが一致していない。

対処方法1: 詳細なURL設定をしない場合

  • SalesforceのエンティティIDを https://test.salesforce.com にする
  • AzureのサインオンURLに 私のドメイン(https://<mydomain>.<node>.salesforce.com) を設定する

対処方法2: 詳細なURL設定をする場合

  • SalesforceのエンティティIDを 私のドメイン(https://<mydomain>.<node>.salesforce.com) にする
  • AzureのサインオンURLに 私のドメイン(https://<mydomain>.<node>.salesforce.com) を設定する
  • 詳細なURL設定を表示して識別子に 私のドメイン(https://<mydomain>.<node>.salesforce.com) を設定する

AADSTS70001: Application 'https://mydomain--sandbox.my.salesforce.com' is disabled.

エラーメッセージ

AADSTS70001: Application 'https://mydomain--sandbox.my.salesforce.com' is disabled.

原因

Azure側のアプリケーションでユーザーのサインインが無効になっている。

対処方法

Azure側アプリケーションのプロパティでユーザーのサインインが有効になっていますか?を「はい」にする

AADSTS65005: Invalid resource.

エラーメッセージ

AADSTS65005: Invalid resource. The client has requested access to a resource which is not listed in the requested permissions in the client's application registration. Client app ID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx. Resource value from request: . Resource app ID: 00000002-0000-0000-c000-000000000000. List of valid resources from app registration: .

原因

  • SalesforceとAzureでエンティティIDが一致していないため
  • Azure側の Entity IDhttps://test.salesforce.com になっている。
  • Azure側のサインオンURLで詳細な URL 設定の表示識別子(Entity ID)に値が設定されている。

対処方法1: 詳細なURL設定をしない場合

  • Azure側で詳細な URL 設定は設定しない。
  • Azure側の サインオンURL を私のドメイン(https://<mydomain>.<node>.salesforce.com) に修正する。

対処方法2: 詳細なURL設定をする場合

  • SalesforceのエンティティIDを 私のドメイン(https://<mydomain>.<node>.salesforce.com) にする
  • AzureのサインオンURLに 私のドメイン(https://<mydomain>.<node>.salesforce.com) を設定する
  • 詳細なURL設定を表示して識別子に 私のドメイン(https://<mydomain>.<node>.salesforce.com) を設定する

または一度Azure側のアプリケーション設定を削除し、一からやり直すとうまくいくかもしれません。

AADSTS50105:

エラーメッセージ

AADSTS50105: The signed in user 'user@example.com' is not assigned to a role for the application '<アプリケーションID>'.

原因

Azureユーザーにアプリケーションを利用する権限が割り当てられていない

対処方法

アプリケーションの「ユーザーとグループ」でユーザーを割り当てる

Azureのシングルサインオンのページが表示されない(ユーザー/パスワードを聞かれる)

エラーメッセージ

特になし

原因

  • Azure側のサインオンURLが私のドメインになっていない。サインオンURLが https://test.salesforce.com になっている。
  • Salesforceの「私のドメイン」で設定したシングルサインオン設定(AzureSSO)が認証サービスでチェックされていない。

対処方法

  • Azure側のサインオンURLを 私のドメイン(https://<mydomain>.<node>.salesforce.com) にする。
  • Salesforceの私のドメイン画面で認証サービスにAzureSSOをチェックする。

Single Sign-On Error

エラーメッセージ

We can't log you in. Check for an invalid assertion in the SAML Assertion Validator (available in Single Sign-On Settings) or check the login history for failed logins.

URLは https://https://<mydomain>.<node>.salesforce.com/_nc_external/identity/saml/SamlError

原因

Azureのユーザー識別子とSalesforceのユーザー名が一致しない。

対処方法

Azureのユーザー属性情報を調整してSalesforceのユーザー名と一致させる。

シングル サインオンのテスト

アクセスパネル (https://myapps.microsoft.com) を開いて、テスト アカウントにサインインして [Salesforce (Sandbox)] をクリックします。


  1. 記述が明らかに間違っているわけでなく、正しい設定ができてから改めて読み直してようやく理解できる  

  2. ログアウトURLをAzureで提示されている https://login.microsoftonline.com/common/wsfederation?wa=wsignout1.0 にしても良いが、これだとSalesforceをログアウトするとAzureもログアウトされてしまうので使い勝手が良くない。 

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away