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

AAD技术问询:能否将Microsoft Graph开放扩展加入应用清单的optionalClaims?

关于Microsoft Graph开放扩展与optionalClaims的问题解答

先直接给你结论:不能直接将Microsoft Graph开放扩展配置到AD应用程序清单的optionalClaims中,下面给你详细解释原因和替代方案。

为什么开放扩展没法进optionalClaims?

你之前用AD Graph API的目录扩展能成功,是因为目录扩展属于Azure AD的架构扩展——它会被添加到用户对象的核心属性集合里,Azure AD能识别并将其作为用户属性返回在claims中。

而**Microsoft Graph开放扩展(Open Extensions)**是一种“附加存储”,它并不属于用户对象的核心属性,而是以键值对的形式嵌套在用户对象的extensions字段下。Azure AD的身份认证流程不会自动解析这个嵌套字段里的属性,所以没法通过optionalClaims配置让它直接出现在idToken或accessToken的claims中。

实现需求的两种可行方案

方案1:改用Microsoft Graph目录扩展(推荐)

既然你之前用目录扩展实现过类似需求,完全可以迁移到Microsoft Graph的目录扩展来实现,步骤和之前类似:

  1. 先通过Microsoft Graph API为你的应用注册一个目录扩展属性(对应organisationId);
  2. 在邀请新用户到Azure AD时,直接设置这个目录扩展属性的值;
  3. 像你之前做的那样,把这个扩展属性添加到应用清单的optionalClaims中,示例配置如下:
    "optionalClaims": {
      "idToken": [
        {
          "name": "extension_94dd5b3a05a1416f8481eb6713b6ba08_organisationId",
          "source": "user",
          "essential": true
        }
      ]
    }
    
    (注意这里的应用ID要去掉所有横杠,和你之前AD Graph的用法一致)

这样用户登录时,这个organisationId就会直接出现在idToken的claims里,完全符合你的需求。

方案2:如果必须用开放扩展,登录后主动调用API获取

如果因为某些限制必须使用开放扩展,那只能在用户登录成功后,用获取到的accessToken调用Microsoft Graph API来读取这个属性:

  • 调用接口:GET /me/extensions/extension_<你的应用ID(无横杠)>_organisationId
  • 这个方式需要额外的API请求,不如目录扩展直接返回claims便捷,但也能拿到你需要的属性值。

额外小提示

  • 目录扩展是全局属性,所有有相应权限的应用都能访问;开放扩展是应用专属的,只有创建它的应用(或被授权的应用)能读取。
  • 如果你的organisationId只需要在当前应用内使用,两种方案都可以;但要实现登录时自动返回claims,优先选目录扩展。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 11:08:21