Asp.net mvc 5 在应用程序\u PostAuthenticateRequest中进行AAD身份验证后,无法获得正确的引用

Asp.net mvc 5 在应用程序\u PostAuthenticateRequest中进行AAD身份验证后,无法获得正确的引用,asp.net-mvc-5,azure-active-directory,Asp.net Mvc 5,Azure Active Directory,对于属于DL的某些用户,我有一个重定向场景。这是一个AAD认证的应用程序。 如果用户属于某个DL,则应加载应用程序。其他方面,用户应重定向到另一个应用程序(“”)。他必须点击另一个应用程序(“”)上的链接才能进入我的应用程序。 我把这张支票放在post_认证事件中。我查一下推荐人。如果这是一个有效的推荐人(“”),则继续。如果不是,则检查用户是否属于DL。如果用户不属于DL,则将用户重定向到“”,否则设置已验证的cookie并继续访问站点 如果用户不属于DL-第一次推荐者出现为。。。由于请求是通

对于属于DL的某些用户,我有一个重定向场景。这是一个AAD认证的应用程序。 如果用户属于某个DL,则应加载应用程序。其他方面,用户应重定向到另一个应用程序(“”)。他必须点击另一个应用程序(“”)上的链接才能进入我的应用程序。 我把这张支票放在post_认证事件中。我查一下推荐人。如果这是一个有效的推荐人(“”),则继续。如果不是,则检查用户是否属于DL。如果用户不属于DL,则将用户重定向到“”,否则设置已验证的cookie并继续访问站点

如果用户不属于DL-第一次推荐者出现为。。。由于请求是通过AD验证的,所以referer变为this,referer检查失败。然后,执行属于DL检查的用户,并重定向该用户。 但是,如果用户首先点击另一个应用程序-“”,然后点击链接进入我的应用程序,那么推荐人仍然是。。。而不是“”并且再次验证用户是否属于DL,然后重定向。现在,如果用户再次单击外部站点(“”)来访问我的站点,则推荐人将正确到达。 如何避免这种双重重定向。 我试图在会话开始时捕获推荐人,这是用户第一次通过合适的站点(“”)进入,但推荐人(“”)仅为Chrome填充。不适用于IE或Edge。 是否有任何请求属性可用于区分这两个调用?或者有没有其他办法解决这个问题

示例代码-

//这只是通过chrome获取推荐人。不在IE和Edge中工作 受保护的无效会话\u启动(对象发送方,事件参数e)

受保护的无效应用程序\u PostAuthenticateRequest(对象发送方,事件参数e) {

if (this.Request.IsAuthenticated && HttpContext.Current.Request.Cookies["Validated"] == null )
        {

            bool userinDL= true;

            //check if the referrer is correctly set do nothing
            //else check if this is a ring zero user. If not, redirect
            if ((Request.UrlReferrer == null || !Request.UrlReferrer.ToString().Contains("https://validreferrer")))
            {

                userinDL= CheckuserMembership();

                if (!userinDL)
                {

                    Response.Redirect("https://validreferrer");
                }
                else
                {
                    HttpContext.Current.Response.Cookies.Add(new HttpCookie("Validated", "true"));
                }
                 }
            }
            else
            {
                HttpContext.Current.Response.Cookies.Add(new HttpCookie("Validated", "true"));
            }
        }
    }

AFAIK,Request.urlReferer是一种不可靠的方法,因为许多代理/防火墙服务器都会剥离它 来自安全问题请求的字段

如果您的要求是,请检查该请求是否来自其他应用,并且您有权访问“”应用程序并可以修改源,则可能的解决方案是:您可以尝试将querystring变量附加到另一个应用程序的url链接,然后在当前应用程序中捕获querystring变量以区分推荐人。仅供参考

if (this.Request.IsAuthenticated && HttpContext.Current.Request.Cookies["Validated"] == null )
        {

            bool userinDL= true;

            //check if the referrer is correctly set do nothing
            //else check if this is a ring zero user. If not, redirect
            if ((Request.UrlReferrer == null || !Request.UrlReferrer.ToString().Contains("https://validreferrer")))
            {

                userinDL= CheckuserMembership();

                if (!userinDL)
                {

                    Response.Redirect("https://validreferrer");
                }
                else
                {
                    HttpContext.Current.Response.Cookies.Add(new HttpCookie("Validated", "true"));
                }
                 }
            }
            else
            {
                HttpContext.Current.Response.Cookies.Add(new HttpCookie("Validated", "true"));
            }
        }
    }