token的介绍和用python 生成token的几种方法
上一篇 /
下一篇 2018-01-26 12:52:34
基本概念
Token的中文意思是“令牌”。主要用来身份验证。 Facebook,Twitter,Google+,Github等大型网站都在使用。比起传统的身份验证方法,Token有扩展性强,安全性高的特点,非常适合用在Web应用或者移动应用上。
验证方法
使用基于Token的身份验证方法,在服务端不需要存储用户的登录记录。大概的流程是这样的:
1. 客户端使用用户名跟密码请求登录
2. 服务端收到请求,去验证用户名与密码
3. 验证成功后,服务端会签发一个Token,再把这个Token发送给客户端
4. 客户端收到Token以后可以把它存储起来,比如放在Cookie里或者Local Storage里
5. 客户端每次向服务端请求资源的时候需要带着服务端签发的Token
6. 服务端收到请求,然后去验证客户端请求里面带着的Token,如果验证成功,就向客户端返回请求的数据
python常用Token生成方法
使用举例:
>>> import binascii
>>> import os
>>>binascii.b2a_base64(os.urandom(24))[:-1]
b'J1pJPotQJb6Ld+yBKDq8bqcJ71wXw+Xd'
这种算法的优点是性能快,缺点是有特殊字符,需要加replace来做处理。
sha1(os.urandom(24)).hexdigest()
使用举例:
>>> import hashlib
>>> import os
>>> hashlib.sha1(os.urandom(24)).hexdigest()
'21b7253943332d0237a720701bcb8161b82db776'
这种算法的优点是安全,不需要做特殊处理。缺点是覆盖范围差一些。
uuid4().hex
使用举例:
>>> import os
>>> import uuid
>>> uuid.uuid4().hex
'c58a80d3b7864b0686757b95e9626e47'
Uuid使用起来比较方便,缺点为安全性略差一些。
base64.b32encode(os.urandom(20))/base64.b64encode(os.urandom(24))
>>> import base64
>>> import os
>>>base64.b32encode(os.urandom(20))
b'NJMTBMOYIXHNRATTOTVONT4BXJAC25TX'
>>>base64.b64encode(os.urandom(24))
b'l1eU6UzSlWsowm8M8lH5VaFhZEAQ4kQj'
特别说明:
1. 可以用base64的地方,选择binascii.b2a_base64是不错的选择——根据W3的SessionID的字串中对identifier的定义,SessionID中使用的是base64,但在Cookie的值内使用需要注意“=”这个特殊字符的存在;
2. 如果要安全字符(字母数字),SHA1也是一个不错的选择,性能也不错;
收藏
举报
TAG: