.net 如何仅在id_令牌中而不在access_令牌IdentityServer 4中包含声明
我正在使用Identity Server 4和隐式授权类型。 我有SPA,它向IS4发出授权请求,响应类型为:“id\u token”。 我使用GetProfileDataAsync方法简单实现了IProfileService:.net 如何仅在id_令牌中而不在access_令牌IdentityServer 4中包含声明,.net,identityserver4,core,.net,Identityserver4,Core,我正在使用Identity Server 4和隐式授权类型。 我有SPA,它向IS4发出授权请求,响应类型为:“id\u token”。 我使用GetProfileDataAsync方法简单实现了IProfileService: public virtual Task GetProfileDataAsync(ProfileDataRequestContext context) { context.AddRequestedClaims(context.Sub
public virtual Task GetProfileDataAsync(ProfileDataRequestContext context)
{
context.AddRequestedClaims(context.Subject.Claims);
context.IssuedClaims.Add(new Claim("custom1", "custom1"));
context.IssuedClaims.Add(new Claim("custom2", "custom2"));
return Task.CompletedTask;
}
没关系,我收到了一个访问令牌和一个id令牌。但它们都包含我的自定义声明。
如何在access\u令牌中仅包含“custom1”声明,而在id\u令牌中同时包含“custom1”和“custom2”声明?配置文件服务会在不同的上下文中多次调用:
- 对于访问令牌:
Context.Caller=ClaimsProviderAccessToken
- 对于标识令牌:
Context.Caller=UserInfoEndpoint
public async Task GetProfileDataAsync(ProfileDataRequestContext context)
{
context.AddRequestedClaims(context.Subject.Claims);
context.IssuedClaims.Add(new Claim("custom1", "custom1"));
// Add access token claims
if (Context.Caller == "ClaimsProviderAccessToken")
{
}
// Add identity token claims
if (Context.Caller == "UserInfoEndpoint")
{
context.IssuedClaims.Add(new Claim("custom2", "custom2"));
}
return Task.CompletedTask;
}
好的,多亏了Ruard van Elburg,我才做到了。 正确答案是:
- 对于访问令牌:Context.Caller=ClaimsProviderAccessToken
- 对于标识令牌:Context.Caller=ClaimsProviderIdentityToken
- 对于userinfo端点:Context.Caller=UserInfoEndpoint
public Task GetProfileDataAsync(ProfileDataRequestContext context)
{
context.AddRequestedClaims(context.Subject.Claims);
// Add claims to access token
if (context.Caller == "ClaimsProviderAccessToken")
{
context.IssuedClaims.Add(new Claim("custom1", "custom1"));
}
// Add identity token claims
if (context.Caller == "ClaimsProviderIdentityToken")
{
context.IssuedClaims.Add(new Claim("custom1", "custom1"));
context.IssuedClaims.Add(new Claim("custom2", "custom2"));
}
// Add userinfo endpoint claims
if (context.Caller == "UserInfoEndpoint")
{
context.IssuedClaims.Add(new Claim("custom1", "custom1"));
context.IssuedClaims.Add(new Claim("custom2", "custom2"));
}
return Task.CompletedTask;
}