Невозможно создать алгоритм с именем 'http://www.w3.org/2000/09/xmldsig#hmac-sha1' - PullRequest
0 голосов
/ 19 октября 2018

Я получаю следующую ошибку в некоторых серверах после успешной аутентификации пользователя из ADFS.

[ArgumentException: ID6037: Cannot create algorithm with name 'http://www.w3.org/2000/09/xmldsig#hmac-sha1'.
Parameter name: algorithm]
Microsoft.IdentityModel.Algorithms.NewDefaultEncryption() +170
Microsoft.IdentityModel.Web.RsaEncryptionCookieTransform.Encode(Byte[] value) +204
Microsoft.IdentityModel.Tokens.SessionSecurityTokenHandler.ApplyTransforms(Byte[] cookie, Boolean outbound) +47
Microsoft.IdentityModel.Tokens.SessionSecurityTokenHandler.WriteToken(XmlWriter writer, SecurityToken token) +449      Microsoft.IdentityModel.Tokens.SessionSecurityTokenHandler.WriteToken(SessionSecurityToken sessionToken) +84
Microsoft.IdentityModel.Web.SessionAuthenticationModule.WriteSessionTokenToCookie(SessionSecurityToken sessionToken) +123
....

На наших серверах разработки и промежуточного уровня она работает нормально.Но это не работает на некоторых других серверах и производственных серверах.Я использую следующий код для проблемы с файлом cookie сеанса пользователя DPAPI.

    void OnServiceConfigurationCreated(object sender, ServiceConfigurationCreatedEventArgs e)
    {
        var sessionTransforms = new List<CookieTransform>(new CookieTransform[]{
            new DeflateCookieTransform(),
            new RsaEncryptionCookieTransform(e.ServiceConfiguration.ServiceCertificate),
            new RsaSignatureCookieTransform(e.ServiceConfiguration.ServiceCertificate)
        });
        var readOnlyTransforms = sessionTransforms.AsReadOnly();
        var sessionHandler = new SessionSecurityTokenHandler(readOnlyTransforms);
        e.ServiceConfiguration.SecurityTokenHandlers.AddOrReplace(sessionHandler);
    }

Я пытался использовать для этого сертификат SHA256, и все же я получил ту же ошибку.

1 Ответ

0 голосов
/ 31 октября 2018

После стольких исследований сработало предложение одного из моих друзей.Я использовал следующий код в Global.asax.cs

protected void Application_Start(object sender, EventArgs e)
    {    
        //Certificate
        FederatedAuthentication.ServiceConfigurationCreated += OnServiceConfigurationCreated;
    }


    void OnServiceConfigurationCreated(object sender, ServiceConfigurationCreatedEventArgs e)
    {
        var sessionTransforms = new List<CookieTransform>(new CookieTransform[]{
            new DeflateCookieTransform(),
            new RsaEncryptionCookieTransform(e.ServiceConfiguration.ServiceCertificate),
            new RsaSignatureCookieTransform(e.ServiceConfiguration.ServiceCertificate)
        });
        var readOnlyTransforms = sessionTransforms.AsReadOnly();
        var sessionHandler = new SessionSecurityTokenHandler(readOnlyTransforms);
        e.ServiceConfiguration.SecurityTokenHandlers.AddOrReplace(sessionHandler);
    }

Проблема заключалась в следующей строке,

 new RsaEncryptionCookieTransform(e.ServiceConfiguration.ServiceCertificate),

В соответствии с MSDN мы можем использовать RsaSignatureCookieTransform вместо этогогде SHA-256 не поддерживается.Поэтому мы использовали следующую строку вместо RsaSignatureCookieTransform.

new RsaSha1SignatureCookieTransform(e.ServiceConfiguration.ServiceCertificate),

Это решило нашу проблему.

...