openid
(必须的)profile
(包含 name、family_name、given_name 等)email
phone
当客户端(如前端 Web 应用)使用 OpenID Connect 登录 时,请求特定的 Identity Resources,以便获取用户信息。
配置项 | 用于哪个 Token? | 添加到哪里? | 目的 |
---|---|---|---|
IdentityResource.UserClaims |
ID Token | 添加到 ID Token 和 UserInfo Endpoint | 用于客户端识别用户身份(OpenID Connect) |
ApiResource.UserClaims |
Access Token | 添加到 Access Token(JWT Payload) | 用于 API 根据用户信息做权限控制(OAuth2) |
更具体说明:
IdentityResource.UserClaims
(用于身份认证)scope=openid profile email
这类身份相关的 scope 被请求时才生效ApiResource.UserClaims
(用于授权 API 访问)配置项类型 | 从哪里提取 Claim 的值? | 用途 |
---|---|---|
IdentityResource.UserClaims | IProfileService 提供) | /userinfo |
ApiScope.UserClaims | Claims(同上) | Access Token |
ApiResource.UserClaims | Claims,但作用更弱一些 | Access Token |
无论你在哪个地方配置了 UserClaims
,它们的值最终都要来自用户对象的 Claim 集合,或者由你通过 IProfileService
提供。
配置项 | Token 类型 | 用途 | 是否生效 | 优先级关系 |
---|---|---|---|---|
IdentityResource.UserClaims |
ID Token / UserInfo | 用于前端获取用户身份信息 | 需要请求对应 identity scope,如 openid profile |
独立生效 |
ApiResource.UserClaims |
Access Token | 供 API 使用的 Claims | 请求了与其绑定的 ApiScope 时生效 | 优先级最低 |
ApiScope.UserClaims |
Access Token | 供 API 使用的 Claims | 请求了该 scope 且 token 用于访问 API | 优先级更高(覆盖重复 Claim) |
如果某个 ApiScope.UserClaims
与 ApiResource.UserClaims
重叠 → ApiScope
的设置会覆盖 / 优先
builder.Services.AddAuthentication("Bearer")
.AddJwtBearer("Bearer", options =>
{
options.Authority = "https://identity.example.com"; // IdentityServer 地址
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateAudience = false // 通常关闭 Audience 验证,靠 Scope 控制访问
};
});
builder.Services.AddAuthorization(options =>
{
options.AddPolicy("orders.read", policy =>
{
policy.RequireAuthenticatedUser();
policy.RequireClaim("scope", "orders.read");
});
});
友情链接:
全部评论