ポータルの SAML 2.0 プロバイダー設定を構成します

注意

この文書は、Dynamics 365ポータル およびそれ以降のバージョンが対象です。

1 つ以上の SAML 2.0– 準拠の ID プロバイダー (IdP) が、外部認証を提供するために追加できます。 この文書は、ポータルをサービス プロバイダー (SP) として統合して機能させるための、さまざまな ID プロバイダーの設定方法について説明します。

AD FS (IdP)

AD FS などの IdP の設定です。

AD FS 証明書利用者信頼を作成

注意

PowerShell スクリプトでのこれらの手順の実行方法の詳細については、以下の PowerShellを使用して AD FS を構成を参照してください。

AD FS 管理ツールを使用して、サービス >要求の説明の順に選択します。

  1. 要求の説明の追加をクリックします。
  2. 要求の指定:

表示名:永続的な識別子

  • 要求の識別子:urn:oasis:names:tc:SAML:2.0:nameid-format:persistent

-有効化 チェックボックス: このフェデレーション サービスが受け取ることができる要求の種類として、この要求の説明をフェデレーション メタデータで発行します

-有効化 チェックボックス: このフェデレーション サービスが送信できる要求の種類として、この要求の説明をフェデレーション メタデータで発行します

  • OKをクリックします

AD FS 管理ツールを使用して、信頼関係 >証明書利用者信頼を選択します。

  1. 証明書利用者信頼の追加をクリックします...
  2. ようこそ: 開始 をクリックします
  3. データ ソースの選択: 証明書利用者のデータを手動入力 を選択し、次へ をクリックします
  4. 表示名の指定:名前を入力し、次へ をクリック 例: https://portal.contoso.com/
  5. プロファイルの選択: AD FS 2.0 プロファイル を選択し、次へをクリックします
  6. 証明書の構成: 次へをクリックします
  7. URL の構成: [SAML 2.0 WebSSO プロトコルのサポートを有効にする] 証明書利用者 SAML 2.0 SSO サービス URLを確認します: https://portal.contoso.com/signin-saml2 を入力します

    • メモ: AD FS はポータルがHTTPS で実行される必要がある
    注意

    結果のエンドポイントには、次の設定があります。

  8. ID の構成: https://portal.contoso.com/ を指定し、[追加]をクリックし、[次へ] をクリックします。必要であれば、各証明書利用者ポータルに複数の ID を追加できます。 ユーザーは、使用できるいずれかまたはすべての ID で認証できます。

  9. 発行認証ルールを選択する: [すべてのユーザーに対してこの証明書利用者へのアクセスを許可する]を選択し、[次へ]をクリックします。
  10. 信頼を追加する準備: [次へ] をクリックします
  11. 閉じるをクリック

証明書利用者信頼に [名前 ID] 要求を追加します。

Windows アカウント名を[名前 ID] 要求へ変換 (入力方向の要求を変換):

  • 入力方向の要求の種類:Windows アカウント名

  • 出力方向の要求の種類: [名前 ID]

  • 送信される名前 ID の形式: 永続的な識別子

  • すべての要求値をパス スルーする

サイトの設定の作成

上述のAD FS 証明書利用者信頼を参照するポータル サイト設定を適用します。

注意

標準の AD FS (IdP) 構成は次の設定のみを使用します (値の例を含む) : Authentication/SAML2/ADFS/MetadataAddress - https://adfs.contoso.com/FederationMetadata/2007-06/FederationMetadata.xml

  • Authentication/SAML2/ADFS/AuthenticationType - http://adfs.contoso.com/adfs/services/trust
    • フェデレーション メタデータのルート要素の[entityID] 属性の値を使用 ([MetadataAddress URL] を上記のサイト設定の値のブラウザーで開く)
  • Authentication/SAML2/ADFS/ServiceProviderRealm - https://portal.contoso.com/
  • Authentication/SAML2/ADFS/AssertionConsumerServiceUrl - https://portal.contoso.com/signin-saml2
    フェデレーション メタデータ は AD FS サーバーで次のスクリプトを実行することで PowerShell で取得できます: Import-Module adfs Get-ADFSEndpoint -AddressPath /FederationMetadata/2007-06/FederationMetadata.xml

[プロバイダー] タグのラベルを置き換えて、複数の IdP サービスを構成することができます。 それぞれの固有のラベルは、IdP に関連する設定グループとなります。 例: ADFS、AzureAD、MyIdP

サイト設定の名前 内容
Authentication/Registration/ExternalLoginEnabled 外部アカウントのサインインと登録を有効化または無効化します。 既定値: true
Authentication/SAML2/[プロバイダー]/MetadataAddress 必須。 AD FS (STS) サーバーの WS-Federation メタデータ URLです。 通常は次のパスで終わります:/FederationMetadata/2007-06/FederationMetadata.xml。 例: https://adfs.contoso.com/FederationMetadata/2007-06/FederationMetadata.xml。 MSDN
Authentication/SAML2/[プロバイダー]/AuthenticationType 必須。 OWIN 認証のミドルウェアの種類を指定します。 フェデレーション メタデータ XML のルートで entityID 属性の値を指定します。 例: http://adfs.contoso.com/adfs/services/trust。 MSDN
Authentication/SAML2/[プロバイダー]/ServiceProviderRealm
または
Authentication/SAML2/[プロバイダー]/Wtrealm
必須。 AD FS 証明書利用者 ID です。 例: https://portal.contoso.com/。 MSDN
Authentication/SAML2/[プロバイダー]/AssertionConsumerServiceUrl
または
Authentication/SAML2/[プロバイダー]/Wreply
必須。 AD FS SAML コンシューマ アサーションのエンドポイントです。 例: https://portal.contoso.com/signin-saml2。 MSDN
Authentication/SAML2/[プロバイダー]/Caption 推奨要件。 ユーザーがサインインのユーザー インターフェイスに表示できるテキストです。 既定: [プロバイダー]。 MSDN
Authentication/SAML2/[プロバイダー]/CallbackPath 認証コールバックを処理する任意の制約されたパスです。 MSDN
Authentication/SAML2/[プロバイダー]/BackchannelTimeout バック チャネル コミュニケーション用のタイムアウト値。 例: 00:05:00 (5 分)。 MSDN
Authentication/SAML2/[プロバイダー]/UseTokenLifetime 認証セッションの有効期限 (例: クッキー) は認証トークンと一致する必要があることを示します。 MSDN
Authentication/SAML2/[プロバイダー]/AuthenticationMode OWIN 認証のミドルウェアのモードを指定します。 MSDN
Authentication/SAML2/[プロバイダー]/SignInAsAuthenticationType System.Security.Claims.ClaimsIdentity の作成時に使用される AuthenticationType です。 MSDN
Authentication/SAML2/[プロバイダー]/ValidAudiences 対象者 URL のコンマ区切り一覧です。 MSDN
Authentication/SAML2/[プロバイダー]/ClockSkew 時間を有効にする際に適用するクロック スキューです。
Authentication/SAML2/[プロバイダー]/RequireExpirationTime トークンに "期限切れ" の値が必要かどうかを示す値です。
Authentication/SAML2/[プロバイダー]/ValidateAudience 対象者がトークンの検証時に検証されるかを制御するブール値です。

IdP で開始されたサインイン

AD FS は、SAML 2.0 の 仕様IdP で開始された SSO プロファイルをサポートします。 IdP によって開始された SAML 要求に対して、ポータル (SP) が適切に応答するためには、RelayState パラメーターが適切にエンコードされている必要があります。

SAML RelayState パラメーターにエンコードする基本の文字列値は、以下の形式で指定する必要があります: /content/sub-content/ の中での ReturnUrl=/content/sub-content/ はポータル (SP) 内で移動したい Web ページへのパス。 パスは、ポータルでの任意の有効な Web ページで置き換えることができます。 文字列値はエンコードされ、次の形式でコンテナ文字列の中に置かれます: RPID=<URL エンコードされた RPID>&RelayState=<URL エンコードされた RelayState>。 全体の文字列はさらにエンコードされ、次の形式で別のコンテナに追加されます: https://adfs.contoso.com/adfs/ls/idpinitiatedsignon.aspx?RelayState=<URL エンコードされた RPID/RelayState>。

たとえば、SP のパスが /content/sub-content/ および証明書利用者 ID が https://portal.contoso.com/ であるとき、次の手順で URL が構築されます:

ReturnUrl=/content/sub-content/ の値をエンコードします

  • ReturnUrl%3D%2Fcontent%2Fsub-content%2F を取得するため
  • https%3A%2F%2Fportal.contoso.com%2F を取得するため
  • RPID=https%3A%2F%2Fportal.contoso.com%2F&RelayState=ReturnUrl%3D%2Fcontent%2Fsub-content%2F の値をエンコードします
  • RPID%3Dhttps%253A%252F%252Fportal.contoso.com%252F%26RelayState%3DReturnUrl%253D%252Fcontent%252Fsub-content%252F を取得するため
  • ADFS IdP で開始された SSO パスを追加して、最終的な URL を取得します

次の PowerShell スクリプト (「Get-IdPInitiatedUrl.ps1」という名前でファイルに保存します) は、URL の構築に使用できます。

<#

.SYNOPSIS 

Constructs an IdP initiated SSO URL to access a portal page on the SP.

.PARAMETER path

The path to the portal page.

.PARAMETER rpid

The relying party identifier.

.PARAMETER adfsPath

The AD FS IdP initiated SSO page.

.EXAMPLE

PS C:\\> .\\Get-IdPInitiatedUrl.ps1 -path "/content/sub-content/" -rpid "https://portal.contoso.com/" -adfsPath "https://adfs.contoso.com/adfs/ls/idpinitiatedsignon.aspx"

#>

param

(

[parameter(mandatory=$true,position=0)]

$path,

[parameter(mandatory=$true,position=1)]

$rpid,

[parameter(position=2)]

$adfsPath = "https://adfs.contoso.com/adfs/ls/idpinitiatedsignon.aspx"

)

$state = "ReturnUrl=$path"

$encodedPath = [uri]::EscapeDataString($state)

$encodedRpid = [uri]::EscapeDataString($rpid)

$encodedPathRpid = [uri]::EscapeDataString("RPID=$encodedRpid&RelayState=$encodedPath")

$idpInitiatedUrl = "{0}?RelayState={1}" -f $adfsPath, $encodedPathRpid

Write-Output $idpInitiatedUrl

Azure Active Directoryに対する SAML 2.0 設定

Azure AD は標準の SAML 2.0 に準拠した IdP として動作するため、AD FS を説明した前のセクションは Azure AD にも適用できます。 開始するには、Azure 管理ポータル にサインインして、既存ディレクトリを作成または選択します。 ディレクトリが使用可能な場合、ディレクトリに アプリケーションを追加 するための説明に従います。

  1. ディレクトリのアプリケーション メニューで、追加 ボタンをクリックします
  2. 自分の組織が作成するアプリケーションを追加 を選択します
  3. カスタマイズされた名前 をアプリケーションに指定して、Web アプリケーションまたは Web API の種類を選択します
  4. サインオン URL および アプリ ID URI には、両方のフィールドにポータルの URL https://portal.contoso.com/ を指定します。これは ServiceProviderRealm (Wtrealm) サイト設定値に相当します。
  5. この時点で、新しいアプリケーションが作成されます。 メニューの構成 セクションに移動します

    シングル サインオン セクションで、最初の返信 URL エントリを更新し URL にパスを含めます http://portal.contoso.com/signin-azure-ad

    これは、AssertionConsumerServiceUrl (Wreply) サイト設定値に相当します

  6. フッター メニューでエンドポイントを表示 ボタンをクリックしてフェデレーション メタデータ ドキュメント フィールドを記録

これは、MetadataAddress サイト設定値に相当します

  • フェデレーション メタデータ XML を表示してルート要素の [entityID] 属性を記録するためにこの URL をブラウザー ウィンドウに貼り付けます。
  • これは、AuthenticationType サイト設定値に相当します
注意

標準の Azure AD 構成は次の設定のみを使用します (値の例を含む): Authentication/SAML2/AzureAD/MetadataAddress - https://login.microsoftonline.com/01234567-89ab-cdef-0123-456789abcdef/federationmetadata/2007-06/federationmetadata.xml

Shibboleth ID プロバイダー 3

Shibboleth ID プロバイダー を IdP サービスとして正しく構成するには、次のガイドラインに従います。 説明では、IdP が次のドメインでホストされていると仮定します: https://idp.contoso.com。

フェデレーション メタデータ URL: https://idp.contoso.com/idp/shibboleth

  • IdP は、永続的な識別子を生成/提供するように構成されている必要があります。 永続的な識別子の生成を有効にするには、手順に従ってください。

  • IdP のフェデレーション メタデータ (<IDPSSODescriptor>) が SSO リダイレクト バインディングを含むように構成されている必要があります。

<SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect"

Location="https://idp.contoso.com/idp/profile/SAML2/Redirect/SSO"/>

metadata-providers.xmlを設定して、サービス プロバイダー (証明書利用者) を構成します。

  • 各 SP フェデレーション メタデータ (<SPSSODescriptor>) には、アサーションの顧客サービスへのポスト バインディングが含まれている必要があります。 1 つの方法は、FilesystemMetadataProvider を使用して次の内容を含む構成ファイルを参照することです。
<AssertionConsumerService index="1" isDefault="true"

Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"

Location="https://portal.contoso.com/signin-saml2"/>

場所属性は、AssertionConsumerServiceUrl (Wreply) 設定に対応します。

  • SP フェデレーション メタデータは、AuthenticationType 設定に対応する EntityDescriptor のentityID 属性を指定する必要があります。

<EntityDescriptor entityID="https://portal.local.contoso.com/">;...

注意

標準の Shibboleth 構成は、次の設定のみを使用します (値の例を含む)。
Authentication/SAML2/Shibboleth/MetadataAddress - https://idp.contoso.com/idp/shibboleth

IdP で開始されたサインイン

Shibboleth は、 SAML 2.0 の 仕様IdP で開始された SSO プロファイルをサポートします。 IdP によって開始された SAML 要求に対して、ポータル (SP) が適切に応答するためには、RelayState パラメーターが適切にエンコードされている必要があります。

SAML RelayState パラメーターにエンコードする基本の文字列値は、以下の形式で指定する必要があります: /content/sub-content/ の中での ReturnUrl=/content/sub-content/ はポータル (SP) 内で表示したい Web ページにナビゲーションするパス。 パスは、ポータルでの任意の有効な Web ページで置き換えることができます。 完全に IdP で開始された SSO URL は、次の形式である必要があります: https://idp.contoso.com/idp/profile/SAML2/Unsolicited/SSO?providerId=<URL エンコードされたプロバイダー ID>&target=<URL エンコードされたリターン パス>。

たとえば、SP パスが /content/sub-content/ であり、証明書利用者 ID が https://portal.contoso.com/ であるとき、最終的な URL は https://idp.contoso.com/idp/profile/SAML2/Unsolicited/SSO?providerId=https%3A%2F%2Fportal.contoso.com%2F&target=ReturnUrl%3D%2Fcontent%2Fsub-content%2F になります

次の PowerShell スクリプト (「Get-ShibbolethIdPInitiatedUrl.ps1」という名前でファイルに保存します) は、URL の構築に使用できます。

<# 

.SYNOPSIS

Constructs an IdP initiated SSO URL to access a portal page on the SP.

.PARAMETER path

The path to the portal page.

.PARAMETER providerId

The relying party identifier.

.PARAMETER shibbolethPath

The Shibboleth IdP initiated SSO page.

.EXAMPLE

PS C:\\> .\\Get-ShibbolethIdPInitiatedUrl.ps1 -path "/content/sub-content/" -providerId "https://portal.contoso.com/" -shibbolethPath "https://idp.contoso.com/idp/profile/SAML2/Unsolicited/SSO"

#>

param

(

[parameter(mandatory=$true,position=0)]

$path,

[parameter(mandatory=$true,position=1)]

$providerId,

[parameter(position=2)]

$shibbolethPath = "https://idp.contoso.com/idp/profile/SAML2/Unsolicited/SSO"

)

$state = "ReturnUrl=$path"

$encodedPath = [uri]::EscapeDataString($state)

$encodedRpid = [uri]::EscapeDataString($providerId)

$idpInitiatedUrl = "{0}?providerId={1}&target={2}" -f $shibbolethPath, $encodedRpid, $encodedPath

Write-Output $idpInitiatedUrl

PowerShellを使用した AD FS の構成

AD FS の証明書利用者信頼を追加するプロセスは、AD FS サーバーで次のPowerShell スクリプトを実行することによっても行うことができます (「Add-AdxPortalRelyingPartyTrustForSaml.ps1」という名前で内容をファイルに保存します)。 スクリプトの実行後、ポータル サイト設定の構成を続行します。

<# 

.SYNOPSIS

Adds a SAML 2.0 relying party trust entry for a Dynamics CRM portals website.

.PARAMETER domain

The domain name of the portal.

.EXAMPLE

PS C:\\> .\\Add-AdxPortalRelyingPartyTrustForSaml.ps1 -domain "portal.contoso.com"

#>

param

(

[parameter(Mandatory=$true,Position=0)]

$domain,

[parameter(Position=1)]

$callbackPath = "/signin-saml2"

)

$VerbosePreference = "Continue"

$ErrorActionPreference = "Stop"

Import-Module adfs

Function Add-CrmRelyingPartyTrust

{

param (

[parameter(Mandatory=$true,Position=0)]

$name

)

$identifier = "https://{0}/" -f $name

$samlEndpoint = New-ADFSSamlEndpoint -Binding POST -Protocol SAMLAssertionConsumer -Uri ("https://{0}{1}" -f $name, $callbackPath)

$identityProviderValue = Get-ADFSProperties | % { $_.Identifier.AbsoluteUri }

$issuanceTransformRules = @'

@RuleTemplate = "MapClaims"

@RuleName = "Transform [!INCLUDE[pn-ms-windows-short](../includes/pn-ms-windows-short.md)] Account Name to Name ID claim"

c:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname"]

=> issue(Type = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier", Issuer = c.Issuer, OriginalIssuer = c.OriginalIssuer, Value = c.Value, ValueType = c.ValueType, Properties["http://schemas.xmlsoap.org/ws/2005/05/identity/claimproperties/format"] = "urn:oasis:names:tc:SAML:2.0:nameid-format:persistent");

@RuleTemplate = "LdapClaims"

@RuleName = "Send LDAP Claims"

c:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname", Issuer == "AD AUTHORITY"]

=> issue(store = "[!INCLUDE[pn-active-directory](../includes/pn-active-directory.md)]", types = ("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname", "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname", "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress"), query = ";givenName,sn,mail;{{0}}", param = c.Value);

'@ -f $identityProviderValue

$issuanceAuthorizationRules = @'

@RuleTemplate = "AllowAllAuthzRule"

=> issue(Type = "http://schemas.microsoft.com/authorization/claims/permit", Value = "true");

'@

Add-ADFSRelyingPartyTrust -Name $name -Identifier $identifier -SamlEndpoint $samlEndpoint -IssuanceTransformRules $issuanceTransformRules -IssuanceAuthorizationRules $issuanceAuthorizationRules

}

# add the 'Identity Provider' claim description if it is missing

if (-not (Get-ADFSClaimDescription | ? { $_.Name -eq "Persistent Identifier" })) {

Add-ADFSClaimDescription -name "Persistent Identifier" -ClaimType "urn:oasis:names:tc:SAML:2.0:nameid-format:persistent" -IsOffered:$true -IsAccepted:$true

}

# add the portal relying party trust

Add-CrmRelyingPartyTrust $domain

関連項目

Dynamics 365 ポータル認証の構成
ポータル用の認証 ID の設定
ポータル用 OAuth2 プロバイダーの設定
ポータルの Open ID 接続プロバイダーの設定
ポータル用 WS-Federation プロバイダーの設定
Facebook アプリ (ページ タブ) のポータル認証