多个 Api 资源

Multiple Api Resource

计划设置一个 IdentityServer 并将其配置为多个资源,例如:

internal static IEnumerable<ApiResource> GetApiResources()
{
        return new List<ApiResource>
        {
            new ApiResource()
            {
                Name = "API 1",
                DisplayName = "API 1",
                Description = "API 1 Access",
                Scopes = new List<Scope>()
                {
                    new Scope("public"), new Scope("write")
                }
            },
            new ApiResource
            {
                Name = "API 2",
                DisplayName = "API 2",
                Description = "API 2 Access",
                Scopes = new List<Scope>
                {
                    new Scope("public"), new Scope("write")
                }
            }
        };
}

那么客户端 1 将只能访问 API 1,客户端 2 将只能访问 API 2。两个客户端都将具有 public 范围。

像上面这样的东西会起作用还是我应该更改范围的名称并使其对于每个 API 资源都是唯一的?

将 1 个 Identity/Authorization 服务器用于多个 API 服务器是个坏主意吗?

此设计的主要问题是客户端 1 和客户端 2 在其不记名令牌中都具有相同的范围。也就是说,两个客户端都可以访问 API 资源。你可以通过 API 做这样的事情来 "namespace" 你的示波器:

internal static IEnumerable<ApiResource> GetApiResources()
{
        return new List<ApiResource>
        {
            new ApiResource()
            {
                Name = "API 1",
                DisplayName = "API 1",
                Description = "API 1 Access",
                Scopes = new List<Scope>()
                {
                    new Scope("api1.public"), new Scope("api1.write")
                }
            },
            new ApiResource
            {
                Name = "API 2",
                DisplayName = "API 2",
                Description = "API 2 Access",
                Scopes = new List<Scope>
                {
                    new Scope("api2.public"), new Scope("api2.write")
                }
            }
        };
}

话虽如此,为多个 APIs/Resources 使用 1 个授权服务器并没有错。将 1 个授权服务器用于多个 API 是将您的授权问题分离到身份服务器的优势之一。