Pregunta

Estoy intentando resolver este problema por un tiempo sin suerte, es posible que alguien con más experiencia en Sharepoint pueda identificar mi problema.

El seguimiento de pila de excepciones en los registros de Sharepoint se ve así:

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)

Miré el código descompilado y se ve así:

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

Entonces parece que el token de seguridad recibido y los certificados del proveedor de acceso no coinciden.Fui más allá, hice un volcado de memoria, lo cargué en windbg e intenté encontrar qué certificado tiene el proveedor de acceso, no estoy seguro de si estaba buscando en el lugar correcto, pero si lo estaba, entonces tenía un certificado incorrecto: su asunto era CN=SharePoint Security Token Service, OU=SharePoint, O=Microsoft, C=US, claramente no el mío configurado.

Estaba registrando mi proveedor de identidad así:

$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

También he registrado el certificado con New-SPTrustedRootAuthority.

¿Fue útil?

Solución

Encontré el problema accidentalmente, mirando lo que podría haber hecho mal.
estaba buscando Tutorial de reclamaciones y noté que registran al emisor del token usando código C#, así que decidieron hacer lo mismo y usaron el dominio del proveedor "https://intranet.contoso.com/_trust/", así que lo cambié para tener mi dominio, dejando la parte "_trust" y comenzó a funcionar, por lo que la excepción en los registros fue muy engañosa.

Después de esto encontré entrada en el blog con el mismo problema, preguntándome por qué no lo había notado antes.

Otros consejos

Estaba siguiendo algunas instrucciones de este enlace:https://support.microsoft.com/en-us/help/3042604/the-convert-spwebapplication-command-cannot-convert-from-windows-claim

Usó el siguiente formato para el comando New-SPTrustedIdentityTokenIssuer:

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

No estaba seguro de qué poner para RegisteredIssuerName y anteriormente lo había dejado en blanco cuando estaba funcionando, pero en este caso lo configuré igual que $tokenIdentityProviderName.

Después de eso, comencé a recibir el error "El emisor del token no es un emisor confiable".

Borré el valor de RegisteredIssuerName:

Set-SPTrustedIdentityTokenIssuer -Identity $ap  -RegisteredIssuerName ""

Y eso resolvió el problema para mí.

Creo que para que RegisteredIssuerName funcione, es posible que deba agregar una entrada de IssuerNameRegistry a web.config para especificar emisores de tokens confiables.

<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>

Fuente adicional:https://docs.microsoft.com/en-us/previous-versions/office/developer/sharepoint-2010/ff955607(v=office.14)

Licenciado bajo: CC-BY-SA con atribución
scroll top