使用Azure Static Web Apps内置认证时如何对Azure APIM及Graph API鉴权
Azure Static Web Apps 内置认证问题解答
1. 内置认证场景下对APIM的身份认证方案
Azure Static Web Apps的内置认证默认不会返回令牌,需要你手动修改配置开启令牌获取能力:
- 在项目根目录的
staticwebapp.config.json中,找到identityProviders.azureActiveDirectory配置段,添加login参数和resourceScopes配置,把你APIM暴露的API权限scope添加到列表中 - 配置生效后重新完成登录流程,再次调用
/.auth/me接口,返回结果中会新增access_token、refresh_token字段 - 调用APIM时直接将获取到的
access_token放入Authorization请求头即可,和你之前自定义认证的调用逻辑完全一致,内置认证会自动完成令牌刷新,不需要你手动处理过期逻辑
2. 调用Microsoft Graph获取用户全量信息的方法
同样通过修改认证配置即可实现:
- 在上述
resourceScopes配置中添加Microsoft Graph的对应权限scope,比如需要读取用户基础信息就添加https://graph.microsoft.com/User.Read - 在Azure AD中找到静态Web Apps关联的应用注册,为添加的Graph权限完成管理员同意(如果是组织内使用的应用)
- 配置生效后,你拿到的
access_token已经拥有Graph接口的调用权限,直接请求Graph的/me接口即可获取用户全名、部门等所有你需要的扩展信息
3. 是否需要自行实现完整认证流程
你提到的所有需求都可以通过内置认证实现,完全不需要自行开发完整认证流程,全程仅需完成配置操作,没有额外的编码工作量:
- 所有令牌的获取、刷新逻辑都由内置认证模块自动处理,不需要你写任何认证相关代码
- 如果需要调整权限范围,只需要修改
staticwebapp.config.json的scope配置和AAD应用注册的权限配置即可,适配成本极低
额外问题:userId字段的来源
这个userId是Azure Static Web Apps服务内部生成的用户唯一标识符,并非Azure AD中的Object ID:
- 它的生成规则为
{身份提供方标识}:{提供方返回的用户唯一ID的哈希值},比如AAD登录的用户前缀就是aad: - 该字段仅用于静态Web Apps服务内部标识用户,如果你需要Azure AD的Object ID,可以直接解析
access_token中的oid字段获取,或者调用Graph接口查询即可
内容的提问来源于stack exchange,提问作者BlackMiracle
相关产品推荐
相关产品推荐

