Udostępnij za pośrednictwem


Błąd "401 brak autoryzacji" podczas korzystania z oświadczeń OAuth i SAML

Symptomy

Rozważmy następujący scenariusz:

  • Używasz typów oświadczeń języka SAML (Security Assertions Markup Language), które używają usług Federacyjnych Active Directory (AD FS) jako dostawcy uwierzytelniania w farmie.
  • Używasz oświadczenia Role lub GroupSID w celu udzielenia uprawnień użytkownikom w witrynach programu Microsoft SharePoint 2013 w farmie.
  • Wersja farmy jest starsza niż wersja 15.0.4805.1000 (aktualizacja zbiorcza z marca 2016 r.).

W tym scenariuszu użytkownicy, którzy mają przypisane do nich odpowiednie uprawnienia za pośrednictwem typu oświadczenia Role lub GroupSID, otrzymują komunikaty o błędach "401 nieautoryzowane" podczas korzystania z metody uwierzytelniania OAuth w takich przypadkach jak:

  • Menedżer przepływów pracy (przepływy pracy programu SharePoint 2013)
  • Towarzysz aplikacji internetowej (WAC — Office Web Apps)
  • Aplikacje hostowane przez dostawcę o wysokim zaufaniu lub niskim zaufaniu
  • Publikowanie/korzystanie z aplikacji między farmami
  • Hybrydowe scenariusze programu SharePoint 2013/SharePoint Online
  • Integracja programu SharePoint z programem Exchange i programem Lync 2013/Skype dla firm

Rozwiązanie

Aby rozwiązać ten problem, zainstaluj zbiorczą aktualizację programu Microsoft SharePoint Server z marca 2016 r. na wszystkich serwerach w farmie.

W ramach poprawki nowa właściwość GroupClaimType jest dodawana do obiektu SPTrustedIdentityTokenIssuer. Aby uwierzytelnianie OAuth mogło działać poprawnie, ta właściwość musi być ustawiona na prawidłowy typ oświadczenia dla użytkowników, którzy mają przypisane uprawnienia za pomocą typu oświadczenia Role lub GroupSID.

Aby ustawić właściwość GroupClaimType, uruchom następujące polecenia programu Windows PowerShell:

#Create a variable containing the SPTrustedIdentityTokenIssuer object  
$issuer = Get-SPTrustedIdentityTokenIssuer  

#Set the GroupClaimType property to the Role claim type, do not run for GroupSID claim type  
$issuer.GroupClaimType = [Microsoft.IdentityModel.Claims.ClaimTypes]::Role   

#Set the GroupClaimType property to the GroupSID claim type, do not run for Role claim type  
$issuer.GroupClaimType = [Microsoft.IdentityModel.Claims.ClaimTypes]::GroupSid  

#Update the SPTrustedIdenityTokenIssuer object to apply the change   
$issuer.Update()   

Więcej informacji

Przykładowy komunikat o błędzie z przepływu pracy, który zakończył się niepowodzeniem:

RequestorId: <Requestor ID>. Details: System.ApplicationException: HTTP 401 {"error":{"code":"-2147024891, System.UnauthorizedAccessException","message":{"lang":"en-US","value":"Access denied. You do not have permission to perform this action or access this resource."}} } {"Transfer-Encoding":["chunked"],"X-SharePointHealthScore":["0"],"SPRequestGuid":["<SP Request GUID>"],"request-id":["<Request ID>"],"X-FRAME-OPTIONS":["SAMEORIGIN"],"MicrosoftSharePointTeamServices":["15.0.0.4805"],"X-Content-Type-Options":["nosniff"],"X-MS-InvokeApp":["1; RequireReadOnly"],"Cache-Control":["max-age=0, private"],"Date":["Fri, 19 Aug 2016 20:35:30 GMT"],"Server":["Microsoft-IIS\/8.0"],"WWW-Authenticate":["NTLM"],"X-AspNet-Version":["4.0.30319"],"X-Powered-By":["ASP.NET"]} at Microsoft.Activities.Hosting.Runtime.Subroutine.SubroutineChild.Execute(CodeActivityContext context) at System.Activities.CodeActivity.InternalExecute(ActivityInstance instance, ActivityExecutor executor, BookmarkManager bookmarkManager) at System.Activities.Runtime.ActivityExecutor.ExecuteActivityWorkItem.ExecuteBody(ActivityExecutor executor, BookmarkManager bookmarkManager, Location resultLocation)

Przykładowe wpisy dziennika w dzienniku ujednoliconego systemu rejestrowania (ULS):

15:54:30.25 w3wp.exe (0x9FCC) 0x5F78 SharePoint Foundation CSOM aii1c Verbose Checking   
SPBasePermissions.Open permission  

15:54:30.25 w3wp.exe (0x9FCC) 0x5F78 SharePoint Foundation Authentication Authorization ajmmu   
Medium Permission check failed. asking for 0x10000, have 0x2000000000 645f0edc-7ec9-44c5-84b7-  
2adfba2f7f92  

15:54:30.25 w3wp.exe (0x9FCC) 0x5F78 SharePoint Foundation CSOM afxwb High  
System.UnauthorizedAccessException: Attempted to perform an unauthorized operation. at   
Microsoft.SharePoint.SPGlobal.HandleUnauthorizedAccessException(UnauthorizedAccessException ex) at   
Microsoft.SharePoint.SPSecurableObject.CheckPermissions(SPBasePermissions permissionMask) at   
Microsoft.SharePoint.Client.SPClientServiceHost.OnBeginRequest() at   
Microsoft.SharePoint.Client.Rest.RestService.ProcessQuery(Stream inputStream, IList`1   
pendingDisposableContainer)  

15:54:30.25 w3wp.exe (0x9FCC) 0x5F78 SharePoint Foundation CSOM agmjp High Original error:  
System.UnauthorizedAccessException: Attempted to perform an unauthorized operation. at   
Microsoft.SharePoint.SPGlobal.HandleUnauthorizedAccessException(UnauthorizedAccessException ex) at   
Microsoft.SharePoint.SPSecurableObject.CheckPermissions(SPBasePermissions permissionMask) at   
Microsoft.SharePoint.Client.SPClientServiceHost.OnBeginRequest() at   
Microsoft.SharePoint.Client.Rest.RestService.ProcessQuery(Stream inputStream, IList`1   
pendingDisposableContainer)   

15:54:30.25 w3wp.exe (0x9FCC) 0x5F78 SharePoint Portal Server Microfeeds aizmo Medium   
SocialRESTExceptionProcessingHandler.DoServerExceptionProcessing - SharePoint Server Exception   
[System.UnauthorizedAccessException: Attempted to perform an unauthorized operation. at   
Microsoft.SharePoint.SPGlobal.HandleUnauthorizedAccessException(UnauthorizedAccessException ex) at   
Microsoft.SharePoint.SPSecurableObject.CheckPermissions(SPBasePermissions permissionMask) at   
Microsoft.SharePoint.Client.SPClientServiceHost.OnBeginRequest() at   
Microsoft.SharePoint.Client.Rest.RestService.ProcessQuery(Stream inputStream, IList`1   
pendingDisposableContainer)] 645f0edc-7ec9-44c5-84b7-2adfba2f7f92  

15:54:30.25 w3wp.exe (0x9FCC) 0x5F78 SharePoint Foundation Claims Authentication af32v Verbose   
Claims Windows Sign-In: Sending 401 for request  
'http://<;servername>;:30079/_vti_bin/client.svc/web/lists/getbyid(guid'<GUID>')' because the request is not from a browser.   

15:54:30.25 w3wp.exe (0x9FCC) 0x5F78 SharePoint Foundation Authentication Authorization alkvd   
Medium Throw UnauthorizedAccessException instead of SPUtilityInternal.Send401 for client.svc request.      

Stan

Firma Microsoft potwierdziła, że jest to problem w wersjach farmy programu SharePoint, które są starsze niż aktualizacja zbiorcza z marca 2016 r. (wersja 15.0.4805.1000).

Informacje

Aktualizacje programu SharePoint

Nadal potrzebujesz pomocy? Przejdź do witryny SharePoint Community.