IdentityServer - 用于身份验证的 AD 和数据库中的其余部分

IdentityServer - AD for authentication and the rest in DB

我已经设置了一个基本的 IdentityServer,它已经启动并且 运行正在运行。我正在使用 Identity Manager 和 Identity Admin 将所有内容(用户、角色、声明、客户端、范围)保存在数据库中。下一步是将身份验证与 AD 集成。我的要求是:

我正在寻找一些 pointers/direction 如何进行。我是否应该自己完全处理登录序列,是否有类似的东西可以作为我的解决方案的基础,等等

感谢任何帮助。

经过一番挖掘:

This example in idsrv shows how to run windows authn in a separate web app and how to use ws-fed to delegate to that web app. This is also explained in this issue.

This blog post by scott brady 展示了如何配置 adfs 以允许 idsrv 作为依赖方,以及如何使用 ws-fed 委托给 adfs 以允许 username/password 登录 adfs

如果您同时使用这两种 ws-fed 委托,请确保对 authenticationtype 使用不同的值。

你可以做的是强制用户首先尝试 winauth,方法是将 acr_values 和 idp 添加到你的第一个重定向并将 idp 设置为 winauth 外部 idp 的名称。参见 the idsrv docs here

如果失败,您可以使用 this technique 来检测从外部 winauth 提供程序登录失败并自动重定向到 adfs 提供程序。

如果由于某种原因您确实到达了登录页面,您可以 disable local login(不显示 username/password 输入字段)并且外部提供程序(winauth 和 adfs)将默认显示作为按钮。


编辑:

是的,您可以在 idsrv 旁边添加一个额外的网络应用程序,这样可以避免 运行 idsrv 与 windows 集成身份验证

winauth 用户的流程是

client app -> IdSrv (login page) -> WinAuthHost -> IdSrv (auth endpoint)-> client app

实际上,如果成功,用户很可能只会在 WinauthHost 中看到客户端应用程序和一个屏幕,而永远不会看到 Idsrv

如果用户未登录 windows(或不正确的域),则流程将如下所示

client app -> IdSrv (login page) -> WinAuthHost ->  IdSrv login (auth endpoint, fails) 
-> ADFS ->  IdSrv login (auth endpoint) -> client app