在我的MVC Core项目中,在针对Azure AD进行身份验证后,我检查用户数据库中是否存在用户。如果用户不存在,我想抛出异常并重定向到我的主页/错误页面。
相反,OnAuthenticationFailed
中的重定向代码会导致重定向循环并最终退出并显示错误:
错误请求 - 请求太长HTTP错误400.请求的大小 标题太长了。
app.UseExceptionHandler("/Home/Error");
app.UseCookieAuthentication();
app.UseOpenIdConnectAuthentication(new OpenIdConnectOptions
{
...
Events = new OpenIdConnectEvents()
{
OnAuthorizationCodeReceived = async (context) =>
{
...
upn = identity.FindFirst(ClaimTypes.Upn).Value;
MyDbContext db =
new MyDbContext(Configuration.GetConnectionString("DefaultConnection"));
if (db.Users.FirstOrDefault(b => (b.UPN == upn)) == null)
{
throw new System.IdentityModel.Tokens.SecurityTokenValidationException("You are not registered to use this application.");
}
},
OnAuthenticationFailed = (context) =>
{
context.Response.Redirect("/Home/Error");
context.HandleResponse();
return Task.FromResult(0);
}
}
});
更新
这已经解决了。默认情况下,HomeController
在整个类上设置了[Authroize]
属性,因此重定向无法在未经过身份验证的情况下达到Error
操作。