Skip to content

Commit 45bd4cd

Browse files
committedMar 17, 2021
N fix
1 parent 8e59af4 commit 45bd4cd

File tree

2 files changed

+6
-7
lines changed

2 files changed

+6
-7
lines changed
 

‎md/10-前言.md

-1
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,6 @@
130130

131131
- **署名** — 您必须给出**适当的署名**,提供指向本许可协议的链接,同时标明是否(对原始作品)作了修改。您可以用任何合理的方式来署名,但是不得以任何方式暗示许可人为您或您的使用背书。
132132
- **非商业性使用** — 您不得将本作品用于**商业目的**
133-
134133
- **没有附加限制** — 您不得适用法律术语或者技术措施从而限制其他人做许可协议允许的事情。
135134

136135
> 适当的署名:您必须提供创作者和署名者的姓名或名称、版权标识、许可协议标识、免责标识和作品链接。

‎md/170-JWT身份验证.md

+6-6
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
Web 程序是使用 HTTP 协议传输的,而 HTTP 协议是**无状态**的协议,对于事务没有记忆能力。也就是说,如果没有其他形式的帮助,服务器是没办法知道前后两次请求是否是同一个用户发起的,也不具有对用户进行身份验证的能力。
22

3-
传统 web 开发中(以及前面的章节),身份验证**通常**是基于 Session 会话机制的。Session 对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。因为 Session 通常是存储在服务器当中的,如果 Session 过多,会对服务器产生压力。
3+
传统 web 开发中(以及前面的章节),身份验证**通常**是基于 Session 会话机制的。Session 对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。 Session 通常是存储在服务器当中的,如果 Session 过多,会对服务器产生压力。
44

5-
另一种比较常用的身份验证方式是 JWT (JSON Web Token) 令牌。JWT 是一种开放标准,它定义了一种紧凑且自包含的方式,用于在各方之间作为 JSON 对象安全地传输信息。由于此信息是经过数字签名的,因此可以被验证和信任。JWT 非常适合用于身份验证和服务器到服务器授权。与 Session 不同,JWT 的 **Token** 是保存在用户端的,即摆脱了对服务器的依赖。
5+
另一种比较常用的身份验证方式是 JWT (JSON Web Token) 令牌。JWT 是一种开放标准,它定义了一种紧凑且自包含的方式,用于在各方之间作为 JSON 对象安全地传输信息。由于 Token 是经过数字签名的,因此可以被验证和信任。JWT 非常适合用于身份验证和服务器到服务器授权。与 Session 不同,JWT 的 **Token** 是保存在用户端的,即摆脱了对服务器的依赖。
66

77
JWT 令牌长这样子的:
88

@@ -12,7 +12,7 @@ eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiZXhwIjoxNjA
1212

1313
在进行某些需要验证身份的业务中,用户需要把令牌一并提交(就跟提交用户名及密码类似)。
1414

15-
> 详细的 JWT 工作方式讲解[看这里](https://jwt.io/introduction)
15+
> 这里有详细的 [JWT 工作方式讲解](https://jwt.io/introduction)
1616
1717
本章尝试将身份验证方法更改为 JWT 形式。
1818

@@ -84,7 +84,7 @@ HTTP/1.1 200 OK
8484
> Postman 有一个专门的标签页 (Authorization) 用于填写令牌。此标签页的 Type 栏选择 Bearer Token 即可。
8585
8686
```python
87-
> http put http://127.0.0.1:8000/api/comment/21/ parent_id=20 article_id=2 content='comment to parent comment 10' "Authorization: Bearer eyJ(......)iJ9.eyJ(...)jJ9.MdY(...)kEM"
87+
> http put http://127.0.0.1:8000/api/comment/21/ parent_id=20 article_id=2 content='comment to parent comment 10' "Authorization: Bearer eyJ(......)iJ9.eyJ(...)jJ9.MdY(...)kEM"
8888

8989
HTTP/1.1 200 OK
9090
...
@@ -112,7 +112,7 @@ HTTP/1.1 200 OK
112112

113113
功能与用 Session 相同,并且成功切换到 JWT 方式了。
114114

115-
> Session 验证就失效了,读者自行尝试
115+
> 开启 JWT 后,Session 验证就自动失效了。也就是说,除了申请 Token 时会用到账户密码,其他时候的身份验证都不再需要它们了
116116
>
117117
> Session 和 JWT 哪个好?将会话移至客户端意味着摆脱了对服务器端会话的依赖,但这会带来如何安全存储、运输令牌等一系列挑战。不能够一概而论,而是要根据你的项目实际需求。关于这个话题更深入的讨论,请移步[Stackoverflow](https://stackoverflow.com/questions/43452896/authentication-jwt-usage-vs-session)
118118
@@ -133,6 +133,6 @@ SIMPLE_JWT = {
133133
}
134134
```
135135

136-
> Token 一旦泄露,任何人都可以获得该令牌的所有权限。为了减少盗用,Token 的有效期通常设置得比较短
136+
> Token 一旦泄露,任何人都可以获得该令牌的所有权限。出于安全考虑,Token 的有效期通常不应该设置得太长
137137
138138
更多配置项请查看[官方文档](https://django-rest-framework-simplejwt.readthedocs.io/en/latest/settings.html)

0 commit comments

Comments
 (0)