Настройте заголовок запроса 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)