OpenIdConnect的id_token作用是什么?OIDC中access_token与id_token该如何选用?
Hey 👋,我来帮你把这两个OpenID Connect(OIDC)的核心问题讲明白:
一、OpenID Connect 的 id_token 到底有啥用?
id_token是OIDC体系里专门负责用户身份认证的令牌,它的核心用途可以总结成这几点:
- 快速验证用户身份:客户端拿到id_token后,不需要跟授权服务器通信,直接解码就能确认用户已经完成登录,同时获取用户的核心身份标识(比如唯一用户ID存在
sub字段,还有姓名、邮箱这类基础信息)。 - 维持登录会话:通过id_token里的
exp(过期时间)字段,客户端可以判断用户的登录会话是否有效,到期前可以触发静默刷新或者提示用户重新登录。 - 支持单点登录(SSO):在多应用的场景下,只要这些应用都信任同一个OIDC授权服务器,用户在其中一个应用登录后,其他应用可以用id_token快速确认用户身份,不用重复输入账号密码。
- 客户端侧展示用户信息:没错,你猜的方向是对的——客户端可以直接解析id_token里的字段(比如
name、email)来展示用户的个人信息,不用额外调用接口(如果需要更详细的用户数据,再用access_token去调/userinfo端点就行)。
二、access_token 和 id_token 怎么区分使用?
这确实是OIDC新手最容易搞混的点,我给你划个清晰的界限:
- 向资源服务器请求受保护资源时,必须用 access_token 放在授权头(格式如
Authorization: Bearer <access_token>)里:比如你要调用获取用户订单、修改用户资料这类API,这些都是访问受保护的资源,得用access_token来证明你有对应的访问权限。资源服务器会验证这个token的有效性和权限范围(scope),通过了才会返回资源。 - id_token 绝对不能用来请求资源服务器:它的设计初衷只是做身份认证,不是授权访问资源。如果你把id_token塞到授权头里去请求API,资源服务器根本不会认,直接会返回权限错误。
- id_token的主要场景就是客户端本地的身份确认:比如登录后显示“欢迎XX”,或者判断用户是否处于登录状态,这些用id_token就足够了。如果需要获取id_token里没有的更详细用户信息,再用access_token去调用OIDC标准的
/userinfo端点就行。
内容的提问来源于stack exchange,提问作者HongyanShen
相关产品推荐
相关产品推荐

