ApiResource returns "invalid_scope" 身份服务器
ApiResource returns "invalid_scope" identityserver
我正在 razor 页面应用程序中实现 Identity Server。
请求 speech
Api 资源时,身份服务器 returns“invalid_scope”。我的理解是资源是一组范围。所以,我期待身份服务器 return 语音资源中定义的范围。
注意:我将 speech
添加为 ApiScope 它工作正常但它不会添加 speech.synthesize
和 payment.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 之间区别的更多详细信息,请参阅我的回答
我正在 razor 页面应用程序中实现 Identity Server。
请求 speech
Api 资源时,身份服务器 returns“invalid_scope”。我的理解是资源是一组范围。所以,我期待身份服务器 return 语音资源中定义的范围。
注意:我将 speech
添加为 ApiScope 它工作正常但它不会添加 speech.synthesize
和 payment.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 之间区别的更多详细信息,请参阅我的回答