Ответ 1
Изменить: эта ошибка была исправлена в ASP.NET Core RC2, и обходной путь, описанный в этом ответе, больше не нужен.
Примечание. Это обходное решение не будет работать в ASP.NET 5 RC1, из-за этой другой ошибки. Вы можете либо перейти на ночные сборки RC2, либо создать собственное промежуточное программное обеспечение, которое улавливает исключения, выданные промежуточным программным обеспечением JWT-носителя, и возвращает ответ 401:
app.Use(next => async context => {
try {
await next(context);
}
catch {
// If the headers have already been sent, you can't replace the status code.
// In this case, throw an exception to close the connection.
if (context.Response.HasStarted) {
throw;
}
context.Response.StatusCode = 401;
}
});
К сожалению, в настоящее время по умолчанию используется промежуточное ПО-носитель JWT/OAuth2 (управляемое MSFT), но оно должно быть в конечном итоге исправлено. Вы можете увидеть этот билет GitHub для получения дополнительной информации: https://github.com/aspnet/Security/issues/411
К счастью, вы можете "легко" обойти это, используя уведомление AuthenticationFailed
:
app.UseOAuthBearerAuthentication(options => {
options.Notifications = new OAuthBearerAuthenticationNotifications {
AuthenticationFailed = notification => {
notification.HandleResponse();
return Task.FromResult<object>(null);
}
};
});