Я использую Owin для аутентификации JWT.Все мои запросы возвращаются как «401 Unauthorized».
Я пытаюсь перехватить все запросы к моему веб-приложению, чтобы я мог получить токен JWT из cookie.
Добавление авторизацииЗаголовок с токеном на предъявителя работает и правильно авторизуется.
Промежуточное программное обеспечение срабатывает при каждом запросе, успешно захватывает cookie и успешно обновляет заголовок (в объекте контекста).
public void Configuration(IAppBuilder app)
{
app.UseJwtBearerAuthentication(new JwtBearerAuthenticationOptions
{
TokenValidationParameters = new TokenValidationParameters
{
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(jwtSecret)),
ValidateLifetime = true
}
});
app.Use(typeof(JWTMiddleware));
var config = new HttpConfiguration();
WebApiConfig.Register(config);
app.UseWebApi(config);
}
public class JWTMiddleware: OwinMiddleware
{
public JWTMiddleware(OwinMiddleware next): base(next)
{
}
public override async Task Invoke(IOwinContext context)
{
var name = "auth";
var cookie = context.Request.Cookies[name];
if (cookie != null)
{
if (string.IsNullOrEmpty(context.Request.Headers.Get("Authorization")))
{
context.Request.Headers.Append("Authorization", "Bearer " + cookie);
}
}
await Next.Invoke(context);
}
}
Идеальный рабочий процесс:
Cookie (который содержит JWT) отправляется с запросом
Промежуточное программное обеспечение Owin перехватывает это, извлекает токен из cookie и добавляет заголовок авторизации
API-вызов аутентифицируется с заголовком носителя авторизации.
Если кому-то любопытно, почему я это делаю ... так, чтобы мой веб-сайт мог использовать куки-файлы только для http для хранения токена, а затем с устройств, где нужен токен на предъявителя, я могу просто отправить этовместо этого.
Вместо этого я просто всегда получаю 401 несанкционированный.Я подозреваю, что он пытается аутентифицировать токен до того, как его перехватит Овин?Я не уверен.