.NET 8 Identity端点中如何为Bearer令牌添加自定义TenantId声明
如何在.NET 8 Identity API的Bearer令牌中添加自定义TenantId属性
要将MyAppUser中的TenantId属性添加到登录端点返回的Bearer令牌中,只需通过自定义用户Claims生成逻辑即可实现,步骤如下:
1. 自定义用户Claims生成工厂
创建一个继承自UserClaimsPrincipalFactory<MyAppUser>的类,重写GenerateClaimsAsync方法,将TenantId添加到用户Claims集合中:
using Microsoft.AspNetCore.Identity; using Microsoft.Extensions.Options; using System.Security.Claims; public class CustomUserClaimsPrincipalFactory : UserClaimsPrincipalFactory<MyAppUser> { public CustomUserClaimsPrincipalFactory(UserManager<MyAppUser> userManager, IOptions<IdentityOptions> optionsAccessor) : base(userManager, optionsAccessor) { } protected override async Task<ClaimsIdentity> GenerateClaimsAsync(MyAppUser user) { // 先调用基类生成默认Claims var identity = await base.GenerateClaimsAsync(user); // 添加TenantId到Claims中,可根据需求自定义Claim类型 if (user.TenantId != null) { identity.AddClaim(new Claim("TenantId", user.TenantId.ToString())); // 若需更规范的Claim类型,可使用自定义URI格式,例如: // identity.AddClaim(new Claim("https://your-app.com/claims/tenantid", user.TenantId.ToString())); } return identity; } }
2. 注册自定义Claims工厂
在Identity服务注册时,替换默认的Claims生成工厂:
builder.Services.AddIdentityCore<MyAppUser>() .AddEntityFrameworkStores<AppDbContext>() .AddApiEndpoints() .AddClaimsPrincipalFactory<CustomUserClaimsPrincipalFactory>(); // 注册自定义工厂
3. 验证效果
完成配置后,调用登录端点(/login)获取Bearer令牌,解析令牌即可看到TenantId已被包含在Claims中。
补充说明
- 默认情况下,.NET 8的Bearer令牌生成逻辑会自动包含用户所有的Claims,无需额外配置令牌过滤规则。
- 若需对令牌内容做更精细控制(比如指定仅包含特定Claims),可在
AddBearerToken时配置相关参数:
builder.Services.AddAuthentication() .AddBearerToken(IdentityConstants.BearerScheme, options => { // 可选:自定义令牌有效期、加密算法等 options.TokenValidationParameters.ValidIssuer = "your-app-issuer"; options.TokenValidationParameters.ValidAudience = "your-app-audience"; });
内容的提问来源于stack exchange,提问作者tt9
相关产品推荐
相关产品推荐

