Надстройки, размещенные у поставщика, перестают работать и ошибка HTTP 401 после настройки гибридных функций фермы SharePoint
Симптомы
Рассмотрим следующий сценарий. У вас есть существующие развернутые размещенные у поставщика надстройки (PHA), зарегистрированные как RegisteredIssuerName
и содержащие исходное значение фермы RealmID
SharePoint 2013 или SharePoint 2016, и (или) вы создали связь Workflow Manager в ферме.
В этом сценарии, когда вы обращаетесь к этим phas после настройки гибридных функций SharePoint в ферме, phAs перестают работать. Кроме того, при перенаправлении к надстройкам появляется сообщение об ошибке HTTP 401.
Примечание.
PhA могут включать размещенные извне веб-приложение, службу, базу данных или компонент SharePoint. Эта проблема не возникает, если сначала настроить гибридные функции, а затем развернуть надстройки, размещенные у поставщика, и (или) Workflow Manager в ферме SharePoint 2013 или SharePoint 2016.
Причина
Настройка гибридных функций SharePoint для SharePoint 2013 или SharePoint 2016 нарушает отношения доверия между серверами (S2S), созданные перед настройкой гибридных функций. При попытке установить доверие S2S с помощью скрипта подключения cloud SSA или гибридного средства выбора область проверки подлинности локальной фермы обновляется в соответствии с идентификатором контекста клиента Microsoft 365. Скрипт задает область проверки подлинности с помощью командлета Set-SPAuthenticationRealm . После изменения области проверки подлинности имеющиеся надстройки SharePoint не могут проходить аутентификацию.
Этот сбой проверки подлинности возникает из-за того, что размещенные у поставщика надстройки авторизованы для доступа к SharePoint. Надстройки SharePoint связаны с SPTrustedSecurityTokenIssuers
помощью IssuerId
значения . По запросу надстройка пытается получить маркер от издателя службы маркеров (STS). Издатели маркеров привязаны к области проверки подлинности. После изменения области надстройки SharePoint больше не смогут успешно пройти проверку подлинности. Доверенный издатель маркеров, имеющий правильный идентификатор издателя, по-прежнему существует в ферме. Однако он связан с предыдущей областью проверки подлинности. Фактическое RegisteredIssuerName
значение — IssuerId@OldAuthRealmGuid
, в котором oldAuthRealmGuid
значение больше не соответствует текущему AuthRealmGuid
значению. Надстройке не удается выполнить проверку подлинности, так как службе маркеров безопасности не удается найти издателя соответствующего маркера.
Следующее сообщение об ошибке регистрируется в журналах ULS и четко указывает на то, что издатель маркера больше не является доверенным, так как его RealmID
значение больше не соответствует ферме:
SPApplicationAuthenticationModule: не удалось проверить запрос, неизвестная ошибка. Сведения об исключении: System.IdenitytModel.Token.SecurityTokenException: проблемы маркера не являются доверенным издателем.
Разрешение
При настройке RealmID
гибридной среды изменяется в соответствии с идентификатором клиента подписки На Office365. Это приводит к тому, что надстройки перестают работать, как описано в разделе "Симптомы". Чтобы восстановить функции надстроек SharePoint, зарегистрируйте надстройки, размещенные у поставщика, используя RegisteredIssuerName
значение, содержащее новый идентификатор области. Затем повторно примените разрешения надстройки для каждого экземпляра надстройки.
Чтобы устранить проблемы, связанные с проверкой подлинности, связанные с надстройками, размещенными у поставщика, и гибридными функциями, выполните следующие действия.
Выполните следующий скрипт, чтобы обнаружить все экземпляры приложения, развернутые в веб-приложении:
В следующем сценарии замените {0} веб-приложением. Выходными данными скрипта являются название приложения, идентификатор клиента приложения и целевой веб-сайт всех надстроек, размещенных у поставщика. Эти значения будут использоваться в качестве входных данных на шаге 3.
Add-PsSnapin Microsoft.SharePoint.PowerShell Add-PsSnapin Microsoft.SharePoint.PowerShell $webApp = Get-SPWebApplication "{0}" 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 } } } }
Обновите 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() } }
Исправьте каждую надстройку, размещенную у поставщика, которая была найдена на шаге 1, выполнив следующий скрипт:
В скрипте замените {0}и значениями, {1}{2} полученными на шаге 1.
$appTitle = '{0}' $clientID = '{1}' $targetWeb = Get-SPWeb '{2}' $Scope = 'Site' $Right = 'Full Control' $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
Чтобы обновить область проверки подлинности для Workflow Manager, выполните следующий командлет:
$workflowproxy = Get-SPWorkflowServiceApplicationProxy $webapp = get-spwebapplication 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, прежде чем реализовывать надстройки, размещенные у поставщика или Workflow Manager, надстройки будут зарегистрированы после SPAuthenticationRealm
обновления командлета в соответствии с идентификатором контекста клиента Microsoft 365. Они всегда будут работать, так как значение RealmID больше не изменится. Если гибридные рабочие нагрузки добавляются или перенастраиваются, идентификатор области остается таким же, как идентификатор контекста клиента Microsoft 365.
Чтобы создать отношения доверия между сервером и локальной средой SharePoint и Microsoft 365, запустите Set-SPAuthenticationRealm.
Важно!
В этом разделе содержится раздел "Внимание", предупреждающий о том, что все маркеры доступа, созданные для определенной области, не будут работать после изменения SPAuthenticationRealm
значения.
Сведения о создании надстроек SharePoint, размещенных у поставщика, см. в статье Начало создания надстроек SharePoint с размещением у поставщика.
Требуется дополнительная помощь? Посетите сайт сообщества SharePoint.
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по