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

AngularJS应用调用ASP.NET Core API需传AuthToken还是IDToken?

ASP.NET Core Web API Token使用问题解答

客户端调用API的Token选择

Angular/AngularJS客户端发起API请求时,必须携带Access Token(即你提到的Auth Token),禁止将ID Token作为鉴权凭证发送给后端API。

你的现有配置已经正确接入了微软身份平台的Web API鉴权逻辑,只要Token校验通过,你在控制器中可以直接通过以下代码提取email声明:

[Route("[controller]")]
public class UserController : ControllerBase
{
    [HttpGet]
    public IActionResult Get()
    {
        // 直接从User对象中读取email声明
        var userEmail = User.FindFirstValue("email");
        // 后续根据邮箱查询数据库返回用户信息即可
        ...
    }
}

如果提取不到email声明,去Entra ID(原AAD)的应用注册页面,给你的API配置可选声明,要求身份提供商将email字段下发到Access Token中即可。

三类Token的适用场景

OpenID Connect构建于OAuth2协议之上,不同Token的定位和使用边界完全不同:

  • Access Token(Auth Token):OAuth2协议定义的资源访问凭证,专门用于调用受保护的后端资源(包括你自己开发的Web API、身份提供商提供的官方接口比如/userinfo)。API侧的鉴权中间件会校验这个Token的签名、受众、有效期,校验通过后会自动解析Token内的声明,填充到请求上下文中供业务逻辑使用。
  • ID Token:OpenID Connect扩展的身份凭证,固定为JWT格式,受众是发起登录流程的客户端应用本身,仅用于客户端本地确认用户登录状态、获取基础身份信息做前端页面渲染、前端路由拦截使用,不能作为调用后端API的凭证。
  • Refresh Token:仅面向可信的移动端、桌面端、服务端应用发放,无固定过期时间但支持手动吊销,作用是在Access Token过期后,无需用户重新交互登录即可换取新的Access Token和ID Token。前端单页应用(如Angular项目)属于不可信客户端,不建议存储和使用Refresh Token,存在令牌泄露风险。

核心疑问解答:读取声明是否必须使用Access Token

是否使用Access Token取决于读取声明的主体是谁:

  • 如果是后端API需要读取声明做鉴权、业务逻辑处理:必须使用Access Token。ID Token的受众是前端客户端,你的Web API鉴权中间件校验ID Token时会直接抛出受众不匹配的错误,请求无法进入业务逻辑。
  • 如果是前端客户端需要读取声明做前端交互逻辑:直接解析登录流程返回的ID Token即可,不需要使用Access Token。
  • 如果Access Token中缺少需要的声明,不要尝试用ID Token绕过校验,正确做法是去身份提供商的配置后台,将需要的字段配置为API的可选声明,让身份提供商在签发Access Token时直接携带对应字段即可。

内容的提问来源于stack exchange,提问作者One Developer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 18:54:25