IdentityServer 中的动态声明

Danamic Claims in IdentityServer

我正在查看 AspNetIdentity_2fa 示例并尝试对其进行修改以包含一些针对用户的动态声明。我们将其命名为 calculated_value 声明,它是在用户通过身份验证时动态创建的,然后包含在用户的声明列表中并与身份验证令牌一起传递。我知道我可以创建一个单独的 Web API 来获取此值,但由于它是小数据并且一旦用户通过身份验证就需要它,我想我只是将其作为声明传递。在示例中,我看到声明总是来自静态或硬编码数据。我如何创建 dynamic/late-bound 声明?

谢谢!

前段时间我花了一些时间尝试将 Identity Server v3 与 Active Directory 集成。我想通过 AD 对用户进行身份验证并从 AD 读取 "claims"。为此,我提供了 IUserService 的自定义实现。它或多或少基于这些接口的内存实现,即 InMemoryUserService.

当您的自定义实现准备就绪后,您必须注册它。但是,AspNetIdentity_2fa 示例项目已经注册了 IUserService 的自定义实现,即 UserService(只需搜索此 class 的项目)。它派生自 AspNetIdentityUserService,它实现了 IUserService

因此,与其提供全新的实现,不如尝试修改它。我认为您应该查看 AuthenticateLocalAsyncAuthenticateExternalAsyncGetProfileDataAsync 方法(参见 InMemoryUserService 以供参考)并覆盖它们。前 2 个用于对用户进行身份验证,最后一个用于读取用户请求的声明。