IdentityServer4在分布式应用程序场景中存储和访问用户凭证

时间:2019-04-24 23:42:18

标签: c# .net-core identityserver4

由于没有IdentityServer论坛或我找不到论坛,所以我尝试在此处找到答案。

我认为我可以在我的一个项目中使用IdentityServer。但是似乎我在理解自己的用途和设计时遇到了问题。

我查看了IdentityServer快速入门,并使用经过身份验证的应用程序理解并测试了该示例。在该示例中,注册了客户端以使用客户端机密访问API。

{
    return new[]
    {
        // client credentials flow client
        new client
        {
            ClientId = "client",
            ClientName = "Client Credentials Client",

            AllowedGrantTypes = GrantTypes.ClientCredentials,
            ClientSecrets = { new Secret("511536EF-F270-4058-80CA-1C89C192F69A".Sha256()) },

            AllowedScopes = { "LicenseAPI" }
        },
    }
}

我的目标是在dotnet核心中重写我的不同网站(主页,商店,博客等),并将它们置于一个屋顶下。目前,它们在不同的系统,不同的托管者等下运行。

我想拥有一个中央应用程序(主页)(例如,作为MVC Web App),用户可以在其中注册和登录并实现所有其他网站作为Web API,这些Web API是从中央应用程序调用的。我希望拥有单独的应用程序,以便能够分别维护它们。

  • 中央MVC或JS应用程序(主页)
  • Web API(商店)
  • Web API(博客)
  • Web API(...)
  • Web API(IdentityServer)

在调用Web API时,我想使用IdentityServer作为已注册和授权用户的身份验证。在我的设计愿景中作为一项单独的服务。另外,我想使用dotnet核心IdentityUser。

我现在的理解问题是我的用户数据存储在哪里?据我了解,用户注册并登录到我计划的中央应用程序(主页),并且此数据存储在该应用程序的数据库中。但是,单独的IdentityServer服务如何从我的用户那里学习以及如何访问他们?例如,它如何访问声明等?他使用相同的数据库吗?

例如,我需要IdentityServer发送带有令牌的其他信息(声明)。例如,用户ID(由我自己在Web API的请求中使用,或者IdentityServer与令牌中的ID一起发送的请求)由API来请求。

就像第一个Quickstarts一样容易理解,在处理用户凭据时,我对计划中的场景(我认为这应该很正常)的使用更加困惑。

我很高兴向正确的方向推动我。

1 个答案:

答案 0 :(得分:1)

  

我现在的理解问题是我的用户数据存储在哪里?

UserClientResource存储区实际上取决于您选择哪种方式实施。 Identity Server 4开箱即用,具有EF Core和ASP.Net Identity支持,因此,如果您选择将数据库用于持久层实现。

  

但是单独的IdentityServer服务如何向我的用户学习   以及如何访问它们?

好吧,例如,如果您选择使用ASP.NET Identity系统来进行用户管理,那么您所需要做的就是将Identity Server指向与您的用户注册Web应用程序相同的数据库(甚至可能是同样的应用)。通常,身份服务器用于用户配置文件数据和凭据验证的用户存储区必须与您选择在其上实现用户注册平台的存储区相同。

  

例如,我需要IdentityServer发送其他信息   (声称)带有令牌。

这并不是真正的问题,您可能需要实现自定义IProfileServiceGetProfileDataAsync才能控制发出的自定义声明。有关更多信息,请访问IdentityServer4 docs