没有合适的资源?快使用搜索试试~ 我知道了~
jwt-handbook-v0_14_1
需积分: 10 11 下载量 201 浏览量
2018-05-15
13:39:45
上传
评论
收藏 1.65MB PDF 举报
温馨提示
试读
120页
您是否对可用于签名和加密JWT的多种算法感到好奇? 那么这本手册是给你的。
资源推荐
资源详情
资源评论
The JWT Handbook
Sebastián E. Peyrott, Auth0 Inc.
Version 0.14.1, 2016-2018
Contents
Special Thanks 4
1 Introduction 5
1.1 What is a JSON Web Token? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.2 What problem does it solve? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.3 A little bit of history . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2 Practical Applications 8
2.1 Client-side/Stateless Sessions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.1.1 Security Considerations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.1.1.1 Signature Stripping . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.1.1.2 Cross-Site Request Forgery (CSRF) . . . . . . . . . . . . . . . . . . 10
2.1.1.3 Cross-Site Scripting (XSS) . . . . . . . . . . . . . . . . . . . . . . . 11
2.1.2 Are Client-Side Sessions Useful? . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.1.3 Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.2 Federated Identity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.2.1 Access and Refresh Tokens . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.2.2 JWTs and OAuth2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.2.3 JWTs and OpenID Connect . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.2.3.1 OpenID Connect Flows and JWTs . . . . . . . . . . . . . . . . . . . 20
2.2.4 Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.2.4.1 Setting up Auth0 Lock for Node.js Applications . . . . . . . . . . . 21
3 JSON Web Tokens in Detail 23
3.1 The Header . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3.2 The Payload . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.2.1 Registered Claims . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.2.2 Public and Private Claims . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
3.3 Unsecured JWTs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.4 Creating an Unsecured JWT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.4.1 Sample Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
3.5 Parsing an Unsecured JWT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
3.5.1 Sample Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
1
4 JSON Web Signatures 30
4.1 Structure of a Signed JWT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
4.1.1 Algorithm Overview for Compact Serialization . . . . . . . . . . . . . . . . . 32
4.1.2 Practical Aspects of Signing Algorithms . . . . . . . . . . . . . . . . . . . . . 33
4.1.3 JWS Header Claims . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
4.1.4 JWS JSON Serialization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
4.1.4.1 Flattened JWS JSON Serialization . . . . . . . . . . . . . . . . . . . 38
4.2 Signing and Validating Tokens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
4.2.1 HS256: HMAC + SHA-256 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
4.2.2 RS256: RSASSA + SHA256 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
4.2.3 ES256: ECDSA using P-256 and SHA-256 . . . . . . . . . . . . . . . . . . . . 40
5 JSON Web Encryption (JWE) 41
5.1 Structure of an Encrypted JWT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
5.1.1 Key Encryption Algorithms . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
5.1.1.1 Key Management Modes . . . . . . . . . . . . . . . . . . . . . . . . 46
5.1.1.2 Content Encryption Key (CEK) and JWE Encryption Key . . . . . 47
5.1.2 Content Encryption Algorithms . . . . . . . . . . . . . . . . . . . . . . . . . . 48
5.1.3 The Header . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
5.1.4 Algorithm Overview for Compact Serialization . . . . . . . . . . . . . . . . . 49
5.1.5 JWE JSON Serialization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
5.1.5.1 Flattened JWE JSON Serialization . . . . . . . . . . . . . . . . . . 52
5.2 Encrypting and Decrypting Tokens . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
5.2.1 Introduction: Managing Keys with node-jose . . . . . . . . . . . . . . . . . . 52
5.2.2 AES-128 Key Wrap (Key) + AES-128 GCM (Content) . . . . . . . . . . . . 54
5.2.3 RSAES-OAEP (Key) + AES-128 CBC + SHA-256 (Content) . . . . . . . . . 54
5.2.4 ECDH-ES P-256 (Key) + AES-128 GCM (Content) . . . . . . . . . . . . . . 55
5.2.5 Nested JWT: ECDSA using P-256 and SHA-256 (Signature) + RSAES-
OAEP (Encrypted Key) + AES-128 CBC + SHA-256 (Encrypted Content) . 55
5.2.6 Decryption . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
6 JSON Web Keys (JWK) 58
6.1 Structure of a JSON Web Key . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
6.1.1 JSON Web Key Set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
7 JSON Web Algorithms 61
7.1 General Algorithms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
7.1.1 Base64 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
7.1.1.1 Base64-URL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
7.1.1.2 Sample Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
7.1.2 SHA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
7.2 Signing Algorithms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
7.2.1 HMAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
7.2.1.1 HMAC + SHA256 (HS256) . . . . . . . . . . . . . . . . . . . . . . . 71
7.2.2 RSA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
7.2.2.1 Choosing e, d and n . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
7.2.2.2 Basic Signing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
2
7.2.2.3 RS256: RSASSA PKCS1 v1.5 using SHA-256 . . . . . . . . . . . . . 76
7.2.2.3.1 Algorithm . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
7.2.2.3.1.1 EMSA-PKCS1-v1_5 primitive . . . . . . . . . . . . 78
7.2.2.3.1.2 OS2IP primitive . . . . . . . . . . . . . . . . . . . . 79
7.2.2.3.1.3 RSASP1 primitive . . . . . . . . . . . . . . . . . . . 79
7.2.2.3.1.4 RSAVP1 primitive . . . . . . . . . . . . . . . . . . . 80
7.2.2.3.1.5 I2OSP primitive . . . . . . . . . . . . . . . . . . . . 80
7.2.2.3.2 Sample code . . . . . . . . . . . . . . . . . . . . . . . . . . 81
7.2.2.4 PS256: RSASSA-PSS using SHA-256 and MGF1 with SHA-256 . . 86
7.2.2.4.1 Algorithm . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
7.2.2.4.1.1 MGF1: the mask generation function . . . . . . . . 87
7.2.2.4.1.2 EMSA-PSS-ENCODE primitive . . . . . . . . . . . 88
7.2.2.4.1.3 EMSA-PSS-VERIFY primitive . . . . . . . . . . . . 89
7.2.2.4.2 Sample code . . . . . . . . . . . . . . . . . . . . . . . . . . 91
7.2.3 Elliptic Curve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
7.2.3.1 Elliptic-Curve Arithmetic . . . . . . . . . . . . . . . . . . . . . . . . 96
7.2.3.1.1 Point Addition . . . . . . . . . . . . . . . . . . . . . . . . . 96
7.2.3.1.2 Point Doubling . . . . . . . . . . . . . . . . . . . . . . . . . 97
7.2.3.1.3 Scalar Multiplication . . . . . . . . . . . . . . . . . . . . . 97
7.2.3.2 Elliptic-Curve Digital Signature Algorithm (ECDSA) . . . . . . . . 98
7.2.3.2.1 Elliptic-Curve Domain Parameters . . . . . . . . . . . . . . 100
7.2.3.2.2 Public and Private Keys . . . . . . . . . . . . . . . . . . . 101
7.2.3.2.2.1 The Discrete Logarithm Problem . . . . . . . . . . . 101
7.2.3.2.3 ES256: ECDSA using P-256 and SHA-256 . . . . . . . . . 101
7.3 Future Updates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
8 Annex A. Best Current Practices 105
8.1 Pitfalls and Common Attacks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
8.1.1 “alg: none” Attack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
8.1.2 RS256 Public-Key as HS256 Secret Attack . . . . . . . . . . . . . . . . . . . . 108
8.1.3 Weak HMAC Keys . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
8.1.4 Wrong Stacked Encryption + Signature Verication Assumptions . . . . . . . 110
8.1.5 Invalid Elliptic-Curve Attacks . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
8.1.6 Substitution Attacks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
8.1.6.1 Dierent Recipient . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
8.1.6.2 Same Recipient/Cross JWT . . . . . . . . . . . . . . . . . . . . . . 114
8.2 Mitigations and Best Practices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
8.2.1 Always Perform Algorithm Verication . . . . . . . . . . . . . . . . . . . . . . 115
8.2.2 Use Appropriate Algorithms . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
8.2.3 Always Perform All Validations . . . . . . . . . . . . . . . . . . . . . . . . . . 116
8.2.4 Always Validate Cryptographic Inputs . . . . . . . . . . . . . . . . . . . . . . 116
8.2.5 Pick Strong Keys . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
8.2.6 Validate All Possible Claims . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
8.2.7 Use The typ Claim To Separate Types Of Tokens . . . . . . . . . . . . . . . 117
8.2.8 Use Dierent Validation Rules For Each Token . . . . . . . . . . . . . . . . . 117
8.3 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
3
剩余119页未读,继续阅读
资源评论
akio_medue
- 粉丝: 17
- 资源: 8
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功