AD FS를 사용하는 SAML 2.0 공급자 설정

AD FS(Active Directory Federation Services)는 Power Pages 사이트의 방문자를 인증하는 데 사용할 수 있는 SAML 2.0 ID 공급자 중 하나입니다. 포털에서 SAML 2.0 사양을 확인하는 모든 공급자를 사용할 수 있습니다.

이 문서는 다음 단계를 설명합니다.

중요

AD FS 설정 단계는 AD FS 서버 버전에 따라 다를 수 있습니다.

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. 확인을 선택합니다.

  6. 신뢰 관계>신뢰 당사자 신뢰을 선택합니다.

  7. 신뢰 당사자 신뢰 추가를 선택합니다.

  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를 사용하려면 웹 사이트에서 HTTP가 아닌 HTTPS를 실행해야 합니다.

  16. 다음을 선택합니다.

  17. 식별자 구성 페이지에서 사이트의 URL을 입력한 다음 추가를 선택합니다.

    필요한 경우 각각의 추가 신뢰 당사자 웹 사이트에 대해 더 많은 ID를 추가할 수 있습니다. 사용자는 사용 가능한 ID를 사용하여 인증할 수 있습니다.

  18. 다음을 선택합니다.

  19. 지금 다단계 인증을 구성하시겠습니까? 페이지에서 이번에는 이 신뢰 당사자 트러스트에 대한 다단계 인증 설정을 구성하지 않겠습니다를 선택합니다.

  20. 발급 권한 부여 규칙 선택 페이지에서 모든 사용자가 이 신뢰 당사자에 액세스하도록 허용을 선택한 후 다음을 선택합니다.

  21. 신뢰 설정을 검토한 후 다음을 선택합니다.

  22. 닫기를 선택합니다.

  23. 클레임 규칙 편집에서 편집 중인 트러스트와 규칙을 만들려는 규칙 집합에 따라 다음 탭 중 하나를 선택합니다.

    • 수락 변환 규칙
    • 발급 변환 규칙
    • 발급 권한 부여 규칙
    • 위임 권한 부여 규칙
  24. 규칙 추가를 선택합니다.

  25. 클레임 규칙 템플릿 목록에서 수신 클레임 변환을 선택한 후 다음을 선택합니다.

  26. 다음 값을 입력하거나 선택합니다.

    • 클레임 규칙 이름: Windows 계정 이름을 이름 ID로 변환

    • 수신 클레임 유형: Windows 계정 이름

    • 발신 클레임 유형: 이름 ID

    • 발신 이름 ID 형식: 영구 식별자

  27. 모든 클레임 값 통과를 선택합니다.

  28. 완료를 선택한 다음 확인을 선택합니다.

공급자 설정 완료

AD FS 신뢰 당사자 신뢰를 설정한 후:

  1. Azure에서 앱 등록 만들기.

  2. Power Pages에서 사이트 설정 입력.

ID 공급자 시작 로그인

AD FS는 SAML 2.0 사양ID 공급자–개시 SSO(Single Sign-On) 프로필을 지원합니다. 서비스 제공자 웹 사이트가 ID 제공자의 SAML 요청에 제대로 응답하려면 RelayState 매개 변수를 인코딩해야 합니다.

SAML RelayState 매개 변수로 인코딩할 기본 문자열 값은 ReturnUrl=/content/sub-content/ 형식이어야 하며, 여기서 /content/sub-content/는 서비스 공급자 웹 사이트에서 이동하려는 페이지의 경로입니다. 웹 사이트에서 유효한 페이지의 경로를 지정할 수 있습니다. 문자열 값은 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%3D%2Fcontent%2Fsub-content%2F를 위해 ReturnUrl=/content/sub-content/ 값을 인코딩

  • https%3A%2F%2Fportal.contoso.com%2F를 위해 https://portal.contoso.com/ 값을 인코딩

  • RPID%3Dhttps%253A%252F%252Fportal.contoso.com%252F%26RelayState%3DReturnUrl%253D%252Fcontent%252Fsub-content%252F를 위해 RPID=https%3A%2F%2Fportal.contoso.com%2F&RelayState=ReturnUrl%3D%2Fcontent%2Fsub-content%2F 값을 인코딩

  • 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