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

備註

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

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

AD FS (IdP)

IdP 的設定,例如 AD FS。

建立 AD FS 信賴憑證者信任

備註

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

使用 AD FS 管理工具,選取 [服務] >[宣告描述]。

  1. 按一下 [新增宣告描述]...
  2. 指定宣告:

顯示名稱:持續識別項

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

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

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

  • 按一下 [確定]

使用 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。 MSDN
Authentication/SAML2/[provider]/AuthenticationType 必要。 OWIN 驗證中介軟體類型。 在同盟中繼資料 XML 的根目錄指定 entityID 屬性的值。 範例:http://adfs.contoso.com/adfs/services/trust。 MSDN
Authentication/SAML2/[provider]/ServiceProviderRealm

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

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

IdP 起始的登入

AD FS 支援 IdP 起始的 SSO 設定檔 (SAML 2.0 規格)。 為了讓入口網站 (SP) 正確回應 IdP 起始的 SAML 要求,RelayState 參數必須正確編碼。

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

例如,假設 SP 路徑為:/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
  • 在前面加上 ADFS IdP 起始的 SSO 路徑以得到最後的 URL

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

<#

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

描述 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 設定只使用下列設定 (含範例值):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

  • 每個 SP 同盟中繼資料 (<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) 設定。

  • SP 同盟中繼資料應為 EntityDescriptor 指定 entityID 屬性,其對應 AuthenticationType 設定。

<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 規格)。 為了讓入口網站 (SP) 正確回應 IdP 起始的 SAML 要求,RelayState 參數必須正確編碼。

要編碼至 SAML RelayState 參數內的基本字串值必須採用下列格式:ReturnUrl=/content/sub-content/,其中 /content/sub-content/ 是入口網站 (SP) 上要做為瀏覽目標的網頁路徑。 路徑可以由入口網站上任何有效的網頁取代。 完整的 IdP 起始的 SSO URL 格式應為:https://idp.contoso.com/idp/profile/SAML2/Unsolicited/SSO?providerId=<URL encoded provider ID>&target=<URL encoded return path>。

例如,假設 SP 路徑為:/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 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 入口網站驗證
設定入口網站的驗證身分
入口網站的OAuth2 提供者設定
入口網站的 OpenID Connect 提供者設定
入口網站的 WS-Federation 提供者設定
入口網站的 Facebook 應用程式 (頁面索引標籤) 驗證