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

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

  • 我正在寻找一些指导/方向如何进行。如果我自己完全处理登录顺序,是否可以根据我的解决方案进行类似处理,等等。

    任何帮助表示赞赏。

    最佳答案

    经过一番挖掘后:

    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使用不同的值。

    您可以做的是通过将acr_values和idp添加到您的第一个重定向中并将idp设置为winauth外部idp的名称来强制用户首先尝试winauth。参见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
    

    09-12 03:49