JSON Web Token(RFC-7519)是 Web 服务中常用的一种认证方案,简称 JWT 认证。JWT 基于一个 token 字符串来识别用户身份。
一个 JWT 的 token 串包含三个部分(Header.Payload.Signature,通过点来分隔):
Header:JSON 串,用于指定签名算法(Pulsar 中默认使用 HS256),使用 base64url 编码。
Payload:JSON 串,用于指定用户名(sub)和过期时间,使用 base64url 编码。
Signature:使用特定算法,将 Header 和 Payload 加一个 secret 值编码而来。签名保证了 token 不被中途篡改。
# 一个使用 HMAC SHA256 算法的签名示例
HMACSHA256(
base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)
我们可以使用 https://jwt.io/ 或任意 base64 解密工具查看 header 和 payload 部分。
<aside> 💡 JWT 得益于其简单有效,得到广泛应用。但也由于 JWT token 串携带了部分诸如用户名等明文信息,因此仅适用于对安全要求适中的环境。
</aside>
Pulsar 使用标准的 io.jsonwebtoken
库支持使用 JWT 做身份认证,同时也提供了 JWT 客户端,可以方便的制作密钥和生成 token。
基于 JWT 的特性,在 Pulsar 中使用需要注意的几个点:
注意 Pulsar 提供了使用对称密钥(secret key)和使用非对称密钥(private/public key)两种方式,可根据安全强度要求选择其中一个即可。
方案 2:使用非对称密钥(private/public key)