You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用OpenID对接Azure AD的ASP.NET 4.7.2应用无法获取自定义声明

你需要依次检查和补充以下配置:

1. 关闭JWT入站声明自动映射

System.IdentityModel.Tokens.Jwt 库默认会自动将JWT中的声明映射为.NET内置的ClaimType常量,无法匹配的自定义声明会被直接丢弃。你需要在TokenValidationParameters中显式关闭该逻辑:

TokenValidationParameters = new TokenValidationParameters()
{
    ValidateAudience = false,
    ValidateIssuer = true,
    ValidIssuer = AUTHORITY,
    IssuerSigningKey = key,
    // 新增这一行
    MapInboundClaims = false
},

2. 配置OpenID Connect协议的可选声明

你之前配置的自定义声明仅对SAML协议生效,OpenID Connect协议需要单独配置返回的声明:
进入Azure AD对应应用注册的清单页,找到optionalClaims节点,将你需要的声明添加到idToken数组中,示例配置如下:

"optionalClaims": {
    "idToken": [
        {
            "name": "given_name",
            "essential": false
        },
        {
            "name": "family_name",
            "essential": false
        },
        {
            "name": "email",
            "essential": false
        },
        {
            "name": "department",
            "source": "user",
            "essential": false
        }
    ]
}

如果需要保留和SAML响应一致的http://schemas.xmlsoap.org前缀的长声明名称,在对应声明的additionalProperties中添加"include_external_claim_name": true即可。

3. 补充请求的Scope范围

你当前仅请求了OpenIdProfile范围,需要补充所需声明对应的Scope,比如要获取邮箱地址需要额外添加email范围,修改配置如下:

Scope = OpenIdConnectScope.OpenIdProfile + " email",

4. 确认声明返回位置

如果你的自定义声明配置为仅在访问令牌(access_token)中返回,你需要在OnAuthorizationCodeReceived方法中用拿到的授权码兑换访问令牌,解析访问令牌获取自定义声明后,手动将声明添加到当前的ClaimsIdentity中,后续控制器的ClaimsPrincipal就能读取到这些声明。


内容的提问来源于stack exchange,提问作者Caspian Canuck

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 15:54:04