IdentityServer 和遗留 SQL 服务器用户存储

IdentityServer and legacy SQL Server user store

几周前我发现了 OpenID Connect 和 IdentityServer V3。我 运行 提供了一些示例,今天我需要更进一步,但我不知道如何继续:

实际上我们有一个 "home made" 身份验证和授权过程,我们想转向 OpenID Connect 解决方案。 Identity Server 似乎是执行此操作的最佳人选。

今天我们的用户存储在 SQL 服务器数据库中,理想情况下我想 "connect" 这个 table 到身份服务器(不触及这个 table).我读到 "MembershipReboot" 但它使用自己的数据库。我还听说过制作自定义用户服务,但在示例 (CustomUserService) 中我没有发现任何有用的信息。今天我有点迷茫,因为我不知道该去哪里,我发现我离目标不远了。

我需要帮助

谢谢

在您提到的 Custom User Service Sample 中,它包括三种用户服务变体以显示不同的方法,但您实际上只需要其中一种。

LocalRegistrationUserService 示例中,您会发现如下行:

    public override Task AuthenticateLocalAsync(LocalAuthenticationContext context)
    {
        var user = Users.SingleOrDefault(x => x.Username == context.UserName && x.Password == context.Password);
/// snip ...

还有这些:

   public override Task GetProfileDataAsync(ProfileDataRequestContext context)
    {
        // issue the claims for the user
        var user = Users.SingleOrDefault(x => x.Subject == context.Subject.GetSubjectId());
/// snip...

您需要将那些从内存中 Users 集合中查找值的调用替换为打开与 SQL 服务器的连接并在那里查找值的调用。

请参阅 Custom User Service documentation 了解更多受支持的方法,但这两个 (AuthenticateLocalAsyncGetProfileDataAsync) 加上您的 SQL 查找是您开始所需的全部内容。