仅持有访问令牌时,如何获取Service Principal的相关信息?
仅用访问令牌获取Service Principal信息的方案
方案1:解析JWT令牌提取核心信息
访问令牌本身是JWT格式,无需调用API就能拿到基础信息:
- 将令牌按
.分割为三段,取中间的Payload部分 - 对Payload进行Base64URL解码,得到的JSON里包含
appid(应用ID)、displayname(显示名称)、oid(Service Principal对象ID)、roles(已分配角色)等关键字段 - 注:绝大多数场景下令牌是签名而非加密的,直接解码即可;若为加密令牌,需用对应密钥解密(这种情况极少)
方案2:调用Microsoft Graph查询完整信息
如果需要更详细的配置信息(比如关联应用、权限设置等),用令牌调用以下Graph接口:
- 精准查询:
GET /servicePrincipals/getByAppId('{appId}'),其中{appId}是从令牌Payload里拿到的appid值,直接返回对应Service Principal的全量数据 - 筛选查询:
GET /servicePrincipals?$filter=appId eq '{appId}',效果与上一接口一致 - 注意:调用这些接口需要访问令牌拥有
Application.Read.All或Directory.Read.All权限,具体根据你需要的信息范围选择
内容的提问来源于stack exchange,提问作者Ivan
相关产品推荐
相关产品推荐

