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

ASP.NET Core使用AddCookies时为何IdentityServer4返回JWT令牌?

为什么用Cookie认证仍会从IdentityServer4获取到JWT令牌?

这是因为Cookie认证和IdentityServer4基于OpenID Connect(OIDC)协议颁发的JWT令牌是两个不同层面的东西,二者并不冲突:

  • OIDC协议的核心逻辑就是通过身份提供商(这里是IdentityServer4)颁发JWT格式的id_token作为用户身份的凭证。当你的ASP.NET Core Web应用通过OIDC与IdentityServer4完成认证流程后,IdentityServer4必然会返回id_token——它用来证明用户的合法身份,包含用户的唯一标识、基本信息等核心字段。
  • 你调用的AddCookies(),作用是在Web应用本地创建并维护用户会话:Web应用会把OIDC流程中获取到的id_token、access_token等令牌,连同用户会话信息一起存储在本地Cookie里。后续用户发起请求时,Web应用通过读取Cookie就能快速识别用户身份,无需每次都向IdentityServer4发起验证请求。

简单来说:

  • Cookie是Web应用本地会话的载体,存储的是会话标识或会话数据的加密内容;
  • id_token(JWT)是IdentityServer4颁发的身份凭证原件,Web应用只是把它保存在了Cookie对应的会话数据中,所以你能通过HttpContext.GetTokenAsync(OpenIdConnectParameterNames.IdToken)方法读取到它。

举个完整流程的例子:

  1. 未登录用户访问Web应用,被重定向到IdentityServer4的登录页面;
  2. 用户完成登录后,IdentityServer4返回授权码给Web应用;
  3. Web应用用授权码向IdentityServer4换取id_token、access_token等令牌;
  4. Web应用通过AddCookies()创建本地会话,将上述令牌存入会话关联的Cookie中;
  5. 后续用户请求时,Web应用读取Cookie识别会话,从会话数据中取出保存的id_token,这就是你能获取到它的原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 00:05:21