Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.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 Azure应用程序服务授权/简易身份验证与ASP.NET表单身份验证冲突_Asp.net Mvc_Azure_Azure Web App Service_Forms Authentication - Fatal编程技术网

Asp.net mvc Azure应用程序服务授权/简易身份验证与ASP.NET表单身份验证冲突

Asp.net mvc Azure应用程序服务授权/简易身份验证与ASP.NET表单身份验证冲突,asp.net-mvc,azure,azure-web-app-service,forms-authentication,Asp.net Mvc,Azure,Azure Web App Service,Forms Authentication,我想启用应用程序服务身份验证,以保护开发环境不受公共访问。 应用服务认证本身工作正常,只允许来自我们公司Azure广告的人员使用,一切正常 但这与网站本身的身份验证相冲突,通过Azure广告进行身份验证后,网站会看到您已经登录。 我不明白它到底是如何产生冲突的,我们正在使用表单身份验证,我尝试显式地命名Forms auth应该查找的cookie,并将其设置为始终使用cookies进行身份验证,但它仍然存在冲突 <authentication mode="Forms">

我想启用应用程序服务身份验证,以保护开发环境不受公共访问。 应用服务认证本身工作正常,只允许来自我们公司Azure广告的人员使用,一切正常

但这与网站本身的身份验证相冲突,通过Azure广告进行身份验证后,网站会看到您已经登录。 我不明白它到底是如何产生冲突的,我们正在使用表单身份验证,我尝试显式地命名Forms auth应该查找的cookie,并将其设置为始终使用cookies进行身份验证,但它仍然存在冲突

 <authentication mode="Forms">
      <forms name=".ASPXAUTH" loginUrl="~/sign-in" timeout="2880" requireSSL="true" cookieless="UseCookies" />
 </authentication>


通过microsoft登录后,我发现没有.ASPXAUTH cookie,只有AppServiceAuthSession,但Forms auth将我视为已登录。

我认为您可以通过删除web.config中的auth设置来解决此问题,并在对网站本身进行身份验证之前使用OWIN注入中间件(CustomMiddleware)。如果用户通过了CustomMiddleware的身份验证,则可以继续使用常规流,否则会使请求流短路。在CustomMiddleware中,您可以检查请求头、主体等以获得经过身份验证的cookie等。我猜您的应用程序中有MVC风格的管道。互联网上有很多资源,你可以浏览。下面是一个例子


您的用户是否在特定网络上?通过在应用程序服务中使用网络规则保护应用程序,而不是在顶部添加Azure广告,您可以避免此问题。(请参阅Azure门户->应用服务->网络->访问限制)。使用AD和表单身份验证实现两级身份验证似乎很难。请看(您需要切换顺序-首先是广告页面,然后是表单),我希望它能够在不更改服务器上的授权机制的情况下工作。例如,我们有一个由easy auth保护的php仪表板,它可以按预期的方式工作-登录microsoft访问网站本身,然后通过自己的机制登录php仪表板。不幸的是,在ASP.NET中,它似乎互相妨碍。您介意首先解释一下它为什么会冲突吗?根据我的理解,表单身份验证应该基于.ASPXAUTH cookie对我进行身份验证,这就是它的配置。然而,在通过easy auth进行身份验证后,没有cookie,网站仍然认为我是经过身份验证的。例如,在那个php网站上,我可以清楚地看到一个负责登录的cookie,如果我删除它,它会将我从仪表板上注销,但我仍然在该网站上,因为我仍然通过easy auth登录。根据经验,这种冲突是由于ASP.Net framework设置的优先级以及在多个身份验证设置中缺少逻辑造成的。在本例中,AD Auth在启动文件中设置,而Forms Auth在Web.config中声明。那么,ASP.net运行时如何知道它们是串联的还是一个优先于另一个呢?我不确定我们是否能用你的方式做到这一点。因此,OWIN中间件风格已经很流行,它使您能够对请求管道进行细粒度控制,并且在您的案例中易于调试多身份验证设置。希望这是有道理的。