OIDC中ID Token的作用是什么?基于Keycloak使用场景的疑问
ID Token 与 Access Token 的核心差异及用途
设计目标本质不同
- Access Token:后端权限凭证
它的核心职责是证明「当前用户拥有访问某后端服务/接口的权限」,用户身份信息只是附带项。你甚至可以在Keycloak里配置让它只包含roles这类权限声明,不携带姓名、邮箱等信息——这么做是为了精简体积,同时减少敏感信息泄露的风险。 - ID Token:前端身份凭证
它就是专门给前端用来确认用户身份的凭证。登录成功后,前端直接解析它里面的name、email等字段就能展示用户信息,或者用它判断用户是否处于登录状态,完全不需要动用Access Token做这些事。
使用场景明确划分
- 调用后端API:必须用Access Token,后端通过JWKS验证其合法性后,根据权限声明决定是否放行。
- 前端身份展示/状态校验:直接用ID Token,比如渲染用户头像、昵称,或者存在本地判断登录状态,避免把权限凭证(Access Token)暴露在前端做非权限相关的操作。
安全层面的考量
- Access Token有效期通常更短(Keycloak可配置),一旦泄露,攻击者能直接调用后端接口,风险极高;而ID Token就算泄露,攻击者最多只能获取用户身份信息,无法直接操作后端服务,风险更低。
- ID Token包含专门的安全声明,比如
nonce(防重放攻击)、auth_time(记录登录时间),这些是Access Token不一定会有的,前端可以用这些字段做额外的安全校验。
简单说,两者是「权限」和「身份」的职责分离,哪怕现在声明看起来重叠,也是为了让系统的安全边界更清晰,符合OpenID Connect的设计逻辑。
内容的提问来源于stack exchange,提问作者Minh Nghĩa
相关产品推荐
相关产品推荐

