ASP.NET Core使用AddCookies时为何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)方法读取到它。
举个完整流程的例子:
- 未登录用户访问Web应用,被重定向到IdentityServer4的登录页面;
- 用户完成登录后,IdentityServer4返回授权码给Web应用;
- Web应用用授权码向IdentityServer4换取
id_token、access_token等令牌; - Web应用通过
AddCookies()创建本地会话,将上述令牌存入会话关联的Cookie中; - 后续用户请求时,Web应用读取Cookie识别会话,从会话数据中取出保存的
id_token,这就是你能获取到它的原因。
内容的提问来源于stack exchange,提问作者ruddnisrus
相关产品推荐
相关产品推荐

