2017-01-30 65 views
0

我们在Windows Server 2012 R2上运行ADFS 3,并使用C#ADAL库v3从ADFS中为我们的自定义.NET应用程序检索身份验证令牌。无论客户端应用程序是.NET应用程序还是ReactJS应用程序,该想法都是使用ADFS为我们的用户提供AD身份验证,以使用相同的Web标准方法来访问我们的.NET Core Web API。为什么使用ADAL进行ADFS身份验证永远不需要用户输入凭据?

这些应用程序是内部LOB应用程序,所有用户都是使用应用程序时通过Windows登录到AD的内部企业用户。身份验证似乎正在调用ADFS,并为调用用户提供JWT令牌,并且该令牌已成功通过Web API进行检查。

我担心的是,当为Web API触发身份验证时,浏览器窗口会闪烁但不会暂停以强制用户进行身份验证 - ADFS只会为用户响应一个令牌。我希望用户不得不用他们的用户名和密码进行身份验证,至少第一次和密码更改后立即进行身份验证。

这是预期的行为,为什么? This answer是一个不同的问题,但意味着在这种情况下将使用集成Windows身份验证(IWA),除非ADFS配置为强制基于窗体的身份验证(FBA)。

任何人都可以确认这是发生了什么?

谢谢, 彼得

+0

您可以简单地使用Telerik Fiddler来检查HTTP请求中的授权标头以确认。 –

回答

1

如果您正在运行在域环境中ADFS服务器(我想你这样做,因为ADFS是那种只有Windows十岁上下的)。然后,您的用户正在通过Kerberos体验SingleSignOn。

那么实际上发生的事情是这样的:

  • 用户浏览器(UA =用户代理)打开
  • UA负荷ADFS,提供它的user-agent头
  • AD FS嗅着那报头配置的值(PS> Get-ADFSProperties获取更多信息)
  • AD FS发现IE或任何其他支持WIA的浏览器(您也可以使Chrome和FF工作)
  • AD FS启动与UA的Kerberos协商
  • AD FS问题用户票证

您可以强制用户通过设置适当的政策或AD FS禁用WIA进行身份验证,(启用FBA,否则您将无法使用任何方法进行验证)。
您也可以通过WAP代理呼叫AD FS - 这也将强制FBA(假设您没有设备认证)

不过 - 您为什么要在ADFS中重新认证用户?他已经将密码提供给了他所坐的Windows机器 - 如果你强制执行,你会失去一个很好且顺畅的单点登录体验。通过再次询问用户,您不会获得任何收益。如果你想“更安全”推出双因素认证。 AD FS 2016为此提供了模块。

更新 - 只为其他人清理:
如果浏览器不支持WIA,AD FS应该自动回退到FBA(如果未另行配置)。

+0

谢谢托马斯,那几乎是我以为发生的事情。我使用ADFS的原因是我们将在Linux服务器上运行我们的.NET Core API,所以如果后端正常的Windows没有IIS,SSO将无法工作。我很高兴WIA将使ADFS登录更流畅。我们也可能在未来转而支持不同的认证服务。 – Peter

+0

对不起 - 我的最后一段是关于“为什么要重新验证它们” - 而不是“为什么要使用AD FS”。我认为ADFS为WS-Fed,SAML和Basic OIDC情景做了很好的工作。 – TGlatzer

+0

我明白了。这是因为我不想依赖将Windows两端都安装到我的基础架构中。 – Peter

相关问题