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

多租户Azure AD应用中支持人员授权访问的问题求助

解决方案与建议

问题1:支持工程师作为来宾无法访问多租户应用

核心问题在于你的应用错误地验证了用户的主租户ID(即你们公司的tenantId),而非用户当前登录的客户租户ID。当支持工程师以来宾身份登录客户租户时,Microsoft颁发的ID Token中,tid字段对应的是客户的租户ID,而非工程师的主租户ID。

解决步骤:

  • 调整授权逻辑:应用在验证权限时,应提取ID Token中的tid(客户租户ID),检查该租户是否属于已授权的客户列表,同时验证用户在该租户的企业应用中是否被分配了“Support”角色。
  • 通过Graph API验证角色:调用Microsoft Graph API的GET /users/{user-id}/appRoleAssignments,筛选出对应你的企业应用的角色分配,确认是否存在“Support”角色。需确保应用已获得User.Read.All或Directory.Read.All权限(遵循最小权限原则)。
  • 禁用主租户ID检查:移除对工程师主租户ID的验证逻辑,改为完全基于当前登录的客户租户ID和用户角色进行授权。

问题2:多租户来宾身份的登录租户识别

当同一位工程师被多家客户添加为来宾时,应用需要明确用户想要访问的租户,以下是几种可行方案:

方案1:登录前指定租户

  • 在应用登录界面添加租户选择功能,让工程师选择要访问的客户租户(可预先列出该工程师有权访问的客户租户列表)。
  • 构造登录URL时,将tenant参数从common替换为目标客户的租户ID,示例:
    https://login.microsoftonline.com/{customer-tenant-id}/oauth2/v2.0/authorize?client_id={your-app-id}&response_type=code&redirect_uri={your-redirect-uri}&scope=openid profile offline_access
    
  • 使用MSAL库时,可在登录方法中指定tenantId参数,例如:
    msalInstance.loginRedirect({
      scopes: ["openid", "profile", "offline_access"],
      tenantId: "{customer-tenant-id}"
    });
    

方案2:登录后选择租户

  • 先让工程师通过common endpoint登录,应用获取ID Token后,调用Microsoft Graph API的GET /me/tenantDetails(需User.ReadBasic.All权限),获取该工程师关联的所有租户信息。
  • 在应用内展示租户列表,让工程师选择要访问的租户,随后应用引导用户重新登录到指定租户(同方案1的URL构造方式)。

方案3:利用租户域名自动识别

  • 如果工程师使用客户租户的来宾邮箱后缀(如user@yourcompany.onmicrosoft.com#ext#@customertenant.com)登录,应用可解析邮箱中的租户域名部分,自动定位到对应的客户租户,无需手动选择。

注意事项

  • 最小权限原则:应用调用Graph API时,仅申请必要的权限,避免过度授权。
  • 会话管理:为不同租户的登录会话设置独立的存储(如Cookie或本地存储),避免租户间的会话冲突。
  • 用户体验优化:可记住工程师最近访问的租户,下次登录时默认选中,减少操作步骤。

内容的提问来源于stack exchange,提问作者S. ten Brinke

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 12:13:27