Pergunta

Tenho esse problema

Nós reivindicamos um site asp.net reconhecido e um servidor adfs configurado para este site

Então, isso nós - lançamos nosso aplicativo da web - movido para autenticação no servidor adfs e voltamos para o site - como resultado, temos a página do servidor de erro com o url do nosso site

**System.NotSupportedException: The private key does not support the exchange KeySpec.
Source Error: 
An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.  
Stack Trace: 
[NotSupportedException: The private key does not support the exchange KeySpec.]
   System.IdentityModel.Tokens.X509AsymmetricSecurityKey.DecryptKey(String algorithm, Byte[] keyData) +237615
   System.IdentityModel.Selectors.SimpleTokenResolver.TryResolveSecurityKeyCore(SecurityKeyIdentifierClause keyIdentifierClause, SecurityKey& key) +378
   Microsoft.IdentityModel.Tokens.EncryptedSecurityTokenHandler.ReadToken(XmlReader reader) +253
   Microsoft.IdentityModel.Tokens.SecurityTokenHandlerCollection.ReadToken(XmlReader reader) +105
   Microsoft.IdentityModel.Web.TokenReceiver.ReadToken(String tokenXml, XmlDictionaryReaderQuotas readerQuotas) +282
   Microsoft.IdentityModel.Web.WSFederationAuthenticationModule.SignInWithResponseMessage(HttpRequest request) +312
   Microsoft.IdentityModel.Web.WSFederationAuthenticationModule.OnAuthenticateRequest(Object sender, EventArgs args) +1099462
   System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +80
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +171**

Os registros do Windows mostram que, neste momento, recebemos esse aviso - como sugeri, completamente correlacionado com o erro da página de erro do servidor

Log Name:      Application
Source:        ASP.NET 2.0.50727.0
Date:          3/23/2011 2:05:50 PM
Event ID:      1309
Task Category: Web Event
Level:         Warning
Keywords:      Classic
User:          N/A
Computer:      machine-name
Description:
Event code: 3005 
Event message: An unhandled exception has occurred. 
Event time: 3/23/2011 2:05:50 PM 
Event time (UTC): 3/23/2011 2:05:50 PM 
Event ID: 356af0be20744d15bba97111f6bbd475 
Event sequence: 7 
Event occurrence: 6 
Event detail code: 0 

Application information: 
    Application domain: /appl-domain/ClaimsAwareWebAppWithManagedSTS-1-129453622903756000 
    Trust level: Full 
    Application Virtual Path: /ClaimsAwareWebAppWithManagedSTS 
    Application Path: C:\tools\AdvantageSso\Using Managed STS\ClaimsAwareWebAppWithManagedSTS\ 
    Machine name: machine-name 

Process information: 
    Process ID: 3840 
    Process name: w3wp.exe 
    Account name: NT AUTHORITY\NETWORK SERVICE 

Exception information: 
    Exception type: NotSupportedException 
    Exception message: The private key does not support the exchange KeySpec. 

Request information: 
    Request URL: https://app-url/ClaimsAwareWebAppWithManagedSTS/default.aspx 
    Request path: /ClaimsAwareWebAppWithManagedSTS/default.aspx 
    User host address: host-name
    User:  
    Is authenticated: False 
    Authentication Type:  
    Thread account name: NT AUTHORITY\NETWORK SERVICE 

Thread information: 
    Thread ID: 10 
    Thread account name: NT AUTHORITY\NETWORK SERVICE 
    Is impersonating: False 
    Stack trace:    at System.IdentityModel.Tokens.X509AsymmetricSecurityKey.DecryptKey(String algorithm, Byte[] keyData)
   at System.IdentityModel.Selectors.SecurityTokenResolver.SimpleTokenResolver.TryResolveSecurityKeyCore(SecurityKeyIdentifierClause keyIdentifierClause, SecurityKey& key)
   at Microsoft.IdentityModel.Tokens.EncryptedSecurityTokenHandler.ReadToken(XmlReader reader)
   at Microsoft.IdentityModel.Tokens.SecurityTokenHandlerCollection.ReadToken(XmlReader reader)
   at Microsoft.IdentityModel.Web.TokenReceiver.ReadToken(String tokenXml, XmlDictionaryReaderQuotas readerQuotas)
   at Microsoft.IdentityModel.Web.WSFederationAuthenticationModule.SignInWithResponseMessage(HttpRequest request)
   at Microsoft.IdentityModel.Web.WSFederationAuthenticationModule.OnAuthenticateRequest(Object sender, EventArgs args)
   at System.Web.HttpApplication.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
   at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

Parte com usuário vazio e IsAuthenticated= false é muito confusa ... Isso significa que não passamos na autenticação ob ADFS ou mostra os resultados atuais do site solicitado

Então, infelizmente, não sou um grande especialista nessa área e estou lutando contra isso durante a semana

Alguém poderia me ajudar a resolver o problema?

Muito obrigado

Foi útil?

Solução

O que parece acontecer aqui é que sua confiança de parte confiável no AD FS está configurada para criptografar seus tokens usando (a parte pública de) algum certificado. Ele faz isso e seu aplicativo da web tenta descriptografá-los usando a chave privada desse mesmo certificado.

No entanto, o certificado precisa ser compatível com 'troca de chaves' e, pela sua mensagem de erro, parece que a sua não. Não tenho ideia de onde você tirou seu certificado, mas se você está criando programaticamente por meio do Windows COM usando IX509Inscrição , então você precisa definir o KeySpec para o IX509PrivateKey para XCN_AT_KEYEXCHANGE .

Outra coisa que você precisa fazer da maneira certa é se certificar de que o certificado suporta 'assinatura de documento'. Para isso, certifique-se de que IX509ExtensionEnhancedKeyUsage contém XCN_OID_KP_DOCUMENT_SIGNING ou 1.3.6.1.4.1.311.10.3.12.

Além disso, os nomes das classes COM por trás das interfaces COM acima estão documentados no página IX509EnrollmentWebClassFactory :: CreateObject .

Outras dicas

Você também deve verificar se o usuário (serviço) que endereça o certificado tem direitos suficientes na máquina local para acessar os certificados.Esse era o meu problema.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top