IdentityServer - AD用于身份验证,其余用于DB

时间:2017-05-23 16:19:01

标签: authentication active-directory identity identityserver3

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

  • 用户将通过AD
  • 进行身份验证
  • 用户权限(声明/角色)将存储在数据库中(现在就是)
  • 根据客户端应用程序的不同,我有三种不同的场景:
    • 在某些情况下,应该使用当前用户的身份(我猜这是为了工作,Identity Server应该使用Windows身份验证运行)。不应提示用户提供任何内容。
    • 在某些情况下,用户必须明确登录。他可以使用当前登录或
    • 手动输入将针对AD进行验证的用户名和密码。

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

感谢任何帮助。

1 个答案:

答案 0 :(得分:3)

经过一番挖掘:

idsrv中的

This example显示了如何在单独的Web应用程序中运行Windows authn以及如何使用ws-fed委派给该Web应用程序。这也在this issue中解释。

This blog post by scott brady显示如何配置adfs以允许idsrv作为依赖方以及如何使用ws-fed委托adfs以允许在adfs上登录用户名/密码

如果您同时使用这些ws-fed委派,请确保为authenticationtype使用不同的值。

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

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

如果由于某种原因你到达登录页面,你可以disable local login(不显示用户名/密码输入字段),默认情况下外部提供商(winauth和adfs)将显示为按钮。< / p>

编辑:

是的,您可以在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