我想知道是否/如何在 IdentityServer4 下为客户端(而不是用户)动态加载声明。对于我的 MVC 客户端应用程序,我可以使用 IdentityServer4 的IProfileService API为用户动态加载声明,效果很好。但是我需要对 IProfileService API 函数似乎没有涵盖的服务器到服务器客户端应用程序(客户端凭据授予类型)执行相同的操作。这可以做到吗?如果是,现在?
问问题
37 次
2 回答
0
也许您可以尝试这种方式:
whit Clients loaded from code:
public static IEnumerable<Client> GetClients()
{
return new List<Client>
{
new Client
{
ClientId = "Application1",
ClientName = "Application1",
....
AllowedScopes = { "application1.api.full_access"}
AccessTokenLifetime = 1800,
IdentityTokenLifetime = 1800,
Claims = new Claim[]
{
new Claim("Role", "admin"),
new Claim(JwtClaimTypes.Name, "JwtClaimTypes.Name"),
new Claim(JwtClaimTypes.Role, "JwtClaimTypes.Role")
}
}....
}
with Clients loaded via appsettings.json:
"Clients": [
{
"ClientId": "Application1",
"ClientName": "Application1",
"Enabled": true,
"Claims": [
{
"Type": "role",
"Value": "admin"
},
{
"Type": "name",
"Value": "myapp"
}
],
....
}
]
于 2022-01-06T19:27:24.307 回答
0
我已经通过实施解决了这个问题
public class MyClaimService : DefaultClaimsService
通过覆盖此类的 GetAccessTokenClaimsAsync 函数,我可以将自定义声明添加到令牌中。与仅适用于身份的 IProfileService 不同,此功能也适用于客户端(应用程序)。
于 2022-01-16T05:44:12.913 回答