Authentication IdentityServer-用于身份验证的AD和DB中的其余部分

Authentication IdentityServer-用于身份验证的AD和DB中的其余部分,authentication,active-directory,identity,identityserver3,Authentication,Active Directory,Identity,Identityserver3,我已经设置了一个基本的IdentityServer,它正在运行。我使用Identity Manager和Identity Admin将所有内容(用户、角色、声明、客户端、范围)保存在数据库中。下一步是将身份验证与AD集成。我的要求是: 用户将根据AD进行身份验证 用户权限(声明/角色)将存储在数据库中(与现在一样) 根据客户端应用程序的不同,我有三种不同的场景: 在某些情况下,应该使用当前用户的身份(我想要使其工作,identity Server应该使用Windows身份验证运行)。不应提示

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

  • 用户将根据AD进行身份验证
  • 用户权限(声明/角色)将存储在数据库中(与现在一样)
  • 根据客户端应用程序的不同,我有三种不同的场景:
    • 在某些情况下,应该使用当前用户的身份(我想要使其工作,identity Server应该使用Windows身份验证运行)。不应提示用户进行任何操作
    • 在某些情况下,用户必须显式登录。他可以使用当前登录名或
    • 手动输入将根据AD验证的用户名和密码
我在寻找一些前进的方向。我是否应该自己处理完整的登录序列,是否有类似的解决方案,等等


非常感谢您的帮助。

在四处挖掘之后:

在idsrv中,演示如何在单独的web应用中运行windows authn,以及如何使用ws-fed委托给该web应用。这一点在中也有解释

演示如何配置adfs以允许idsrv作为依赖方,以及如何使用ws-fed委托给adfs以允许在adfs上使用用户名/密码登录

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

您可以强制用户首先尝试winauth,方法是将acr_值和idp添加到第一个重定向中,并将idp设置为winauth外部idp的名称。看

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

如果出于某种原因,您确实到达了登录页面,那么您可以(不显示用户名/密码输入字段),并且外部提供程序(winauth和ADF)默认情况下仅显示为按钮


编辑:

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

我不清楚你所说的“他可以使用当前登录名”是什么意思@stomber任何用户都将使用广告登录名登录Windows,我想使用该登录名。好的,我稍微整理了一下我的答案以使其更清晰。我实际上使用了除winauth外部idp和失败时自动重定向之外的大多数登录名,但这些示例似乎合法谢谢你。这很有用,但我仍然不清楚整个流程。我的理解是,我必须创建另一个使用Windows auth运行的web应用程序,它将承载IdSrv WinAuth组件(我们称之为WinAuthHost)。对于最终用户,流程将是:客户端应用程序->IdSrv登录->WinAuthHost->ADFS->WinAuthHost->IdSrv->客户端应用程序。是吗?另外,我不知道你说的“如果失败了,你可以使用这种技术来检测从外部winauth提供程序登录失败并自动重定向到adfs提供程序”是什么意思?我想用户登录只使用广告…如果失败,用户不应该登录。如果您的用户没有登录到机器上的Windows或不是正确的域名,那么WinAuthHost将不会向IDSRV发出令牌,IDSRV将认为此外部身份验证尝试失败。在这种情况下,您可以检测到该尝试失败,而不是重定向回客户端应用程序,使用另一个外部idp(adfs idp.Thanx)进行另一次身份验证尝试…还不完全清楚,但这是一个很好的起点。最后一个问题:WinAuthHost将只检查当前用户身份,对吗?如果用户未登录域(或者在我的情况下,如果用户必须显式登录客户端应用),该尝试将失败,替代方法是通过ADFS进行身份验证?