我想只使用一个identityserver4 applcation来保护我的所有API。
我的第一个资源api和客户端应用程序:
我的第二个资源api和应用程序:
我的其他资源api和应用程序:
我想只创建一个IdentityServer4并保护我的reousrces( DashboardApi,HumanResourceApi,CustomerManagementApi ),我希望将我的客户端应用程序保存在相同的IdentityServer4应用程序中。
这可能吗?我应该在identityserver上创建不同的ApiResources和Scopes吗?我怎么能这样做?
答案 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"
}
};
}