Condividi tramite


Errore "401 non autorizzato" quando si usano attestazioni OAuth e SAML

Sintomi

Prendi in considerazione lo scenario seguente:

  • Si usano tipi di attestazione SAML (Security Assertions Markup Language) che usano Active Directory Federated Services (AD FS) come provider di autenticazione nella farm.
  • Si usa l'attestazione Role o GroupSID per concedere autorizzazioni agli utenti nei siti di Microsoft SharePoint 2013 nella farm.
  • La versione della farm è precedente alla versione 15.0.4805.1000 (aggiornamento cumulativo di marzo 2016).

In questo scenario, gli utenti con le autorizzazioni appropriate assegnate tramite il tipo di attestazione Role o GroupSID ricevono messaggi di errore "401 non autorizzati" quando usano il metodo di autenticazione OAuth nei casi seguenti:

  • Gestione flussi di lavoro (flussi di lavoro di SharePoint 2013)
  • Web Application Companion (WAC - Office App Web)
  • App ospitate con attendibilità elevata o con attendibilità bassa
  • Pubblicazione/utilizzo dell'applicazione tra servizi farm
  • Scenari ibridi di SharePoint 2013/SharePoint Online
  • Integrazione di SharePoint con Exchange e Lync 2013/Skype for Business

Risoluzione

Per risolvere questo problema, installare l'aggiornamento cumulativo di marzo 2016 per Microsoft SharePoint Server in tutti i server della farm.

Come parte della correzione, viene aggiunta una nuova proprietà GroupClaimType all'oggetto SPTrustedIdentityTokenIssuer. Per consentire il corretto funzionamento di OAuth, questa proprietà deve essere impostata sul tipo di attestazione corretto per l'autorizzazione per gli utenti a cui sono assegnate le autorizzazioni tramite il tipo di attestazione Role o GroupSID.

Per impostare la proprietà GroupClaimType, eseguire i comandi di Windows PowerShell seguenti:

#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()   

Ulteriori informazioni

Messaggio di errore di esempio da un flusso di lavoro non riuscito:

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)

Voci di log di esempio nel log ULS (Unified Logging System):

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.      

Stato

Microsoft ha confermato che si tratta di un problema nelle versioni della farm di SharePoint precedenti all'aggiornamento cumulativo di marzo 2016 (v. 15.0.4805.1000).

Riferimenti

Aggiornamenti di SharePoint

Serve ancora assistenza? Visitare la community di SharePoint.