最近面试被问及单点登陆怎么解决?自己的项目前后端分离,自己实现token认证,token有失效时间,token中包含用户基本的信息。且一个当用户重新登陆后,原来的token就会失效,这么安全的一个token怎么就被别人认为不安全了呢?自己孤陋寡闻,被问及jwt?没听过的名词,一查rfc,原来这么回事,和自己实现的token认证完全差不多嘛,而且比jwt本身更安全,即使token被泄露,只需要用户重新登陆认证一次,泄露的token立即失效,但jwt不一样,它如果泄露,在有效期内,依然有效,不可控。不过应该也能通过技术手段解决这种问题
JSON WEB Token (JWT)
摘要
JSON Web Token(JWT) 是一个简洁,两者传输之间是URL安全的方式。
这个声明在JWT中被编码为JSON对象被用于负载(payload)(JWS)签名结构或作为一个明文的
JSON Web 加密(JWE)结构,以MAC(消息授权码)或加密方式使这个声明为数字签名或完整性保护
- 1 介绍
- 2 术语
- 3 JWT概述
- 3.1 JWT例子
- 4 JWT声明
- 4.1 注册声明名称
- 4.1.1 iss(Issuer)声明
- 4.1.2 sub(Subject)声明
- 4.1.3 aud(Audience)声明
- 4.1.4 exp(Expiration Time)声明
- 4.1.5 nbf(Not Before)声明
- 4.1.6 iat(Issued At)声明
- 4.1.7 jti(JWT ID)声明
- 4.2 公共声明名称
- 4.3 私有声明名称
- 5 JOSE 头部
- 5.1 typ(Type)头部参数
- 5.2 cty(Content Type)头部参数
- 5.3 将声明复制为头部参数
- 6 非安全(Unsecured)的JWTs
- 6.1 非安全的JWTs例子
- 7 创建和验证JWTs
- 7.1 创建一个JWT
- 7.2 验证一个JWT
- 7.3 字符串比较规则
- 8 实现要求
- 9 URI是一个JWT
- 10 IANA思考
- 10.1 JSON Web Token声明注册
- 10.1.1 注册模版
- 10.1.2 初始化注册内容
- 10.2 子命名空间注册 urn:ietf:params:oauth:token-type:jwt
- 10.2.1 注册内容
- 10.3 媒体类型注册
- 10.3.1 注册内容
- 10.4 头部参数名称注册
- 10.4.1 注册内容
- 11 安全考虑
- 11.1 信任依据
- 11.2 签名或加密顺序
- 12 隐私考虑
- 13 参考
- 13.1 规范参考
- 13.2 信息性参考
- 附录A JWT例子
- a.1 JWT加密示例
- a.2 JWT嵌套示例
- 附录B JWTs到SAML关系断言
- 附录C JWTs到SWTs(简单Web token)关系
1.介绍
JWT 是一个简洁声明格式,同于空间受限的环境,如HTTP授权头部和URI查询参数。
JWT将声明编码为JSON对象用于传输。它使用一个JWS的数据结构或JWE的数据结构。
JWT与jot单词发音一样
2.术语
JWS定义规范
- JSON Web Signature(JWS)
- Base64uri Encoding
- Header parameter
- JOSE Header
- JWS Compact Serialization
- JWS payload
- JWS Signature
- Unsecured JWS
JWE定义规范
- JSON Web Encryption(JWE)
- Content Encryption Key(CEK)
- JWE Compact Serialization
- JWE Encrypted Key
- JWE Initialization Vector
Internet Security Glossary定义规范
- Ciphertext
- Digital Signature
- Message Authentication Code(MAC)
- Plaintext
JSON Web Token(JWT)
- 一个字符串的集合声明作为一个JSON对象编码于JWS或JWE结构内,使这个声明变为数字签名或MAC或加密
JWT Claims Set
- 包含由JWT传输的声明的JSON对象
Claim
- 关于某个主题的一条信息,一个声明表示由一个名称和值组成的
- Claim Name
这个名称是声明的一部分,总是一个字符串类型
- Claim Value
这个值是声明的一部分,一个声明的值可以是任意的JSON对象
- Nested JWT
使用嵌套签名和/或加密的JWT,在嵌套的JWT中,被用作一个有效载荷或明文值分别包含JWS或JWE结构