Настройте заголовок запроса WWW-Authenticate с помощью промежуточного программного обеспечения Jwt Bearer Authentication в WebAPI

Я использую промежуточное программное обеспечение Katana JwtBearerAuthentication в проекте.NET WebAPI для защиты своего веб-API через JWT.

Итак, в моем классе Startup я просто делаю что-то простое, например:

 app.UseJwtBearerAuthentication(
            new JwtBearerAuthenticationOptions
            {
                AuthenticationMode = AuthenticationMode.Active,
                AllowedAudiences = new[] { audience },
                IssuerSecurityTokenProviders = new IIssuerSecurityTokenProvider[]
                {
                    new SymmetricKeyIssuerSecurityTokenProvider(issuer, secret)
                }
            });

Все отлично работает, за одним исключением.

Когда клиент передает неверный или отсутствующий токен Bearer, заголовок ответа WWW-Authenticate - это просто "Bearer".

Я хотел бы настроить этот заголовок так, чтобы он включал адрес моего сервера авторизации и поддерживаемые типы грантов.

Что-то вроде: WWW-Authenticate: MyAuth href=url,grant_type="Поддерживаемые-гранты" или что-то еще...

Каков наилучший способ сделать это? Я удивлен, что класс JwtBearerAuthenticationOptions не включает свойство Challenge. Я могу обойти это, но хотел знать, есть ли здесь лучшая практика с промежуточным программным обеспечением Jwt или нет.

1 ответ

Решение

Мы закончили тем, что вставили заголовок WWW-Authenticate со значениями, которые мы хотели, используя OnApplyChallenge в OAuthBearerAuthenticationProvider.

Что-то вроде:

app.UseJwtBearerAuthentication(new JwtBearerAuthenticationOptions ...
   Provider = new OAuthBearerAuthenticationProvider()....
      OnApplyChallenge = (context) => context.OwinContext.Response.Headers.AppendValue(WWWAuthenticateHeader,values)
Другие вопросы по тегам