为什么使用 ADAL 的 ADFS 身份验证从不要求用户输入凭据?

Why does ADFS authentication using ADAL never require the user to enter credentials?

我们在 Windows Server 2012 R2 上使用 运行 ADFS 3,并使用 C# ADAL 库 v3 从 ADFS 为我们的自定义 .NET 应用程序检索身份验证令牌。这个想法是使用 ADFS 使用相同的 Web 标准方法向我们的 .NET Core Web API 提供用户的 AD 身份验证,无论客户端应用程序是 .NET 应用程序还是 ReactJS 应用程序。

应用为内部LOB应用,所有用户均为企业内部用户,使用该应用时通过Windows登录AD。身份验证似乎有效,因为调用了 ADFS 并为调用用户提供了 JWT 令牌,并且 Web 已成功检查该令牌 API。

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

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

谁能确认这是怎么回事?

谢谢, 彼得

如果您是域环境中的 运行 ADFS 服务器(我想您是这样做的,因为 ADFS 有点像 Windows-only-ish)。那么您的用户将通过 Kerberos 体验 SingleSignOn。

所以本质上发生的是以下情况:

  • 用户浏览器(UA = 用户代理)打开
  • UA 加载 ADFS,前提是它 user-agent-header
  • AD FS 嗅探 header 配置值(PS> Get-ADFSProperties 了解更多信息)
  • AD FS 可以看到 IE 或任何其他 WIA-enabled 浏览器(您也可以让 Chrome 和 FF 工作)
  • AD FS 启动与 UA 的 Kerberos 协商
  • AD FS 签发用户票证

您可以强制用户进行身份验证,方法是设置适当的策略或在 AD FS 上禁用 WIA(启用 FBA,否则您将不会使用任何方法进行身份验证)。
您还可以通过 WAP 代理调用 AD FS - 这也会强制 FBA(假设您没有设备身份验证)

尽管如此 - 为什么要在 ADFS 中重新验证用户?他已经向他所在的 windows 机器提供了他的密码——如果你强制重新授权,你会失去一个很好的和流畅的 single-sign-on 体验。再次询问用户不会有任何收获。如果你想要它 "more secure" 推出双因素身份验证。 AD FS 2016 有相应的模块。

更新 - 只是为了让其他人明白:
如果浏览器不支持 WIA,AD FS 应该自动 fall-back 到 FBA(如果没有另外配置)!