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

问题描述:

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

  • 用户将会对广告进行身份验证
  • 用户权限(索赔/角色)将被存储在数据库中(像现在这样)
  • 根据不同的客户端应用程序,我有三个不同场景:
    • 在某些情况下,应该使用当前用户的身份(我猜这是可行的,Identity Server应该使用Windows身份验证运行)。用户不应该被提示任何事情。
    • 在某些情况下,用户必须明确登录。他可以使用当前的登录名或
    • 手动输入将根据AD进行验证的用户名和密码。

我正在寻找一些指针/方向如何进行。我应该自己处理完整的登录顺序,是否有类似的东西可以根据我的解决方案等。

任何帮助表示赞赏。

+0

我不清楚你的意思是“他可以使用当前登录” – stombeur

+0

@stombeur任何用户将通过AD登录在Windows中登录,我想使用该登录。 – Albert

+0

好的,我清理了我的答案一点,以使其更清楚 – stombeur

一些周围挖掘后:

This example在idsrv显示如何运行在单独的Web应用程序,以及如何使用WS-送入委派到Web应用程序authn窗口。这也在this issue中解释。

This blog post by scott brady展示了如何ADFS配置为允许idsrv依赖方和如何委派与WS-美联储ADFS允许在ADFS

用户名/密码登录如果使用这两个WS-美联储代表团,使确保为认证类型使用不同的值。

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

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

如果由于某种原因您确实到达了登录页面,您可以disable local login(不显示用户名/密码输入字段),并且默认情况下外部提供者(winauth和adfs)会显示为按钮。


编辑:

是的,你会增加旁边idsrv额外的Web应用程序,这避免了与Windows集成身份验证运行idsrv

与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 
+0

我实际上使用了大多数除了winauth外部idp和自动重定向失败,但这些示例似乎合法 – stombeur

+0

谢谢。这很有用,但我仍然不清楚整体流程。我的理解是,我将不得不创建另一个使用Windows身份验证运行的Web应用程序,它将托管IdSrv WinAuth组件(我们称之为WinAuthHost)。对于最终用户,流程将为: 客户端应用程序 - > IdSrv登录 - > WinAuthHost - > ADFS - > WinAuthHost - > IdSrv - >客户端应用程序。 是吗? – Albert

+0

另外,我不确定你的意思是“如果失败了,你可以使用这种技术来检测从外部winauth提供者登录失败并自动重定向到adfs提供者。”?我希望用户仅使用AD登录...如果失败,用户不应登录。你能澄清吗? – Albert