SharePoint 팜 하이브리드 기능을 구성한 후에 공급자 호스트 추가 기능이 작동을 중지 하 고 HTTP 401 오류가 발생 함

현상도

다음 시나리오를 고려 하십시오. RegisteredIssuerName>으로 <등록 되 고 sharepoint 2013 또는 sharepoint 2016 팜에 대 한 원래 팜 RealmID 값을 포함 하는 기존의 배포 된 공급자 호스트 추가 기능 (PHA)이 있고 팜에 워크플로 관리자 연결을 만든 경우

이 시나리오에서는 팜에서 SharePoint 하이브리드 기능을 구성한 후에 이러한 PHAs에 액세스 하면 PHAs 작동 중지 됩니다. 또한 추가 기능으로 이동 하면 HTTP 401 오류 메시지가 표시 됩니다.

참고

PHAs에는 외부에서 호스트 되는 웹 응용 프로그램, 서비스, 데이터베이스 또는 SharePoint 구성 요소가 포함 될 수 있습니다.
하이브리드 기능을 먼저 구성한 다음 SharePoint 2013 또는 SharePoint 2016 팜에서 공급자 호스트 추가 기능 및/또는 워크플로 관리자를 배포 하는 경우에는이 문제가 발생 하지 않습니다.

원인

Sharepoint 용 SharePoint 하이브리드 기능 구성 2013 또는 SharePoint 2016에서는 하이브리드 기능을 구성 하기 전에 만든 S2S (서버 간) 트러스트를 사용할 수 없습니다. 클라우드 SSA 온-탑재 된 스크립트 또는 하이브리드 선택기를 사용 하 여 S2S 트러스트를 설정 하려고 하면 온-프레미스 팜의 인증 영역이 Office 365 테 넌 트 컨텍스트 ID와 일치 하도록 업데이트 됩니다. 스크립트는 Set-Spauthenticationrealm cmdlet을 사용 하 여 인증 영역을 설정 합니다. 인증 영역이 변경 된 후에는 기존 SharePoint 추가 기능을 인증 하지 못합니다.

이 인증 실패는 공급자가 호스트 되는 추가 기능에 SharePoint에 액세스할 수 있는 방법으로 인해 발생 합니다. SharePoint 추가 기능은 IssuerId 값을 사용 하 여 SPTrustedSecurityTokenIssuers 와 연결 됩니다. 요청에 대 한 추가 기능에서 보안 STS (토큰 서비스 발급자) 로부터 토큰을 가져오려고 시도 합니다. 토큰 발급자가 인증 영역에 연결 됩니다. 영역이 변경 된 후에는 SharePoint 추가 기능에서 더 이상 인증을 성공적으로 수행할 수 없습니다. 올바른 발급자 ID가 있는 신뢰할 수 있는 토큰 발급자가 팜에 여전히 존재 합니다. 그러나 이전 인증 영역과 연결 됩니다. 실제 <RegisteredIssuerName> 값은 IssuerId@OldAuthRealmGuid oldAuthRealmGuid 값이 현재 AuthRealmGuid 값과 더 이상 일치 하지 않습니다. STS가 일치 하는 토큰 발급자를 찾을 수 없기 때문에 추가 기능이 인증에 실패 했습니다.

다음과 같은 오류 메시지가 ULS 로그에 기록 되며, 해당 RealmID 값이 더 이상 팜과 일치 하지 않으므로 토큰 발급자를 신뢰할 수 없음을 의미 합니다. SPApplicationAuthenticationModule: 인증 요청 실패, 알 수 없는 오류입니다. 예외 정보: IdenitytModel. SecurityTokenException: 토큰의 문제가 신뢰할 수 있는 발급자가 아닙니다.

문제 해결 방법

하이브리드를 구성 하는 경우 RealmID 가 Office365 구독의 테 넌 트 ID와 일치 하도록 변경 됩니다. 이렇게 하면 "현상" 섹션에 설명 된 대로 추가 기능이 작동을 멈춥니다. SharePoint 추가 기능 기능을 복원 하려면 새 영역 ID를 포함 하는 <RegisteredIssuerName> 값을 사용 하 여 공급자가 호스트 된 추가 기능을 등록 합니다. 그런 다음 각 추가 기능 인스턴스에 대 한 추가 기능 권한을 다시 적용 합니다.

공급자가 호스트 하는 추가 기능 및 하이브리드 기능과 관련 된 인증 관련 문제를 해결 하려면 다음 단계를 수행 합니다.

  1. 웹 응용 프로그램에 배포 된 모든 앱 인스턴스를 검색 하려면 다음 스크립트를 실행 합니다.

    다음 스크립트에서 웹 응용 프로그램 {0} 으로 대체 합니다. 스크립트의 출력은 모든 공급자 호스트 추가 기능의 앱 제목, 앱 클라이언트 ID 및 대상 웹입니다. 이러한 값은 3 단계에서 입력으로 사용 됩니다.

    Add-PsSnapin Microsoft.SharePoint.PowerShell
    $webApp = Get-SPWebApplication -identity "webapplication"
    foreach($site in $webApp.Sites)
    {
    foreach($web in $site.AllWebs)
    {
    $appInstance = Get-SPAppInstance -Web $web.Url | ? {$_.LaunchUrl -notlike "~appWebUrl*"} | select Title, AppPrincipalId
    if($appInstance -ne $null)
    {
    foreach ($instance in $appInstance)
    {
    $tmp = $instance.AppPrincipalId.Split('|@',[System.StringSplitOptions]::RemoveEmptyEntries)
    $appInfo = $instance.Title + " - " + $tmp[$tmp.Count - 2] + " - " + $web.Url
    Write-Output $appInfo
    }
    }
    }
    }
    
  2. 다음 스크립트를 사용 하 여 SPTrustedSecurityTokenIssuers 를 업데이트 합니다.

    $NewRealm = Get-SPAuthenticationRealm
    $sts = Get-SPTrustedSecurityTokenIssuer | ? {$_.Name -ne 'EvoSTS-Trust' -and $_.Name -ne 'ACS_STS'} | Select RegisteredIssuerName
    $realm = $sts | ?{$_.RegisteredIssuerName -ne $null} | %{$($($_.RegisteredIssuerName).toString().split('@',2)[1]).toString()} | ?{$_ -ne '*' -and $_ -ne $newRealm}
    if($Realm.count -gt 0)
    {
    $TempRealm = '*@$($NewRealm)'
    $Issuers = Get-SPTrustedSecurityTokenIssuer | ?{$_.Name -ne 'EvoSTS-Trust' -and $_.Name -ne 'ACS_STS' -and $_.RegisteredIssuerName -ne $null -and $_.RegisteredIssuerName -notlike '*@`*' -and $_.RegisteredIssuerName -notlike $TempRealm}
    $Guid = [guid]::NewGuid() foreach ($Issuer in $Issuers)
    {
    $NameCopy = $Issuer.Name $NewIssuerName = $Guid
    $IssuerCertificate = $Issuer.SigningCertificate
    $OldRegisteredIssuerID = $Issuer.RegisteredIssuerName
    $IssuerID = $OldRegisteredIssuerID.Split('@')[0]
    $NewRegisteredIssuerName = $IssuerID + '@' + $NewRealm
    $NewIssuer = New-SPTrustedSecurityTokenIssuer -Name $NewIssuerName -Certificate $IssuerCertificate -RegisteredIssuerName $NewRegisteredIssuerName -IsTrustBroker
    Remove-SPTrustedSecurityTokenIssuer $Issuer -Confirm:$false
    $NewIssuer.Name = $NameCopy
    $NewIssuer.Update()
    }
    }
    
  3. 다음 스크립트를 실행 하 여 1 단계에서 찾은 각 공급자 호스트 추가 기능을 수정 합니다.

    스크립트에서를 {0} {1} 1 단계에서 구한 {2} 값으로 바꿉니다.

    $appTitle = '{0}'
    $clientID = '{1}'
    $targetWeb = Get-SPWeb '{2}'
    $Scope = 'Taxonomy'
    $Right = 'FullControl'
    $authRealm = Get-SPAuthenticationRealm -ServiceContext $targetWeb.Site
    $AppIdentifier = $clientID + '@' + $authRealm
    Register-SPAppPrincipal -NameIdentifier $AppIdentifier -Site $targetWeb -DisplayName $appTitle
    $appPrincipal = Get-SPAppPrincipal -Site $targetWeb -NameIdentifier $AppIdentifier
    Set-SPAppPrincipalPermission -Site $targetWeb -AppPrincipal $appPrincipal -Scope $Scope -Right $Right
    

    워크플로 관리자에 대 한 인증 영역을 업데이트 하려면 다음 cmdlet을 실행 합니다.

    $workflowproxy = Get-SPWorkflowServiceApplicationProxy
    $webapp = get-spwebapplication -identity "webapplication"
    if ($webapp)
    {
    $webappurl = $webapp[0].url
    $Site=get-spsite $webappurl
    if ($site)
    {
    $workflowaddress = $workflowproxy.GetWorkflowServiceAddress($site)
    $workflowscopename = $workflowproxy.GetWorkflowScopeName($site)
    $TrimScope = '/'+$workflowscopename+'/'
    $wfmaddress = $workflowaddress.TrimEnd($Trimscope)
    }
    }
    $workflowproxy.delete()
    Register-SPWorkflowService -SPSite $Site -WorkflowHostUri $wfmaddress -Force
    

    하이브리드 기능을 구성 하기 전에 팜 간 신뢰 시나리오를 배포한 경우에는 다음 TechNet 항목의 방법을 사용 하 여 시나리오를 수동으로 수정 해야 합니다.

추가 정보

공급자 호스트 추가 기능 또는 워크플로 관리자를 구현 하기 전에 S2S가 필요한 하이브리드 작업을 구성 하는 시나리오에서는 SPAuthenticationRealm cmdlet이 Office 365 테 넌 트 컨텍스트 ID와 일치 하도록 업데이트 된 후에 추가 기능이 등록 됩니다. RealmID 값이 다시 변경 되지 않기 때문에 항상 작동 합니다. 하이브리드 작업을 추가 하거나 다시 구성 하는 경우 영역 ID는 Office 365 테 넌 트 컨텍스트 ID와 동일 하 게 유지 됩니다. SharePoint 온-프레미스 환경과 Office 365 간에 서버 간 트러스트를 만들려면 Set-SPAuthenticationRealm cmdlet을 실행 합니다.

중요

이 항목에는 Spauthenticationrealm 값을 변경한 후에 특정 영역에 대해 만든 액세스 토큰이 작동 하지 않음을 경고 하는 "주의" 섹션이 포함 되어 있습니다.

SharePoint 공급자가 호스트 하는 추가 기능을 만들려면 Get a provider Hosted SharePoint 추가 기능 만들기 시작을 참조 하십시오.

여전히 도움이 필요하세요? SharePoint 커뮤니티로 이동 합니다.