【问题标题】:Azure App Service authorization/easy auth is conflicting ASP.NET Forms authAzure 应用服务授权/简单身份验证与 ASP.NET 表单身份验证冲突
【发布时间】:2020-08-07 13:23:57
【问题描述】:

我想启用应用服务身份验证以保护开发环境免受公共访问。 应用服务身份验证本身工作正常,只允许来自我们公司 Azure AD 的人员,一切都很好。

但它与网站本身的身份验证冲突,通过 Azure AD 进行身份验证后,网站将您视为您已经登录。 而且我不明白它到底是如何发生冲突的,我们正在使用表单身份验证,我尝试明确命名表单身份验证应该查找的 cookie,并将其设置为始终使用 cookie 进行身份验证,但它仍然存在冲突。

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

通过 microsoft 登录后,我看到没有 .ASPXAUTH cookie,只有 AppServiceAuthSession,但 Forms auth 认为我已登录。

【问题讨论】:

  • 您的用户是否在特定网络上?您可以通过使用应用服务中的网络规则保护您的应用来避免此问题,而不是在顶部添加 Azure AD。 (请参阅 Azure 门户 -> AppService -> 网络 -> 访问限制)。使用 AD 和表单身份验证进行两级身份验证似乎很困难。请参阅mvolo.com/…(您需要切换顺序 - 先是广告页面,然后是表单)

标签: asp.net-mvc azure azure-web-app-service forms-authentication


【解决方案1】:

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

https://www.tutorialsteacher.com/core/how-to-add-custom-middleware-aspnet-core

【讨论】:

  • 我希望它能够在不改变服务器上的授权机制的情况下工作。例如。我们有一个受简单身份验证保护的 php 仪表板,可以按预期工作 - 使用 microsoft 登录以访问网站本身,然后通过其自己的机制登录到 php 仪表板。不幸的是,对于 ASP.NET,它似乎互相妨碍了。
  • 您介意首先解释一下为什么它会发生冲突吗?据我了解,Forms 身份验证应该基于 .ASPXAUTH cookie 对我进行身份验证,这就是它的配置。然而,在通过简单身份验证后,没有 cookie,网站仍然认为我已通过身份验证。例如在那个 php 网站中,我可以清楚地看到一个负责登录的 cookie,如果我删除它,它会将我从仪表板中注销,但我仍然在该网站上,因为我仍然通过简单身份验证登录.
  • 根据经验,这种冲突的产生是由于 ASP .Net 框架设置的优先级以及缺乏围绕多个身份验证设置的逻辑。在您的情况下,AD 身份验证是在启动文件中设置的,而表单身份验证是在 Web.config 中声明的。那么,ASP .net 运行时如何知道这些是串联的还是一个优先于另一个?我不确定我们是否可以按照您的方式做到这一点。因此,OWIN 中间件风格变得流行起来,它可以让您对请求管道进行细粒度控制,并在您的情况下轻松调试多身份验证设置。希望这是有道理的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-12
  • 2012-03-15
  • 1970-01-01
  • 2010-11-25
  • 1970-01-01
  • 2011-09-27
相关资源
最近更新 更多