Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 4 尝试登录后的Owin和katana应用程序。ClaimSideEntity被验证为FALSE_Asp.net Mvc 4_Azure_Owin_Katana_Claims - Fatal编程技术网

Asp.net mvc 4 尝试登录后的Owin和katana应用程序。ClaimSideEntity被验证为FALSE

Asp.net mvc 4 尝试登录后的Owin和katana应用程序。ClaimSideEntity被验证为FALSE,asp.net-mvc-4,azure,owin,katana,claims,Asp.net Mvc 4,Azure,Owin,Katana,Claims,我们正在为应用程序使用Microsoft Owin身份验证,它将用户重定向到Azure Active Directory登录页面。成功登录后,将显示应用程序的主页 这将在几次没有任何问题的情况下工作。然而,在几次尝试之后,如果我再次尝试登录,在单击登录按钮(Azure Active Directory登录页面)之后,它不会被重定向到我们的主页。它加载了一个空白页,但从未完成加载,并且被挂起。地址栏显示请求与我们的主页和azure登录页的切换 以下是用于登录的代码: public void Si

我们正在为应用程序使用Microsoft Owin身份验证,它将用户重定向到Azure Active Directory登录页面。成功登录后,将显示应用程序的主页

这将在几次没有任何问题的情况下工作。然而,在几次尝试之后,如果我再次尝试登录,在单击登录按钮(Azure Active Directory登录页面)之后,它不会被重定向到我们的主页。它加载了一个空白页,但从未完成加载,并且被挂起。地址栏显示请求与我们的主页和azure登录页的切换

以下是用于登录的代码:

 public void SignIn()
 {
     if (!Request.IsAuthenticated)
     {
         HttpContext.GetOwinContext().Authentication.Challenge(new AuthenticationProperties { RedirectUri = "/Home/Index" }, OpenIdConnectAuthenticationDefaults.AuthenticationType);
     }
 }
更新1:

面临新问题:

你好,维托里奥,

谢谢!!!谢谢你的回复。 正如您所提到的,在删除Authorize属性后,它在本地(从源代码)工作正常。然而,一旦我们将其部署到azure,在尝试几次登录之后,我们将面临一个不同的问题,在这里,我们根本不允许登录。由于身份验证失败并重定向到错误页面(自定义页面),因此未加载用户详细信息

下面是我们用来获取用户详细信息的一段代码,但是,很多时候我们会进入其他部分(claimsIdentity.IsAuthenticated返回FALSE)


如果我们遗漏了什么,请告诉我们。

从您的描述来看,您似乎正在经历一个循环,在这个循环中,流量不断地流向Azure广告并返回到您的应用程序。对吗? 通常,当您试图访问一个需要身份验证/授权的资源(例如,通过[授权]装饰)时,会发生这种情况,并且您的某些状态会自动向不满足该资源访问控制要求的用户进行身份验证,从而导致另一个重定向并触发新的周期

要寻找的东西:

  • 使用[Authorize()]修饰的资源。您可能拥有不满足条件的用户的有效令牌。解决方案:实现一个自定义过滤器,针对授权问题返回403而不是401
  • 当您登录应用程序时,您从Azure AD注销,并从另一个目录与另一个Azure AD用户登录。如果您需要能够做到这一点,您可能应该将您的中间件设置为被动(通过AuthenticationMode=AuthenticationMode.passive),以便401不会自动触发到Azure AD的往返。请注意,这可能也适用于上述情况
让我们知道这是否解决! 嗯
V.

原因是Owin在不同的位置存储cookie,System.Web在不同的位置存储cookie

在OWIN中,响应标头集合是响应cookie的主要存储位置。然而,System.Web将响应cookie存储在单独的HttpContext.response.cookies集合中,然后在发送响应之前将其写入response.Headers集合。如果OWIN和响应在同一请求上使用这两种方法,则这可能会导致冲突。Cookie集合将覆盖通过OWIN响应头设置的任何Cookie

有关详细信息,请参阅


重新配置CookieAuthenticationMiddleware以直接写入系统。Web的cookie集合

删除授权属性后,它在本地工作正常。但是,一旦我们将其部署到azure,在尝试几次登录后,我们将面临一个不同的问题,其中,我们根本不允许登录。由于身份验证失败并重定向到错误页面(自定义页面),因此无法加载用户详细信息。下面是我们用于获取用户详细信息的代码段,但是,很多时候我们会进入其他部分。var claimsIdentity=User.Identity作为claimsIdentity;if(claimsIdentity.IsAuthenticated){….}else{return RedirectToAction(“Error”,“Home”);}
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");
}