Question

J'essaie de résoudre ce problème depuis un moment sans succès, peut-être que quelqu'un avec plus d'expérience Sharepoint pourra identifier mon problème.

La trace de la pile des exceptions dans les journaux Sharepoint ressemble à ceci :

System.IdentityModel.Tokens.SecurityTokenException: The issuer of the token is not a trusted issuer.    
at Microsoft.SharePoint.IdentityModel.SPLocalIssuerNameRegistry.GetIssuerName(SecurityToken securityToken)     
at Microsoft.IdentityModel.Tokens.Saml11.Saml11SecurityTokenHandler.CreateClaims(SamlSecurityToken samlSecurityToken)     
at Microsoft.IdentityModel.Tokens.Saml11.Saml11SecurityTokenHandler.ValidateToken(SecurityToken token)     
at Microsoft.IdentityModel.Tokens.SecurityTokenHandlerCollection.ValidateToken(SecurityToken token)     
at Microsoft.IdentityModel.Web.TokenReceiver.AuthenticateToken(SecurityToken token, Boolean ensureBearerToken, String endpointUri)     
at Microsoft.IdentityModel.Web.WSFederationAuthenticationModule.SignInWithResponseMessage(HttpRequest request)     
at Microsoft.IdentityModel.Web.WSFederationAuthenticationModule.OnAuthenticateRequest(Object sender, EventArgs args)     
at Microsoft.SharePoint.IdentityModel.SPFederationAuthenticationModule.OnAuthenticateRequest(Object sender, EventArgs eventArgs)     
at System.Web.HttpApplication.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()     
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

J'ai regardé le code décompilé, il ressemble à ceci :

 if (!accessProvider.SigningCertificate.Equals((X509Certificate) x509SecurityToken.Certificate))
    throw new SecurityTokenException(SPResource.GetString("IssuerIsNotTrusted"));

Il semble donc que le jeton de sécurité reçu et les certificats du fournisseur d'accès ne correspondent pas.Je suis allé plus loin, j'ai fait un vidage sur incident, j'ai chargé dans Windbg et j'ai essayé de trouver quel certificat avait accessProvider, je ne savais pas si je cherchais au bon endroit, mais si c'était le cas, alors il avait un mauvais certificat - son sujet était CN=SharePoint Security Token Service, OU=SharePoint, O=Microsoft, C=US, clairement pas le mien configuré.

J'enregistrais mon fournisseur d'identité comme ceci :

$cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2("C:\temp\wcfsts.dev.cer")
$map1 = New-SPClaimTypeMapping -IncomingClaimType "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress" -IncomingClaimTypeDisplayName "Display Name" –SameAsIncoming
$realm = "http://sp2013.testweb.local"
$ap = New-SPTrustedIdentityTokenIssuer -Name "WSFederationSTS" -Description "WCF STS." –Realm $realm -ClaimsMappings $map1 -ImportTrustCertificate $cert -SignInUrl "http://wcfsts.dev/WSFederationSecurityTokenService.svc/Issue" -IdentifierClaim $map1.InputClaimType

J'ai également enregistré un certificat auprès de New-SPTrustedRootAuthority.

Était-ce utile?

La solution

J'ai découvert le problème par hasard, en cherchant ce que j'aurais pu faire de mal.
je cherchais à Procédure pas à pas des réclamations et j'ai remarqué qu'ils enregistraient l'émetteur de jetons en utilisant le code C#, ils ont donc décidé de faire de même et ils ont utilisé le domaine du fournisseur "https://intranet.contoso.com/_trust/", donc je l'ai juste changé pour avoir mon domaine, tout en laissant la partie "_trust" - et ça a commencé à fonctionner, donc l'exception dans les journaux était très trompeuse.

Après cela, j'ai trouvé article de blog avec le même problème, je me demande pourquoi je ne l'ai pas remarqué avant.

Autres conseils

Je suivais quelques instructions de ce lien :https://support.microsoft.com/en-us/help/3042604/the-convert-spwebapplication-command-cannot-convert-from-windows-claim

Il utilisait le format suivant pour la commande New-SPTrustedIdentityTokenIssuer :

$ap = New-SPTrustedIdentityTokenIssuer -Name $tokenIdentityProviderName -Description $TrustedIdentityTokenIssuerDescription -realm $siteRealm -ImportTrustCertificate $adfsCert -SignInUrl $signInUrl -UseDefaultConfiguration -IdentifierClaimIs EMAIL -RegisteredIssuerName $siteRealm

Je ne savais pas trop quoi mettre pour RegisteredIssuerName et je l'avais auparavant laissé vide lorsqu'il fonctionnait, mais dans ce cas, je l'ai défini sur la même valeur que $tokenIdentityProviderName.

J'ai ensuite commencé à recevoir l'erreur « L'émetteur du jeton n'est pas un émetteur de confiance ».

J'ai effacé la valeur de RegisteredIssuerName :

Set-SPTrustedIdentityTokenIssuer -Identity $ap  -RegisteredIssuerName ""

Et cela a résolu le problème pour moi.

Je pense que pour que RegisteredIssuerName fonctionne, vous devrez peut-être ajouter une entrée issuerNameRegistry au web.config pour spécifier les émetteurs de jetons de confiance.

<issuerNameRegistry 
  type="Microsoft.IdentityModel.Tokens.ConfigurationBasedIssuerNameRegistry,
  Microsoft.IdentityModel, Version=3.5.0.0, Culture=neutral, 
  PublicKeyToken=31bf3856ad364e35">
  <trustedIssuers>
      <add thumbprint="99fcfe2c70ebb571020ca8aa1b7633dfe1fa1d58" name="http://localhost:48924/WingtipSTS/" />
  </trustedIssuers>
</issuerNameRegistry>

Source supplémentaire :https://docs.microsoft.com/en-us/previous-versions/office/developer/sharepoint-2010/ff955607(v=office.14)

Licencié sous: CC-BY-SA avec attribution
Non affilié à sharepoint.stackexchange
scroll top