Как вручную авторизовать неявный тип предоставления IdentityServer4 с помощью dotnetify? - PullRequest
0 голосов
/ 03 февраля 2019

Я пытаюсь реализовать ядро ​​.net для сервера чата WebAPi + SignalR с клиентом vue.js.

Хотя я могу найти много ссылок, используя SignalR и IdentityServer4, я нашел эту полезную библиотеку под названием dotnetify.Автор doetnetify описывает, как реализовать защищенную страницу с помощью ASOS http://dotnetify.net/core/api/security. Но я застрял при проверке с помощью JwtsecurityTokenHandler.

Я попытался заменить серверную часть аутентификации, которая реализована с помощью ASOS с IdentityServer4, и скопировал все пользовательскиеРеализация этого автора обеспечена.Но когда токен на предъявителя передается моему API чата, возникает исключение при проверке токена с помощью tokenValidationParameters, которые я вручную изменил.

Настройки моего проекта указаны ниже.IdentityServer4 со следующими настройками apis и клиента.

Настройка API:

    return new List<ApiResource>
    {
        new ApiResource("api1", "API1" ),
        new ApiResource("chatapi", "Chat API")
    };

Настройка клиента:

    return new List<Client>
    {
        new Client
        {
            ClientId = "client",
            ClientName = "JavaScript Client",
            AllowedGrantTypes = GrantTypes.Implicit,
            AllowAccessTokensViaBrowser = true,

            RequireConsent = false,

            RedirectUris =           { "http://localhost:8080/callback" },
            PostLogoutRedirectUris = { "http://localhost:8080/login" },
            AllowedCorsOrigins =     { "http://localhost:8080" },

            AllowedScopes =
            {
                IdentityServerConstants.StandardScopes.OpenId,
                IdentityServerConstants.StandardScopes.Profile,
                IdentityServerConstants.StandardScopes.Email,
                "api1",
                "chatapi"
            }
        },

    }

Пример реализации, предоставленный dotnetify author: statup.cs https://github.com/dsuryd/dotNetify/blob/master/DevApp/server/Startup.cs AddAuthenticationServer.cs https://github.com/dsuryd/dotNetify/blob/master/DevApp/server/AuthServer.cs

Я удалил services.AddAuthenticationServer () и заменил на AddAuthentication («Носитель») IdentityServer4, как показано ниже.

services.AddAuthentication("Bearer")
        .AddIdentityServerAuthentication(options =>
        {
            options.Authority = "https:/localhost:5000";
            options.RequireHttpsMetadata = false;

            options.ApiName = "chatapi";
        });

services.AddCors(options =>
{
    // this defines a CORS policy called "default"
    options.AddPolicy("default", policy =>
    {
        policy.WithOrigins("http://localhost:8080", 
        Configuration["ClientAddress"])
            .AllowAnyHeader()
            .AllowAnyMethod();
    });
});

и на Configure, Iскопировал пример и изменил tokenValidationParameters, как показано ниже.

    app.UseWebSockets();
    app.UseSignalR(routes => routes.MapDotNetifyHub());
    app.UseDotNetify(config =>
    {
        var tokenValidationParameters = new TokenValidationParameters {
            ValidateIssuer = true,
            ValidIssuer = "https://localhost:5000",
            ValidAudience = "chatapi",
        };

        config.UseFilter<AuthorizeFilter>();
        config.UseJwtBearerAuthentication(tokenValidationParameters);

        config.UseMiddleware<ExtractAccessTokenMiddleware>(tokenValidationParameters);

        // Demonstration filter that passes access token from the middleware to the ViewModels.SecurePageVM class instance.
        config.UseFilter<SetAccessTokenFilter>();
    });

Исключение составляет, как показано ниже.

Microsoft.IdentityModel.Tokens.SecurityTokenSignatureKeyNotFoundException: IDX10501: Signature validation failed. Unable to match keys:
    kid: '[PII is hidden]',
    token: '[PII is hidden]'.
       at System.IdentityModel.Tokens.Jwt.JwtSecurityTokenHandler.ValidateSignature(String token, TokenValidationParameters validationParameters)
       at System.IdentityModel.Tokens.Jwt.JwtSecurityTokenHandler.ValidateToken(String token, TokenValidationParameters validationParameters, SecurityToken& validatedToken)
       at Foresting.Chat.ExamplePipelines.ExtractAccessTokenMiddleware.ValidateToken(HeaderData headers, SecurityToken& validatedToken) in C:\GitHub\ChatApi\ChatApi\ExamplePipelines\ExtractAccessTokenMiddleware.cs:line 46
       at ChatApi.ExamplePipelines.ExtractAccessTokenMiddleware.Invoke(DotNetifyHubContext hubContext, NextDelegate next) in C:\GitHub\ChatApi\ChatApi\ExamplePipelines\ExtractAccessTokenMiddleware.cs:line 27

Я подозреваю, что мой tokenValidationParameter установлен неправильно, но не знаю, как правильно его установить, ипроверьте его.

Пытался понять поток oid / oauth, но он кажется слишком сложным, чтобы понять и решить мою проблему в ограниченное время.

Может кто-нибудь помочь мне, где искать, чтобы решить эту проблемувопрос?

Заранее спасибо.

...