使用identityserver4保护多个Apis

时间:2018-04-02 19:07:37

标签: identityserver4 identityserver3

我想只使用一个identityserver4 applcation来保护我的所有API。

我的第一个资源api和客户端应用程序:

  • CustomerManagementApi
  • CustomerManagement.JavascriptApplication
  • CustomerManagement.iOSApp
  • CustomerManagement.AndroidApp

我的第二个资源api和应用程序:

  • HumanResourceApi
  • HumanResource.MVCApplication

我的其他资源api和应用程序:

  • DashboardApi
  • Dashboard.AngularApplication

我想只创建一个IdentityServer4并保护我的reousrces( DashboardApi,HumanResourceApi,CustomerManagementApi ),我希望将我的客户端应用程序保存在相同的IdentityServer4应用程序中。

这可能吗?我应该在identityserver上创建不同的ApiResources和Scopes吗?我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

是的,这是可能的,因为IdentityServer4使您可以定义Resource Apis,客户端应用程序,用户,范围,并且可以在内存数据中配置这些数据以用于初始测试,甚至可以用于其他存储机制,例如Entity Framework。

在这里进行解释并不容易,但是在官方documentation中,您可以通过一些快速入门来了解更多信息。

您可以在上面看到一些用于Resource Apis,客户端应用程序,内存中用户的配置示例(使用Config.cs类),以使您了解如何轻松启动:

资源Apis:客户端希望访问的受保护的api

   public static IEnumerable<ApiResource> GetApis()
   {
        return new List<ApiResource>
        {
            new ApiResource("CustomerManagementApi", "My CustomerManagementApi"),
            new ApiResource("DashboardApi", "My DashboardApi"),
            // others ...
        };
   }

客户端:想要访问Resource Apis的应用程序

public static IEnumerable<Client> GetClients()
{
    return new List<Client>
    {
        new Client
        {
            ClientId = "client",

            // no interactive user, use the clientid/secret for authentication
            AllowedGrantTypes = GrantTypes.ClientCredentials,

            // secret for authentication
            ClientSecrets =
            {
                new Secret("secret".Sha256())
            },

            // scopes that client has access to
            AllowedScopes = { "CustomerManagementApi" }
        }
    };
}

用户:希望访问某些资源的最终用户

public static List<TestUser> GetUsers()
{
    return new List<TestUser>
    {
        new TestUser
        {
            SubjectId = "1",
            Username = "alice",
            Password = "password"
        },
        new TestUser
        {
            SubjectId = "2",
            Username = "bob",
            Password = "password"
        }
    };
}