多个Api资源

时间:2017-01-24 06:29:52

标签: identityserver3 identityserver4

计划设置一个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。两个客户都将拥有公共范围。

上述内容是否有效或是否应更改范围的名称并使其对每个API资源都是唯一的?

对多个API使用1个身份/授权服务器是个坏主意吗?

1 个答案:

答案 0 :(得分:2)

此设计的主要问题是客户端1和客户端2在其承载令牌中都具有相同的范围。即两个客户端都可以访问任一API资源。你可以&#34;命名空间&#34;你的范围由API做这样的事情:

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")
                }
            }
        };
}

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