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

如何使用user_impersonation范围通过Azure REST API获取用户配置信息

实现方案

首先校准核心规则认知:Azure AD 签发的访问令牌是单资源受众绑定的,单个令牌的aud(受众)声明只能对应一个API资源,同个资源下可以包含多个委托权限scope,但跨资源的scope无法合并到同一个令牌中。你当前持有的user_impersonation范围令牌是签发给你自定义API的,确实无法直接调用受众为Microsoft Graph的原生用户接口,也不存在适配自定义API受众的官方公开用户信息GET接口,按以下两个路径实现即可,全程不需要调整客户端现有user_impersonation的scope请求逻辑:

  • 方案1:直接解析现有令牌内置声明,获取基础用户配置
    你当前拿到的user_impersonation范围访问令牌本身就内置了登录用户的基础profile字段,不需要额外发起接口请求:
    直接对JWT格式的access token做验签解码(后端场景必须验签,前端纯信息展示可直接解码payload段),提取内置声明即可拿到常用用户信息:

    • oid:用户在当前Azure AD租户下的唯一对象ID
    • preferred_username:用户登录账号(通常为邮箱格式)
    • name:用户显示名称
    • given_name:用户名
    • family_name:用户姓氏
    • email:用户预留邮箱(租户配置下发该声明时存在)
      解码JWT可直接使用通用JWT工具库实现,不需要额外调用Azure或Graph相关接口。
  • 方案2:后端通过OBO代表流代理请求Graph接口,获取完整用户配置
    如果你需要的用户信息超出令牌内置声明范围(比如部门、职位、办公地点、用户头像、联系方式等扩展属性),不需要客户端调整权限请求逻辑,在你自定义API后端增加代理逻辑即可:

    1. 客户端保持现有逻辑不变,携带user_impersonation范围的access token请求你自定义API的用户信息查询接口
    2. 你的API后端拿到客户端传入的access token后,调用Azure AD令牌签发端点,通过OBO流申请Microsoft Graph的访问令牌,请求参数中指定scope为https://graph.microsoft.com/User.Read,同时传入你的API客户端凭据、以及客户端上传的user_impersonation令牌作为用户断言
    3. 拿到Graph访问令牌后,由后端发起GET请求调用https://graph.microsoft.com/v1.0/me接口,拉取完整用户配置文件
    4. 后端对返回的用户信息做字段裁剪/格式处理后,响应给前端即可
      整个流程对客户端完全透明,客户端全程只需要申请原有user_impersonation范围的令牌,不需要感知Graph接口的存在。

避坑提示:不要尝试在客户端直接携带自定义API的user_impersonation令牌调用Microsoft Graph接口,这类请求一定会返回401未授权错误,本质是令牌受众不匹配,和scope配置无关,没有绕开该规则的公开接口。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 11:21:18