计划设置一个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个身份/授权服务器是个坏主意吗?
答案 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个授权服务器是将授权问题分离到身份服务器的优势之一。