我们有一个使用OpenIdDict进行身份验证的asp.net核心Web应用程序。我注意到,我未经身份验证的Ajax调用返回了200以及我们的登录表单。从我读过的这是预期的行为,因为OpenIdDict处理请求,然后ASP.NET核心处理它并返回200. ASP.NET核心处理它,因为在Startup.cs中调用'UseIdentity()'。我所见过的所有OpenIdDict实例都调用了'UseIdentity'。我有2个问题。使用openIdDict我们必须在Startup.cs中使用'UseIdentity()'吗?
- 如果我不想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
这很好。谢谢! – Bloodhound
您是否有示例项目或指南,可以使用Core 2.0和OpenIdDict 2.x做同样的事情? – Bloodhound
所有OpenIddict示例已更新为2.x:https:// github。COM/openiddict/openiddict样本。遗憾的是,2.x中不再支持基于路径的身份验证中间件选择,并且推荐使用'[Authorize(AuthenticationSchemes =“Bearer”)]方法。阅读https://github.com/aspnet/Announcements/issues/262了解更多信息。 – Pinpoint