我是identityserver4的新手,但之前使用过identityserver3。有一些名为IdentityResource
和ApiResource
的新配置。但示例应用程序不再包含Scope
。 Scope
,IdentityResource
和ApiResource
答案 0 :(得分:0)
根据术语改变所有内容的主要原因 - 更好的对象模型。什么是范围 - 客户想要访问的资源。但是范围也有两种类型:身份相关和API,它们有点重叠。所以在这里他们决定稍微改变一下并将它们分开(进入资源)。
根据身份服务器的作者之一(文章here):
您希望使用IdentityServer保护资源 - 用户的身份数据(如用户ID,姓名,电子邮件..)或API。
身份资源
标准范围以前定义如下:
public static IEnumerable<Scope> GetScopes()
{
return new List<Scope>
{
StandardScopes.OpenId,
StandardScopes.Profile
};
}
..现在:
public static IEnumerable<IdentityResource> GetIdentityResources()
{
return new List<IdentityResource>
{
new IdentityResources.OpenId(),
new IdentityResources.Profile()
};
}
定义一个自定义的:
var customerProfile = new IdentityResource(
name: "profile.customer",
displayName: "Customer profile",
claimTypes: new[] { "name", "status", "location" });
API资源
在:
public static IEnumerable<Scope> GetScopes()
{
return new List<Scope>
{
new Scope
{
Name = "api1",
DisplayName = "My API #1",
Type = ScopeType.Resource
}
};
}
现在:
public static IEnumerable<ApiResource> GetApis()
{
return new[]
{
new ApiResource("api1", "My API #1")
};
}
在本文中对此进行了解释,但主要思想是 - 当涉及到身份(声明主体)时使用身份资源,以及API资源 - 当API请求某个客户端必须< / strong>拥有一定的API资源来访问此API。
一开始有点混乱,但是在你自己尝试之后,这很有道理。祝你好运