如何为客户端而不是用户 IdentityServer 动态加载声明?
How to dynamically loaded claims for a client, not user, IdentityServer?
我想知道 if/how 我可以在 IdentityServer4 下为客户端(而不是用户)动态加载声明。对于我的 MVC 客户端应用程序,我可以使用 IdentityServer4 的 IProfileService API 为用户动态加载声明,而且效果很好。但是我需要对我的服务器到服务器客户端应用程序(客户端凭据授予类型)执行相同的操作,IProfileService API 函数似乎没有涵盖。这可以做到吗?如果是,现在?
也许你可以这样试试:
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"
}
],
....
}
]
我已经通过实施解决了这个问题
public class MyClaimService : DefaultClaimsService
通过覆盖此 class 的 GetAccessTokenClaimsAsync 函数,我可以将我的自定义声明添加到令牌中。与仅适用于身份的 IProfileService 不同,此功能也适用于客户端(应用程序)。
我想知道 if/how 我可以在 IdentityServer4 下为客户端(而不是用户)动态加载声明。对于我的 MVC 客户端应用程序,我可以使用 IdentityServer4 的 IProfileService API 为用户动态加载声明,而且效果很好。但是我需要对我的服务器到服务器客户端应用程序(客户端凭据授予类型)执行相同的操作,IProfileService API 函数似乎没有涵盖。这可以做到吗?如果是,现在?
也许你可以这样试试:
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"
}
],
....
}
]
我已经通过实施解决了这个问题
public class MyClaimService : DefaultClaimsService
通过覆盖此 class 的 GetAccessTokenClaimsAsync 函数,我可以将我的自定义声明添加到令牌中。与仅适用于身份的 IProfileService 不同,此功能也适用于客户端(应用程序)。