設定入口網站的 SAML 2.0 提供者設定

備註

本文件適用於 Dynamics 365 入口網站及更新版本。

若要提供外部驗證,您可以新增一個或多個符合 SAML 2.0 標準的身分識別提供者 (IdP)。 本文說明如何設定各種不同的身分識別提供者,以便與做為服務提供的入口網站整合。

AD FS (IdP)

身分識別提供者 (例如 Active Directory Federation Services (AD FS)) 的設定。

建立 AD FS 信賴憑證者信任

備註

請參閱下方的使用 PowerShell 設定 AD FS,以取得有關如何在 PowerShell 指令碼中執行這些步驟的資訊。

使用 AD FS 管理工具,移至服務 > 宣告描述

  1. 選取新增宣告描述
  2. 指定宣告:

    • 顯示名稱:持續識別項

    • 宣告識別項:urn:oasis:names:tc:SAML:2.0:nameid-format:persistent

    • 啟用核取方塊,用於:在同盟中繼資料中發行此宣告描述做為此同盟服務可接受的宣告類型

    • 啟用核取方塊,用於:在同盟中繼資料中發行此宣告描述做為此同盟服務可傳送的宣告類型

  3. 選取確定

使用 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. 設定身分識別:指定 https://portal.contoso.com/、選取**新增**,然後選取**下一步**。 若適用,您可以為每個額外的信賴憑證者入口網站新增多個身分識別。 使用者將能夠跨任何或所有可用的身分識別進行驗證。

  9. 選擇發行授權規則:選取允許所有使用者存取此信賴憑證者,然後選取下一步
  10. 準備新增信任:選取下一步
  11. 選取關閉

新增名稱識別碼宣告至信賴憑證者信任:

轉換 Windows 帳戶名稱名稱識別碼宣告 (轉換連入宣告):

  • 連入宣告類型:Windows 帳戶名稱

  • 連出宣告類型:名稱識別碼

  • 連出名稱識別碼格式:持續識別項

  • 傳遞所有宣告值

建立網站設定

套用參考上述 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 服務可透過將標籤替換為 [provider] 標籤的方式設定。 每個唯一標籤都是一組與 IdP 相關的設定。 範例:ADFS、AzureAD、MyIdP

網站設定名稱 描述
Authentication/Registration/ExternalLoginEnabled 啟用或停用外部帳戶登入和註冊。 預設:true
Authentication/SAML2/[provider]/MetadataAddress 必要。 AD FS (STS) 伺服器的 WS-Federation 中繼資料 URL。 通常以下列路徑結尾:/FederationMetadata/2007-06/FederationMetadata.xml。 範例:https://adfs.contoso.com/FederationMetadata/2007-06/FederationMetadata.xml。 其他資訊: WsFederationAuthenticationOptions.MetadataAddress
Authentication/SAML2/[provider]/AuthenticationType 必要。 OWIN 驗證中介軟體類型。 在同盟中繼資料 XML 的根目錄指定 entityID 屬性的值。 範例:http://adfs.contoso.com/adfs/services/trust。 其他資訊: AuthenticationOptions.AuthenticationType
Authentication/SAML2/[provider]/ServiceProviderRealm

Authentication/SAML2/[provider]/Wtrealm
必要。 AD FS 信賴憑證者識別碼。 範例:https://portal.contoso.com/。 其他資訊: WsFederationAuthenticationOptions.Wtrealm
Authentication/SAML2/[provider]/AssertionConsumerServiceUrl

Authentication/SAML2/[provider]/Wreply
必要。 AD FS SAML 取用者判斷提示端點。 範例:https://portal.contoso.com/signin-saml2。 其他資訊: WsFederationAuthenticationOptions.Wreply
Authentication/SAML2/[provider]/Caption 建議使用。 使用者可在登入使用者介面上顯示的文字。 預設值:[provider]。 其他資訊: WsFederationAuthenticationOptions.Caption
Authentication/SAML2/[provider]/CallbackPath 選擇性的限制路徑,用於處理驗證回呼。 其他資訊: WsFederationAuthenticationOptions.CallbackPath
Authentication/SAML2/[provider]/BackchannelTimeout 後方通道通訊的逾時值。 範例:00:05:00 (5 分鐘)。 其他資訊: WsFederationAuthenticationOptions.BackchannelTimeout
Authentication/SAML2/[provider]/UseTokenLifetime 表示驗證工作階段存留期 (例如 Cookie) 應符合驗證 Token 的存留期。 WsFederationAuthenticationOptions.UseTokenLifetime
Authentication/SAML2/[provider]/AuthenticationMode OWIN 驗證中介軟體模式。 其他資訊: AuthenticationOptions.AuthenticationMode
Authentication/SAML2/[provider]/SignInAsAuthenticationType 建立 System.Security.Claims.ClaimsIdentity 時使用的 AuthenticationType。 其他資訊: WsFederationAuthenticationOptions.SignInAsAuthenticationType
Authentication/SAML2/[provider]/ValidAudiences 對象 URL 的逗號分隔清單。 其他資訊: TokenValidationParameters.AllowedAudiences
Authentication/SAML2/[provider]/ClockSkew 驗證時間時要套用的時鐘誤差。
Authentication/SAML2/[provider]/RequireExpirationTime 指出 Token 是否必須有到期值的值。
Authentication/SAML2/[provider]/ValidateAudience 布林值,控制是否在 Token 驗證期間驗證對象。

IdP 起始的登入

AD FS 支援 IdP 起始的單一登入 (SSO) 設定檔 (SAML 2.0 [規格](http://docs.oasis-open.org/security/saml/Post2.0/sstc-saml-tech-overview-2.0-cd-02.html#5.1.4.IdP-Initiated SSO: POST Binding|outline))。 為了讓入口網站 (服務提供者) 正確回應 IdP 起始的 SAML 要求,RelayState 參數必須正確編碼。

要編碼至 SAML RelayState 參數內的基本字串值必須採用下列格式:ReturnUrl=/content/sub-content/,其中 /content/sub-content/ 是您要在入口網站 (服務提供者) 移至的網頁路徑。 路徑可以由入口網站上任何有效的網頁取代。 字串值經過編碼後,會放入下列格式的容器字串中:RPID=<URL encoded RPID>&RelayState=<URL encoded RelayState>。 這整個字串會再次經過編碼,並新增至另一個有下列格式的容器:https://adfs.contoso.com/adfs/ls/idpinitiatedsignon.aspx?RelayState=<URL 編碼的 RPID/RelayState>

例如,假設服務提供者路徑為 /content/sub-content/ 且信賴憑證者識別碼為 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
  • 在前面加上 AD FS IdP 起始的 SSO 路徑以得到最後的 URL

下列 PowerShell 指令碼可用來建構 URL (儲存至名為 Get-IdPInitiatedUrl.ps1 的檔案)。

<#

.SYNOPSIS 

Constructs an IdP-initiated SSO URL to access a portal page on the service provider.

.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 設定

描述 AD FS 的上一節也適用於 Azure AD,因為 Azure AD 的行為就像是與標準 SAML 2.0 相符的 IdP。 若要開始進行,請登入 Azure 管理入口網站並建立或選取現有的目錄。 有目錄可用時,依照指示新增應用程式至目錄。

  1. 在目錄的應用程式功能表底下,選取新增
  2. 選擇新增我的組織正在開發的應用程式
  3. 指定應用程式的自訂名稱,然後選擇 Web 應用程式和/或 Web API 類型。
  4. 針對登入 URL應用程式識別碼 URI,為這兩個欄位指定入口網站的 URL https://portal.contoso.com/。 這對應於 ServiceProviderRealm (Wtrealm) 網站設定值。
  5. 此時,新應用程式已建立完成。 移至功能表的設定區段。

    單一登入區段底下,更新第一個回覆 URL 項目以在 URL http://portal.contoso.com/signin-azure-ad 中包含路徑。

    這對應於 AssertionConsumerServiceUrl (Wreply) 網站設定值。

  6. 在頁尾功能表中,選取檢視端點,並記下同盟中繼資料文件欄位。

這對應於 MetadataAddress 網站設定值。

  • 將此 URL 貼入瀏覽器視窗以檢視同盟中繼資料 XML,並記下根元素的 entityID 屬性。
  • 這對應於 AuthenticationType 網站設定值。

備註

標準 Azure AD (IdP) 設定僅使用下列設定 (含範例值):Authentication/SAML2/AzureAD/MetadataAddress - https://login.microsoftonline.com/01234567-89ab-cdef-0123-456789abcdef/federationmetadata/2007-06/federationmetadata.xml

Shibboleth 身分識別提供者 3

使用下列方針正確設定 Shibboleth 身分識別提供者做為 IdP 服務。 以下假設 IdP 裝載於網域 https://idp.contoso.com。

同盟中繼資料 URL 為 https://idp.contoso.com/idp/shibboleth

<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 以設定服務提供者 (信賴憑證者)。

  • 每個服務提供者同盟中繼資料 (<SPSSODescriptor>) 都必須包括判斷提示取用者服務 POST 繫結。 有一個選項是使用 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) 設定。

  • 服務提供者同盟中繼資料應為對應至 AuthenticationType 設定的 EntityDescriptor 指定 entityID 屬性。

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

備註

標準 Shibboleth 設定只使用下列設定 (含範例值):
Authentication/SAML2/Shibboleth/MetadataAddress - https://idp.contoso.com/idp/shibboleth

IdP 起始的登入

Shibboleth 支援 IdP 起始的 SSO 設定檔 (SAML 2.0 [規格](http://docs.oasis-open.org/security/saml/Post2.0/sstc-saml-tech-overview-2.0-cd-02.html#5.1.4.IdP-Initiated SSO: POST Binding|outline))。 為了讓入口網站 (服務提供者) 正確回應 IdP 起始的 SAML 要求,RelayState 參數必須正確編碼。

要編碼至 SAML RelayState 參數內的基本字串值必須採用下列格式:ReturnUrl=/content/sub-content/,其中 /content/sub-content/ 是您要在入口網站 (服務提供者) 移至的網頁路徑。 路徑可以由入口網站上任何有效的網頁取代。 完整的 IdP 起始的 SSO URL 格式應為 https://idp.contoso.com/idp/profile/SAML2/Unsolicited/SSO?providerId=<URL 編碼的提供者識別碼>&target=<URL 編碼的傳回路徑>。

例如,假設服務提供者路徑為 /content/sub-content/ 且信賴憑證者識別碼為 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 指令碼可用來建構 URL (儲存至名為 Get-ShibbolethIdPInitiatedUrl.ps1 的檔案)。

<# 

.SYNOPSIS

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

.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 365 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 入口網站驗證
設定入口網站的驗證身分
入口網站的OAuth2 提供者設定
入口網站的 OpenID Connect 提供者設定
入口網站的 WS-Federation 提供者設定
入口網站的 Facebook 應用程式 (頁面索引標籤) 驗證