ApiResource returns "invalid_scope" 身份服务器

ApiResource returns "invalid_scope" identityserver

我正在 razor 页面应用程序中实现 Identity Server。

请求 speech Api 资源时,身份服务器 returns“invalid_scope”。我的理解是资源是一组范围。所以,我期待身份服务器 return 语音资源中定义的范围。 注意:我将 speech 添加为 ApiScope 它工作正常但它不会添加 speech.synthesizepayment.subscription 范围。

这是我定义 Api范围的方式:

public static IEnumerable<ApiScope> ApiScopes =>
        new List<ApiScope>
        {
            new ApiScope("speech.synthesize", "Speech synthesis",new []{"api.create" }),
            new ApiScope("payment.subscription", "Subscription service"),
            new ApiScope("payment.manage", "Manage Payment"),
        };

下面是我定义 Api资源的方式:

public static IEnumerable<ApiResource> ApiResources =>
        new List<ApiResource>
        {
            new ApiResource("speech", "Speech API")
            {
                Scopes = { "speech.synthesize", "payment.subscription" }
            }
        };

这是客户端配置:

public static IEnumerable<Client> Clients =>
        new List<Client>
        {
            new Client
            {
                ClientId = "client",

                // no interactive user, use the clientid/secret for authentication
                AllowedGrantTypes = GrantTypes.ResourceOwnerPasswordAndClientCredentials,

                // secret for authentication
                ClientSecrets =
                {
                    new Secret("secret".Sha256())
                },
                AlwaysSendClientClaims = true,
                // scopes that client has access to
                AllowedScopes = {
                    IdentityServerConstants.StandardScopes.OpenId,
                    IdentityServerConstants.StandardScopes.Profile,
                    IdentityServerConstants.StandardScopes.Email,
                    "speech"
                }
            }
        };

这里有什么问题?谁能帮我理解这个问题。

如果不对范围进行分组,Api 资源的作用是什么。

作为客户,您需要的是 ApiScopes,而不是 ApiResources。多一个 ApiResource 可以指向一个 ApiScope。

ApiResource 表示一个 API 实例,而不是一个范围。 ApiResources 就像客户端,但对于 Apis。

有关 IdentityResource、ApiResource 和 ApiScope 之间区别的更多详细信息,请参阅我的回答