AD FS で SAML 2.0 プロバイダーを設定する

Active Directory フェデレーション サービス (AD FS) は、Power Pages サイトへの訪問者を認証するために使用できる SAML 2.0 ID プロバイダーの 1 つです。 SAML 2.0 の仕様に準拠したプロバイダーを使用することができます。

この記事では以下の手順について説明します。

重要

AD FS を設定する手順は、ADFS サーバーのバージョンによって異なる場合があります。

Power Pages で AD FS を設定する

AD FS をサイトの ID プロバイダーとして設定します。

  1. Power Pages サイトで、設定>ID プロバイダー を選択します。

    ID プロバイダーが表示されない場合は、使用しているサイトの 一般承認設定外部ログインオン に設定されているかを確認します。

  2. + 新規プロバイダー を選択します。

  3. ログイン プロバイダーの選択その他 を選択します。

  4. プロトコルSAML 2.0 を選択します。

  5. プロバイダーの名前を入力します。

    プロバイダー名は、ユーザーがサインイン ページで ID プロバイダーを選択するときに表示されるボタンのテキストです。

  6. 次へを選択します。

  7. 返信 URL で、コピー を選択します。

    Power Pages ブラウザー タブを閉じないでください。すぐに元に戻ります。

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

PowerShell スクリプトを使用して これらの手順を実行することもできます。

  1. サーバー マネージャーで、ツール を選択し、AD FS 管理を選択します。

  2. サービスを展開します。

  3. 右側のパネルからクレーム内容を追加を選択します。

  4. 次の値を入力します。

    • 表示名: 永続識別子

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

    • 両方のオプションを選択します: フェデレーション メタデータでこのクレーム内容を公開… 。

  5. OK を選びます。

  6. 信頼関係>証明書利用者信頼 を選択します。

  7. Relying Party Trust を追加を選択します。

  8. 開始を選択します。

  9. 証明書利用者に関するデータを手動で入力するを選び、次へ を選択します。

  10. 名前を入力します。例えば、https://portal.contoso.com/です。

  11. 次へを選択します。

  12. AD FS 2.0 プロファイル を選択し、そして 次へ を選択します。

  13. 証明書の構成ページで、次へを選択します。

  14. SAML 2.0 WebSSO プロトコルのサポートを有効にするを選択します。

  15. 証明書利用者の SAML 2.0 SSO サービス URL に、コピーした応答 URL を入力します。 AD FS では Web サイトが HTTP ではなく HTTPS を実行する必要があります。

  16. 次へを選択します。

  17. 識別子の構成 ページでサイトの URL を入力し、追加 を選択します。

    必要に応じて、各証明書利用者 Web サイトに ID をさらに追加できます。 ユーザーは、利用可能な ID のいずれかを使用して、認証することができます。

  18. 次へを選択します。

  19. 今すぐ多要素認証を構成しますか? ページで、今回は、この証明書利用者信頼に対して多要素認証設定を構成しませんを選択します。

  20. 発行認証ルールを選択する ページで、すべてのユーザーに対してこの証明書利用者へのアクセスを許可する を選択して 次へ を選択します。

  21. 信頼設定をレビューし、次へを選択します。

  22. クローズを選択します。

  23. クレーム ルールの編集 で、編集している信頼とルールを作成するルール セットに応じて、次のタブのいずれかを選択します。

    • 許容可能な変換ルール
    • 発行変換ルール
    • 発行認証ルール
    • 委任認証ルール
  24. ルールの追加を選択します。

  25. 要求規則テンプレート 一覧で、入力方向の要求を変換 を選択して 次へ を選択します。

  26. 以下の値を入力または選択します。

    • 要求規則名: Windows アカウント名を名前 ID に変換する

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

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

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

  27. すべての要求値をパス スルーするを選択します。

  28. 終了 を選択し、そして OK を選択します。

プロバイダーの設定を完了する

AD FS 証明書利用者信頼を設定した後、次の手順を実行します。

  1. Azure でアプリの登録を作成します

  2. Power Pages でサイト設定を入力します

ID プロバイダー軌道型サインイン

AD FS は、SAML 2.0 仕様ID プロバイダー主導のシングルサインオン (SSO) プロファイルをサポートします。 サービス プロバイダーの Web サイトが ID プロバイダーの SAML 要求に適切に応答するには、RelayState パラメーターをエンコードする必要があります。

SAML RelayState パラメーターでエンコードする基本文字列値は、ReturnUrl=/content/sub-content/ の形式である必要があります。ここで、/content/sub-content/ は、サービス プロバイダーの Web サイト上の移動先ページへのパスです。 Web サイト上の任意の有効なページへのパスを指定できます。 文字列値がエンコードされ、次の形式でコンテナー文字列の中に配置されます : RPID=&lt;URL encoded RPID&gt;&RelayState=&lt;URL encoded RelayState&gt; 。 全体の文字列はさらにエンコードされ、次の形式で別のコンテナに追加されます : <https://adfs.contoso.com/adfs/ls/idpinitiatedsignon.aspx?RelayState=&lt;URL> encoded RPID/RelayState&gt;

たとえば、指定したサービス プロバイダーのパスが /content/sub-content/ で証明書利用者 ID が https://portal.contoso.com/ の場合、次の手順に従って URL を構築します。

  • ReturnUrl=/content/sub-content/ をエンコードして、 ReturnUrl%3D%2Fcontent%2Fsub-content%2F を取得する

  • https://portal.contoso.com/ をエンコードして、 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 を取得する

  • AD FS の ID プロバイダーで開始された SSOパスを追加して、最終的な URL https://adfs.contoso.com/adfs/ls/idpinitiatedsignon.aspx?RelayState=RPID%3Dhttps%253A%252F%252Fportal.contoso.com%252F%26RelayState%3DReturnUrl%253D%252Fcontent%252Fsub-content%252F を取得します

以下の PowerShell のスクリプトを使用して URL を構築します。 スクリプトを Get-IdPInitiatedUrl.ps1 という名前のファイルに保存します。


<#
.SYNOPSIS 
Constructs an IdP-initiated SSO URL to access a website page on the service provider.
.PARAMETER path
The path to the website 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

PowerShell を使用した AD FS の構成

AD FS に証明書利用者信頼を追加する代わりに、AD FS サーバ上で以下の PowerShell スクリプトを実行することができます。 スクリプトを Add-AdxPortalRelyingPartyTrustForSaml.ps1 という名前のファイルに保存します。 スクリプトの実行後、Power Pages でサイトの設定の構成を続行します。

<# 
.SYNOPSIS
Adds a SAML 2.0 relying party trust entry for a website.
.PARAMETER domain
The domain name of the website.
.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 == "https://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname"]
=> issue(Type = "https://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier", Issuer = c.Issuer, OriginalIssuer = c.OriginalIssuer, Value = c.Value, ValueType = c.ValueType, Properties["https://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 == "https://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname", Issuer == "AD AUTHORITY"]
=> issue(store = "[!INCLUDE[pn-active-directory](../../../includes/pn-active-directory.md)]", types = ("https://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname", "https://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname", "https://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress"), query = ";givenName,sn,mail;{{0}}", param = c.Value);
'@ -f $identityProviderValue
$issuanceAuthorizationRules = @'
@RuleTemplate = AllowAllAuthzRule
=> issue(Type = https://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
[!INCLUDE[cc-pages-ga-banner](../../../includes/cc-pages-ga-banner.md)]
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 website relying party trust
[!INCLUDE[cc-pages-ga-banner](../../../includes/cc-pages-ga-banner.md)]
Add-CrmRelyingPartyTrust $domain

参照

SAML 2.0 プロバイダーを設定する
Microsoft Entra ID で SAML 2.0 プロバイダーを設定する
SAML 2.0 に関する FAQ