Авторизация токена на предъявителя в защищенном контроллере ASP.NET Core 2 MVC - PullRequest
0 голосов
/ 04 декабря 2018

У нас есть проект ASP.NET Core 2 MVC, который использует IdentityServer4 для защиты своих страниц.Обычные контроллеры перенаправляют на сервер идентификации, когда не прошли проверку подлинности, что является ожидаемым поведением.То, что я пытаюсь включить, - это чтобы метод открытого контроллера вызывался неподписанным пользователем с помощью токена доступа, который предоставляется тем же сервером идентификации для вызывающей стороны.Если у пользователя есть действительный токен доступа, метод должен функционировать регулярно, если не выдает ошибку 401 или что-то в этом роде.

Проблема в том, что даже если метод вызывается с допустимым токеном доступа с использованием Authorization: Bearer заголовок просто перенаправляется в IdentityServer.Можно ли добиться того, что я пытаюсь сделать?Нужно ли определять другую схему авторизации для этого метода или что-то в этом роде?

Вот конфигурация OIDC:

void oidcOptions(OpenIdConnectOptions options)
            {
                options.SignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;

                options.Authority = openIdSettings.StsAuthority;
                options.RequireHttpsMetadata = openIdSettings.DiscoveryEndpointRequiresHttps;

                options.ClientId = openIdSettings.ClientId;
                options.ClientSecret = openIdSettings.ClientSecret;

                options.ResponseType = "code id_token";
                options.SaveTokens = true;
                options.UseTokenLifetime = true;

                options.TokenValidationParameters = new Microsoft.IdentityModel.Tokens.TokenValidationParameters
                {
                    NameClaimType = ClaimTypes.Name,
                    RoleClaimType = ClaimTypes.Role,
                };

                options.Scope.Remove("profile");

                foreach (string scope in openIdSettings.Scopes)
                {
                    options.Scope.Add(scope.Trim());
                }
            }

            services.AddAuthentication(options =>
            {
                options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
                options.DefaultChallengeScheme = AuthenticationConstants.SigninScheme;
            })
            .AddCookie(options =>
            {
                options.Cookie.Name = CookieAuthenticationDefaults.AuthenticationScheme;
            })
            .AddOpenIdConnect(AuthenticationConstants.SigninScheme, oidcOptions);

1 Ответ

0 голосов
/ 05 декабря 2018

Я решил добавить новую схему аутентификации, используя AddJwtBearer("token_scheme"..) в качестве дополнения к существующим схемам и указав схему аутентификации в методе, используя [Authorize(AuthenticationSchemes = "token_scheme")].

...