您的位置:首页 > 编程语言 > Python开发

token的介绍和用python 生成token的几种方法

2016-12-14 16:11 176 查看


基本概念

Token
的中文意思是“令牌”。主要用来身份验证。 Facebook,Twitter,Google+,Github
等大型网站都在使用。比起传统的身份验证方法,Token
有扩展性强,安全性高的特点,非常适合用在 Web
应用或者移动应用上。

验证方法

使用基于 Token
的身份验证方法,在服务端不需要存储用户的登录记录。大概的流程是这样的:

1.      
客户端使用用户名跟密码请求登录

2.      
服务端收到请求,去验证用户名与密码

3.      
验证成功后,服务端会签发一个 Token,再把这个
Token 发送给客户端

4.      
客户端收到 Token
以后可以把它存储起来,比如放在 Cookie
里或者 Local Storage


5.      
客户端每次向服务端请求资源的时候需要带着服务端签发的 Token

6.      
服务端收到请求,然后去验证客户端请求里面带着的 Token,如果验证成功,就向客户端返回请求的数据

python常用Token生成方法

binascii.b2a_base64(os.urandom(24))[:-1]

使用举例:

>>> 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也是一个不错的选择,性能也不错;

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: