无需调用MS Graph时,Microsoft Entra ID是否需暴露API?仅验证可行吗?
用Microsoft Entra ID保护后端API的简化配置说明
你的场景梳理
- 前端SPA通过Entra ID登录拿到Bearer令牌
- 带着令牌调用你的后端API
- 后端验证令牌,确认用户有指定角色
- 后端连MS SQL返回数据,全程不用碰MS Graph
针对你的疑问的解答
你说的完全对——只有当后端需要主动调用MS Graph这类外部受保护资源时,才需要配置应用权限。那些教程之所以都提API范围和权限,是因为它们覆盖了通用场景,而你的情况是更简化的“纯令牌校验”场景,具体拆解:
1. 为什么要创建API范围?
这不是多此一举,而是为了让Entra ID生成专属于你的API的令牌。要是不创建API范围,前端拿到的令牌是给MS Graph用的(aud字段是Graph的ID),后端校验时会因为“受众不匹配”直接拒绝。创建API范围就是告诉Entra ID:这个令牌是发给我的API的,确保令牌的受众正确,避免无效请求。
2. 应用权限完全不需要配置
应用权限是给后端自己用的——比如后端要调Graph拿用户信息,才需要给API加Graph的应用权限。你只需要验证用户的令牌、检查角色声明,根本不需要这一步,别被教程带偏了。
3. 适配你场景的极简配置步骤
- 在Entra ID里注册后端API应用,把
受众设为你的API客户端ID(或自定义URI) - 给后端API建至少一个委派权限范围(比如叫
access_as_user就行),不用碰应用权限 - 注册前端SPA应用,在API权限里加你后端的那个委派范围,然后做管理员同意(SPA是公共客户端,得提前同意)
- 前端请求令牌时,把
scope指定为你后端的范围(比如api://<你的API客户端ID>/access_as_user) - 后端校验令牌时盯紧这几点:
- 签名有效(用Entra ID的公钥验证)
aud字段和你的API客户端ID/URI匹配roles或scp字段里有你要的角色/权限
这样就搞定了纯令牌验证保护API,完全和MS Graph的应用权限没关系。
内容的提问来源于stack exchange,提问作者Vidarious
相关产品推荐
相关产品推荐

