【问题标题】:Best practice for Active Directory user management with IdentityServer使用 IdentityServer 管理 Active Directory 用户的最佳实践
【发布时间】:2020-02-03 03:11:23
【问题描述】:

使用 IdentityServer4 和 Active Directory 进行用户管理的推荐方法是什么?

我已经开始使用 IdentityServer4 ASP.NET Core 交互式快速入门,一切运行良好。但是,示例代码使用了TestUserStoreTestUserProfileService 等,替换它们的使用似乎是谨慎的。

“现实世界”的替代方案似乎是使用 ASP.NET Core Identity,但这会将用户详细信息保存到 IdentityServer 数据库中。鉴于 IdentityServer 不是这些数据的真实来源,这很奇怪。

除了快速入门课程的“测试”性质外,这些课程还可以很好地满足我们的需求。我们的 IdentityServer 实例适用于小型组织的内部员工,因此这些存储的内存性质不是问题。

这似乎是一个相当常见的用例,所以我一定遗漏了一些东西。可以将所有用户配置文件调用委托给 Active Directory 吗?是否有任何开箱即用的代码?

【问题讨论】:

    标签: asp.net-core active-directory asp.net-identity identityserver4


    【解决方案1】:
    1. Identity Server 是 OAuth 2.0 和 OpenIDConnect(基于 OAuth2.0 构建)的实现。 OAuth 2.0的重点是基于Access Token对WebApi等资源进行保护。那么 OAuth 2.0 提供的就是授权。
    2. Identity Server 可以提供 ASP.NET Core Identity 提供的 Authenticate 服务,在This Document 中指定

    在您的情况下,您希望将身份验证部分委托给 AD,将授权部分委托给 Identity Server。您可以参考This document 在您的 asp.net 核心应用程序中启用 windows 身份验证

    【讨论】:

    • 大家都明白,不是我的问题。 AD 已执行身份验证,IdentityServer 已执行授权。我的问题是更换 Test* 课程。如果从 QuickStart 中删除它们,则身份令牌中不存在任何身份声明。
    • 具体来说,当 AddTestUsers() 被删除时,外部 AD 身份验证工作,但不存在身份声明。除了添加内存用户存储之外,此方法还添加了IProfileService 的测试实现。开箱即用,有一个默认配置文件服务以及一个 ASP.NET 身份配置文件服务。我假设我需要提供某种方式的 AD 配置文件服务。我的问题是这是否真的需要手动滚动,或者我是否解决了错误的问题。
    • 参见快速入门中的ExternalController,特别是AutoProvisionUser()FindByExternalProvider()
    【解决方案2】:

    我通过为 Active Directory 实施和注册 IProfileService 解决了这个问题。它仍然看起来很奇怪,但似乎可以解决问题。

    【讨论】:

    • 我正在研究通过连接到本地 AD 来提供身份验证的解决方案。您能否分享有关您的实施的详细信息。
    • 这是一个工作项目,所以不能真正分享代码。您需要实现IProfileService,并将其与.AddProfileService<T>() 一起实现IIdentityServerBuilder。在GetProfileDataAsync()中,我通过SID(context.Subject.GetSubjectId())检索用户,从用户(given_name等)创建一个声明集合,然后设置context.IssuedClaims。然后我调用context.LogIssuedClaims进行故障排除。希望这会有所帮助!
    猜你喜欢
    • 2019-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-11
    • 2018-10-04
    • 1970-01-01
    • 2016-04-17
    • 1970-01-01
    相关资源
    最近更新 更多