JSON Web Token
JSON Web Token(JWT) 是一个基于JSON的开放标准(RFC 7519),用于创建拥有身份属性的令牌。 例如,服务器可以生成一个令牌,该令牌具有“以管理员身份登录”的属性并将其提供给客户端,客户端可以使用该令牌来证明它以管理员身份登录。 令牌由服务器的密钥签名,因此客户端和服务器都能够验证该令牌是否合法。 令牌被设计成紧凑,URL安全和可用的特点,尤其是在Web浏览器单点登录(SSO)中被广泛使用。 JWT 的声明字段通常可用于身份提供商和服务提供商之间的身份验证,或业务流程所要求的其他类型的声明。
JWT 字符串结构分为三部分,用 “.” 分割
- Header 头部
- Payload 负载
- Signature 签名
形式为 HHHH.PPPP.SSSS
身份令牌
身份令牌( ID Token )类似由 OP 签署的标准 JWT 格式“身份证”。 RP 站点将用户跳转到 OP 站点进行认证,从而获取到身份令牌。
{
"sub" : "alice",
"iss" : "https://accounts.cloudtrust.com.cn",
"aud" : "client-12345",
"nonce" : "n-0S6_WzA2Mj",
"auth_time" : 1311280969,
"acr" : "cloudtrust.loa.hisec",
"iat" : 1311280970,
"exp" : 1311281970,
}
身份令牌有以下属性:
sub: 在 OpenID 中用来断言用户身份。
iss: 令牌的发行方。
aud: 令牌特定的接受方。
nonce: 将客户端会话与身份令牌关联起来的随机字符串。
auth_time: 用户身份验证的时间点。
acr: 认证强度方式。
iat: 发行时间。
exp: 到期时间。
同时:
身份令牌也可以包括相关请求的其它信息,例如姓名和电子邮件地址。
身份令牌经过数字签名,所以可以被接受方验证。
身份令牌可以选择加密。
此外:
在身份令牌头部, 声明了令牌格式和签名算法。
令牌被编码为base 64 格式的 URL 安全字符串,方便在 URL 上传递。
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9
.eyJzdWIiOiJhbGljZSIsImlzcyI6Imh0dHB
zOi8vYWNjb3VudHMuY2xvdWR0cnVzdC5jb20
uY24iLCJhdWQiOiJjbGllbnQtMTIzNDUiLCJ
ub25jZSI6Im4tMFM2X1d6QTJNaiIsImF1dGh
fdGltZSI6MTMxMTI4MDk2OSwiYWNyIjoiY2x
vdWR0cnVzdC5sb2EuaGlzZWMiLCJpYXQiOjE
zMTEyODA5NzAsImV4cCI6MTMxMTI4MTk3MH0
.O8lB_ij70i0f1m-tbM--KD6WNUAM2DiWIYl
3yuJ1jLOjiAzs3qB6-IfFDpC7f2gxcsJymPY
h8S7t96gO7m-ngl2MAufWbqcEkiYSp6nkwOl
pvUy3XdEg7qLq1im7ZNoikk7bPNpcYJZfqSI
IuSS7sVi4LI3bD5KYHs3EHUGakbk