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

多租户企业应用:如何为客户租户上传自定义签名密钥?

解决多租户应用自定义ID声明及签名密钥配置问题

错误原因解析

你遇到的“资源缺失”错误,核心原因是应用对象(application)仅存在于应用注册的源租户(BaseTenant),客户租户(Customer 1/Customer 2)中对应的是服务主体(servicePrincipal),而非独立的应用注册对象。因此在客户租户上下文调用https://graph.microsoft.com/v1.0/applications/$appObjId接口时,自然找不到对应的资源。

正确配置步骤

1. 自定义签名密钥仅需在源租户配置

多租户应用的自定义签名密钥不需要在每个客户租户单独创建,只需在BaseTenant的应用注册中完成配置即可。所有客户租户的令牌签名逻辑会继承源应用的相关配置,或由对应客户的Azure AD自动处理签名验证。

2. 为不同客户租户添加自定义ID声明

若需为不同客户租户的ID令牌添加差异化自定义声明,可通过以下两种方式实现:

  • 使用条件访问策略(租户级配置):在客户租户的Azure AD中创建条件访问策略,配置自定义声明规则,仅对该租户下的用户颁发包含特定声明的令牌。
  • 修改服务主体的可选声明:针对客户租户中的服务主体,调用Graph API的servicePrincipals/{servicePrincipalId}接口,更新其optionalClaims属性。示例请求体:
    {
      "optionalClaims": {
        "idToken": [
          {
            "name": "customClaim",
            "source": "user",
            "essential": false,
            "additionalProperties": []
          }
        ]
      }
    }
    
    注意:需先在客户租户中获取该应用对应的服务主体ID,可通过调用https://graph.microsoft.com/v1.0/servicePrincipals?$filter=appId eq '{yourAppId}'查询。

3. 权限要求

无论是在源租户修改应用对象,还是在客户租户修改服务主体,都需要确保调用Graph API的账号拥有对应的权限:

  • 源租户:Application.ReadWrite.All或Application.ReadWrite.OwnedBy
  • 客户租户:Application.ReadWrite.All或Directory.ReadWrite.All(需客户租户管理员授权)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 09:03:19