SecurityTokenInvalidSignatureException: IDX10500: Ошибка проверки подписи.Ключи безопасности не были предоставлены для проверки подписи - PullRequest
0 голосов
/ 08 апреля 2019

Я устанавливаю OIDC для своего приложения с помощью FusionAuth (https://fusionauth.io). Я использую Microsoft.AspNetCore.Authentication.OpenIdConnect в своем основном приложении .NET. После выполнения аутентификации в FusionAuth он перенаправляет меня на /signin-oidc на моемприложение (запрос GET от поставщика услуг). Не хватает ли у меня конфигурации на стороне FusionAuth?

FusionAuth работает с: http://localhost:9011

Мое приложение: http://localhost:5000

Мое приложение перенаправляется в FusionAuth для входа в систему: http://localhost:9011/oauth2/authorize?client_id=75e33455-f1c5-4e29-8863-53ec28364839&redirect_uri=http%3A%2F%2Flocalhost%3A5000%2Fsignin-oidc&response_type=code&scope=openid%20profile&response_mode=form_post&nonce=636903160481984640.YzMwZWI3ZTEtNzAxOS00MjFhLWIyNGMtYWY5ZGNkODlkY2VjYTNhYjdjMzEtYWMxYy00YThmLWJkYWItYmFiNWY2N2JjMDVk&state=CfDJ8NIq6JMx7khEv5e0kR0710VXenotl3FeHBvCCXUYDrzRVK6Kr7d36hcNMfABQ6pQYZuZQX71QtDFnVH7AczDgHW_8MDNMLFJfy5rF4xIJu2JTPVx3DH2fRp7FOo3ILoAfJfn4b-LnD7Q7zFBx8JO872BME5NXaS6NXiRlUiQQzcb44UNxS8Yn0yVgoQUJLV-iJXCuFlDwtN2z74c8aNhEYJbMiM9GyqiprpqI3p_WocjAyvSAxc7dddkHo7uxD-pBkrldI_v8Z-kVsTwCyBCfCBpKKOIFYvLBfpBcoVjqcSYHfI9GybutW9P4MxeWc2wtykOdBiqcF18ZCN-2yqLSWE&x-client-SKU=ID_NET&x-client-ver=2.1.4.0

После входа в систему происходит перенаправление на: http://localhost:5000/signin-oidc?code=vctVvqZo9zBMHrG9TkY5PZxjW1eqVgTCWnyHY55k3cg&state=CfDJ8NIq6JMx7khEv5e0kR0710VXenotl3FeHBvCCXUYDrzRVK6Kr7d36hcNMfABQ6pQYZuZQX71QtDFnVH7AczDgHW_8MDNMLFJfy5rF4xIJu2JTPVx3DH2fRp7FOo3ILoAfJfn4b-LnD7Q7zFBx8JO872BME5NXaS6NXiRlUiQQzcb44UNxS8Yn0yVgoQUJLV-iJXCuFlDwtN2z74c8aNhEYJbMiM9GyqiprpqI3p_WocjAyvSAxc7dddkHo7uxD-pBkrldI_v8Z-kVsTwCyBCfCBpKKOIFYvLBfpBcoVjqcSYHfI9GybutW9P4MxeWc2wtykOdBiqcF18ZCN-2yqLSWE&userState=Authenticated

Я ожидаю, что войду в систему http://localhost:5000, но получаювместо следующей ошибки.

SecurityTokenInvalidSignatureException: IDX10500: Signature validation failed. No security keys were provided to validate the signature.

Ответы [ 2 ]

0 голосов
/ 09 апреля 2019

Наконец-то получили решение

services.AddOpenIdConnect(options => {
    ...
    options.TokenValidationParameters.IssuerSigningKey = new Microsoft.IdentityModel.Tokens.SymmetricSecurityKey(Encoding.ASCII.GetBytes("lOB8KJK2gKn2c6ZFJIKpVqLM-gHa6WmFvSJfHWUKscs"));
    ...
}

Я пропустил добавление ключа от FusionAuth в мое приложение, которое используется для проверки токена.

0 голосов
/ 08 апреля 2019

Похоже, что для этой библиотеки требуется открытый ключ, чтобы проверить, что JWT, который FusionAuth возвращает из конечной точки token, является действительным. Я не эксперт по DotNet, но из некоторых поисков вокруг объекта OpenIdConnectOptions вы настраиваете все для OIDC. Существует свойство под названием SecurityTokenValidator, к которому можно добавлять ключи, и это может быть лучшим местом для начала.

Другим решением было бы дать указание библиотеке ASPID Core OIDC использовать API userinfo вместо JWT, хранящегося в id_token. Это заставит DotNet перезвонить userinfo API FusionAuth, а затем FusionAuth обработает всю проверку для вас и ответит претензиями OIDC от JWT. Свойство GetClaimsFromUserInfoEndpoint объекта OpenIdConnectOptions выглядит так, как будто это позволяет. Я не мог понять, как сообщить DotNet URL userinfo API. Вот пример этой конфигурации:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)  
{

    app.UseStaticFiles();

    app.UseIdentity();

    app.UseOpenIdConnectAuthentication(new OpenIdConnectOptions
        {
            ClientId = Configuration["ClientId"],
            ClientSecret = Configuration["ClientSecret"],
            Authority = Configuration["Authority"],
            ResponseType = OpenIdConnectResponseType.Code,
            GetClaimsFromUserInfoEndpoint = true
        });

    app.UseMvc(routes =>
    {
        routes.MapRoute(
            name: "default",
            template: "{controller=Home}/{action=Index}/{id?}");
    });
}

Я получил этот код из этого поста в блоге:

https://andrewlock.net/an-introduction-to-openid-connect-in-asp-net-core/

Вам может потребоваться выполнить дополнительный поиск и чтение по интеграции DotNet OIDC, чтобы все это заработало. Там не так много информации, но несколько человек написали блоги на эту тему, которые могут помочь.

...