AspNetCore OpenIdConnect错误处理

时间:2016-11-18 18:06:43

标签: asp.net-core-mvc openid-connect azure-active-directory

在我的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操作。

0 个答案:

没有答案