我们有一个使用 OpenIdDict 进行身份验证的 asp.net 核心 Web 应用程序。我注意到我未经身份验证的 Ajax 调用在响应正文中返回 200 和我们的登录表单。根据我的阅读,这是预期的行为,因为 OpenIdDict 处理请求,然后 ASP.NET 核心处理它并返回 200。ASP.NET 核心正在处理它,因为在 Startup.cs 中调用了“UseIdentity()”。我看到的所有 OpenIdDict 示例都称为“UseIdentity”。我有 2 个问题。
- 如果我不希望 ASP.NET 核心处理我的请求,我可以删除“UseIdentity()”吗?我试过了,现在我得到的是 401 而不是 200。这样做有什么害处吗?或者 OpenIdDict 是否需要“UseIdentity()”?
- 如果我不想失去重定向以登录 UI 视图的能力,是实现此功能以覆盖 OnRedirectToLogin 的最佳/最简单/最安全的方法吗?下面的代码示例:
options.Cookies.ApplicationCookie.Events = new CookieAuthenticationEvents
{
OnRedirectToLogin = ctx =>
{
if (ctx.Request.Path.StartsWithSegments("/api") &&
ctx.Response.StatusCode == (int) HttpStatusCode.OK)
{
ctx.Response.StatusCode = (int) HttpStatusCode.Unauthorized;
}
else
{
ctx.Response.Redirect(ctx.RedirectUri);
}
return Task.FromResult(0);
}
};
代码示例来源:https ://devblog.dymel.pl/2016/07/07/return-401-unauthorized-from-asp-net-core-api/
在这里进一步讨论这个问题:https ://github.com/aspnet/Security/issues/804