我们正在为我们的应用程序使用Microsoft Owin身份验证,该应用程序将用户重定向到Azure Active Directory登录页面。成功登录后,将显示我们的应用程序主页。
这几次都没有任何问题。但是,经过几次尝试后,如果我再次尝试登录,则单击“Azure Active Directory登录页面”的“登录”按钮后,它将不会重定向到我们的主页。它加载一个空白页面,它永远不会完成加载,它会被挂起。地址栏显示我们的主页和天蓝色登录页面的请求切换。
以下是用于登录的代码:
public void SignIn()
{
if (!Request.IsAuthenticated)
{
HttpContext.GetOwinContext().Authentication.Challenge(new AuthenticationProperties { RedirectUri = "/Home/Index" }, OpenIdConnectAuthenticationDefaults.AuthenticationType);
}
}
更新 1:
面对新问题:
你好Vittorio,
谢谢!为你的共鸣。 正如您所提到的,在删除Authorize属性后,它在本地工作正常(来自sourcecode)。但是,一旦我们将其部署到azure,经过几次登录尝试,我们面临着一个不同的问题,在这里,我们根本不允许登录。由于身份验证失败并且重定向到错误页面(自定义页面),用户详细信息未加载。
以下是我们用于获取用户详细信息的一段代码,但是,很多时候我们进入ELSE部分(claimsIdentity.IsAuthenticated返回FALSE)。
var claimsIdentity = User.Identity as ClaimsIdentity;
if (claimsIdentity.IsAuthenticated) {
accesstoken = claimsIdentity.FindAll("urn:accesstoken:access_token").FirstOrDefault().Value;
domainname = claimsIdentity.FindAll("urn:appdomain:domain").FirstOrDefault().Value;
} else {
return RedirectToAction("Error", "Home");
}
如果我们遗漏了任何内容,请告诉我们。
答案 0 :(得分:2)
从您的描述中看起来您正在经历一个循环,其中流程不断转到Azure AD并返回到您的应用程序。那是对的吗? 通常,当您尝试访问需要身份验证/授权的一个资源(例如,通过[授权]修饰)并且您有一些状态会自动使用不满足资源的访问控制要求的用户对您进行身份验证时,会发生这种情况。另一个重定向并触发一个新的循环。
要寻找的东西:
如果这解决了,请告诉我们! HTH 诉
答案 1 :(得分:0)
原因是Owin在不同的位置存储cookie,而System.Web存放在不同的位置。
在OWIN中,响应头集合是响应cookie的主存储位置。但是,System.Web将响应cookie存储在单独的HttpContext.Response.Cookies集合中,然后在发送响应之前将它们写入Response.Headers集合。如果两个方法都在同一个请求上使用,那么这可能会导致冲突,因为Response.Cookies集合将覆盖通过OWIN响应头设置的任何cookie。
有关详细信息,请参阅this。
重新配置CookieAuthenticationMiddleware直接写入System.Web的cookie集合