IdentityServer - 用于身份验证的 AD 和数据库中的其余部分
IdentityServer - AD for authentication and the rest in DB
我已经设置了一个基本的 IdentityServer,它已经启动并且 运行正在运行。我正在使用 Identity Manager 和 Identity Admin 将所有内容(用户、角色、声明、客户端、范围)保存在数据库中。下一步是将身份验证与 AD 集成。我的要求是:
- 用户将根据 AD
进行身份验证
- 用户权限(claims/roles)将存储在数据库中(与现在一样)
- 根据客户端应用程序,我有三种不同的场景:
- 在某些情况下,应该使用当前用户的身份(我想为了这个工作,Identity Server 应该 运行 和 Windows 身份验证)。不应提示用户输入任何内容。
- 在某些情况下,用户必须明确登录。他可以使用当前登录名或
- 手动输入将针对 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
我已经设置了一个基本的 IdentityServer,它已经启动并且 运行正在运行。我正在使用 Identity Manager 和 Identity Admin 将所有内容(用户、角色、声明、客户端、范围)保存在数据库中。下一步是将身份验证与 AD 集成。我的要求是:
- 用户将根据 AD 进行身份验证
- 用户权限(claims/roles)将存储在数据库中(与现在一样)
- 根据客户端应用程序,我有三种不同的场景:
- 在某些情况下,应该使用当前用户的身份(我想为了这个工作,Identity Server 应该 运行 和 Windows 身份验证)。不应提示用户输入任何内容。
- 在某些情况下,用户必须明确登录。他可以使用当前登录名或
- 手动输入将针对 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