JWT有效性验证机制及Keycloak Token跨站登录验证逻辑咨询
JWT相关问题解答
1. JWT Token的有效性验证方式
JWT的有效性验证围绕完整性、时效性、合法性三个核心维度展开,具体步骤如下:
- 签名校验:JWT由头部(Header)、载荷(Payload)、签名(Signature)三部分组成。验证方会用和签发方相同的加密算法(如HS256、RS256),结合对应密钥(对称加密用共享密钥,非对称加密用签发方公钥),对头部和载荷重新计算签名,与Token自带的签名比对。若不一致,说明Token内容被篡改,直接判定无效。
- 有效期校验:载荷中的
exp(过期时间)和nbf(生效时间)是关键时间标识。验证方会对比当前服务器时间,确保当前时间在nbf之后、exp之前,超出此范围的Token直接失效。 - 受众与发行方校验:检查载荷里的
aud(受众)是否匹配当前服务的客户端ID,确保Token是发给自身的;同时验证iss(发行方)是否为预先信任的授权服务器,拒绝来自未知来源的Token。 - 自定义规则校验:根据业务需求,还可校验
sub(用户唯一标识)是否在系统中存在、azp(授权方)是否为合法客户端、roles(角色)是否具备访问当前资源的权限等。
2. Keycloak生成Token的无效判断、凭据信息说明及登录流程
2.1 如何判断Token无效
网站对Keycloak生成的Token做无效判断,除通用JWT校验规则外,还会结合Keycloak的特性:
- 签名验证失败:用Keycloak提供的公钥重新计算签名,与Token签名不匹配,说明Token被篡改或使用了错误密钥。
- 时间范围异常:
exp已过期或nbf未到生效时间,直接判定无效。 - 身份不匹配:
iss不是信任的Keycloak实例域名,aud不是当前网站在Keycloak中注册的客户端ID,这类Token属于非法目标凭证。 - Token被吊销:若Keycloak开启令牌撤销功能,网站可通过Keycloak的
Introspect接口查询Token状态,用户主动登出、权限被收回或Token被管理员撤销时,都会被判定为无效。 - 格式错误:Token不是标准的三段式Base64编码结构,直接视为无效。
2.2 为什么Token里看不到凭据信息
JWT的核心作用是传递授权信息,而非存储身份凭据。用户的用户名、密码这类敏感凭据,仅在登录阶段提交给Keycloak做验证,验证通过后Keycloak就会丢弃这些信息,不会写入JWT载荷。载荷里只会包含用户ID、角色、权限范围这类非敏感的身份标识和授权信息,所以看不到凭据内容。
2.3 基于Keycloak的JWT登录流程
- 触发登录跳转:用户访问需要登录的网站,网站检测到用户未登录,将其重定向到Keycloak的统一登录页面。
- 用户身份认证:用户在Keycloak页面输入用户名和密码,Keycloak验证凭据有效性,确认用户身份合法。
- 获取授权码与Token:验证通过后,Keycloak将用户重定向回网站并附带授权码;网站拿着授权码、自身客户端ID和密钥,向Keycloak的Token接口请求获取Access Token(JWT格式)和Refresh Token。
- Token验证与资源访问:网站先验证Access Token的有效性(签名、有效期、受众等),验证通过后,用户后续每次请求资源时,在请求头携带
Authorization: Bearer <Access Token>,网站校验Token无误后返回对应资源。 - Token刷新:当Access Token过期时,网站用Refresh Token向Keycloak请求新的Access Token,无需用户再次输入用户名密码,实现无感续期。
内容的提问来源于stack exchange,提问作者SK WAS
相关产品推荐
相关产品推荐

