asp.net ошибка идентификации при входе в систему-обратный вызов

#reactjs #asp.net-identity #identityserver4

#reactjs #asp.net-identity #identityserver4

Вопрос:

У меня есть мой API, приложение react spa в одном проекте, и я интегрирую asp.net идентичность в одном и том же проекте. Я собрал его, и все работает, когда я перехожу на страницы идентификации. Если я перейду в Identity / Account / Login, я могу зарегистрироваться и войти в систему для пользователя просто отлично. Однако, когда я пытаюсь войти в систему с одной из своих страниц, я получаю следующую ошибку после входа в систему-обратный вызов при доступе https://localhost:44393/connect/token

 System.NotSupportedException: IDX10634: Unable to create the SignatureProvider.
Algorithm: 'System.String', SecurityKey: 'Microsoft.IdentityModel.Tokens.X509SecurityKey'
 is not supported. The list of supported algorithms is available here: https://aka.ms/IdentityModel/supported-algorithms
   at Microsoft.IdentityModel.Tokens.CryptoProviderFactory.CreateSignatureProvider(SecurityKey key, String algorithm, Boolean willCreateSignatures, Boolean cacheProvider)
   at Microsoft.IdentityModel.Tokens.CryptoProviderFactory.CreateForSigning(SecurityKey key, String algorithm, Boolean cacheProvider)
   at Microsoft.IdentityModel.Tokens.CryptoProviderFactory.CreateForSigning(SecurityKey key, String algorithm)
   at Microsoft.IdentityModel.JsonWebTokens.JwtTokenUtilities.CreateEncodedSignature(String input, SigningCredentials signingCredentials)
   at System.IdentityModel.Tokens.Jwt.JwtSecurityTokenHandler.WriteToken(SecurityToken token)
   at IdentityServer4.Services.DefaultTokenCreationService.CreateJwtAsync(JwtSecurityToken jwt)
   at IdentityServer4.Services.DefaultTokenCreationService.CreateTokenAsync(Token token)
   at IdentityServer4.Services.DefaultTokenService.CreateSecurityTokenAsync(Token token)
   at IdentityServer4.ResponseHandling.TokenResponseGenerator.CreateAccessTokenAsync(ValidatedTokenRequest request)
   at IdentityServer4.ResponseHandling.TokenResponseGenerator.ProcessAuthorizationCodeRequestAsync(TokenRequestValidationResult request)
   at IdentityServer4.ResponseHandling.TokenResponseGenerator.ProcessAsync(TokenRequestValidationResult request)
   at IdentityServer4.Endpoints.TokenEndpoint.ProcessTokenRequestAsync(HttpContext context)
   at IdentityServer4.Endpoints.TokenEndpoint.ProcessAsync(HttpContext context)
   at IdentityServer4.Hosting.IdentityServerMiddleware.Invoke(HttpContext context, IEndpointRouter router, IUserSession session, IEventService events, IBackChannelLogoutService backChannelLogoutService)
   at IdentityServer4.Hosting.IdentityServerMiddleware.Invoke(HttpContext context, IEndpointRouter router, IUserSession session, IEventService events, IBackChannelLogoutService backChannelLogoutService)
   at IdentityServer4.Hosting.MutualTlsEndpointMiddleware.Invoke(HttpContext context, IAuthenticationSchemeProvider schemes)
   at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context)
   at IdentityServer4.Hosting.BaseUrlMiddleware.Invoke(HttpContext context)
   at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context)
   at Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext context)
 

Я завернул свой маршрут в компонент AuthorizeRoute по умолчанию следующим образом :

 <AuthorizeRoute path="/Settings" render={(props) => (<SettingsMenu {...props} cloud={this.state.cloud} evaluation={this.state.evaluation}/>)} />
 

и в противном случае не изменили код со страниц identity react.

Я предполагаю, что мне чего-то не хватает в моей конфигурации. Но я создал образец проекта identityreact, и, похоже, он работает нормально. Любые указатели будут оценены.

Ответ №1:

В журнале написано

 Algorithm: 'System.String',
 

Это похоже на ошибку, какой алгоритм вы пытаетесь использовать?

Алгоритм должен быть одним из перечисленных здесь

Чтобы создать ключ подписи, вы обычно используете инструмент командной строки openssl для генерации ключа подписи, а также переносите его в файл .pkcs12 / .pfx. Если вы используете Azure Key Vault, он также может сгенерировать его для вас. Добавление и импорт ключа в IdentityServer может быть сложным.

Обычно я использую этот код для импорта ключа в .NET:

     private static SecurityKey LoadEcdsaKey()
    {
        var ecdsaCert = new X509Certificate2("es256.pfx", "mypassword");
        SecurityKey ecdsaPrivateKey = new ECDsaSecurityKey(ecdsaCert.GetECDsaPrivateKey());
        return ecdsaPrivateKey;
    }
 

Смотрите Эту статью о том, как использовать openssl:

Комментарии:

1. Мне было интересно, как бы я установил алгоритм. Я использую nugets идентификатора и просматриваю образец проекта (который работает) Я не мог найти нигде, чтобы установить алгоритм.

2. Итак, я понял, что если я использую ключ разработки, все работает правильно. Если я установлю для него самостоятельно созданный ключ, используя приведенный ниже код, он завершится с ошибкой: « var ecdsa = ECDsa.Create(); // сгенерировать асимметричную пару ключей var req = new CertificateRequest(«cn =PhoenixTest», ecdsa, HashAlgorithmName.SHA256); var cert = req. CreateSelfSigned(DateTimeOffset . Теперь, DateTimeOffset.Now.AddYears(5)); «