是否将IdentityServer4 Scope逻辑更改为ApiResource和IdeneityResource

时间:2018-03-23 09:13:22

标签: identityserver4

我是identityserver4的新手,但之前使用过identityserver3。有一些名为IdentityResourceApiResource的新配置。但示例应用程序不再包含ScopeScopeIdentityResourceApiResource

有何区别?

1 个答案:

答案 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。

一开始有点混乱,但是在你自己尝试之后,这很有道理。祝你好运