Несанкционированный, даже когда промежуточное ПО возвращает AuthenticateResult.Success - PullRequest
0 голосов
/ 23 сентября 2019

Я создал промежуточное ПО, которое настраивает аутентификацию с использованием токена JWT.В файле startup.cs -

services.AddAuthentication(BearerDefaults.AuthenticationScheme)
            .AddMyBearer(opt =>
            {
                opt.TokenValidationUrl = Configuration[SettingsKey.ApiBaseUri] + "/oauth/validatetoken?version=1";
                opt.UserTokenCookieName = Configuration[SettingsKey.UserTokenCookieName];
                opt.SubscriptionKey = Configuration[SettingsKey.SubscriptionKey];
                opt.Issuer = Configuration[SettingsKey.ApplicationUID];
                opt.AuthorizeAllRequests = Convert.ToBoolean(Configuration[SettingsKey.AuthorizeAllRequests]);
                opt.AuthenticationScheme = BearerDefaults.AuthenticationScheme;
            });

Класс расширения содержит следующий код -

return authBuilder.AddScheme<AuthenticationOptions, AuthHandler>(BearerDefaults.AuthenticationScheme, configureOptions);

Ниже приведена часть возврата в методе HandleAuthenticateAsync -

var identity = new ClaimsIdentity(claims);
var principal = new ClaimsPrincipal(identity);
AuthenticationTicket authenticationTicket = new AuthenticationTicket(principal, Options.AuthenticationScheme);
return AuthenticateResult.Success(authenticationTicket);

Я проверил, что список заявок содержит все требуемые точки останова для претензий на return AuthenticateResult.Success.Однако даже после этого контроллер возвращает значение Unauthorized, если оно имеет атрибут [Authorize].

1 Ответ

0 голосов
/ 24 сентября 2019

Проблема заключалась в том, что ClaimsIdentity не установил для свойства IsAuthenticated Identity значение True.Вместо этого мне пришлось использовать GenericIdentity() и добавить претензии позже.Этот подход работал нормально.

...