5. Token与HTTPBasic验证-——-用令牌来管理用户

5.1 Token

1.Token概述

以下是网站登录和使用API登录的区别

image

与网站登录不同的是,网站登录将登录信息写入cookie存储在浏览器,而API只负责生成token发送给客户端,而客户端怎么存储有自己决定。

  • Token具有有效期

  • Token可以标示用户身份,如存储用户id

2.获取Token令牌

密码校验--app.models/user.py

返回token的试图函数,这里稍微破坏一下REST的规则,由于登录操作密码安全性较高,使用GET的话会泄漏 app\api\v1\token.py

app.setting.py

app\libs\erro_code.py

注册到Blueprint app\api\v1_init_.py

3.Token的用处

成功拿到token

我们不可能让任何一个用户都来访问我们获取用户资料的接口,必须对这个加以控制,也就是说只有确定了身份的用户可以访问我们的接口。

如何对这个接口做保护呢?

当用户访问问的接口的时候,我们需要获取他传来的token并进行解析验证,只有token是合法的且没有过期,我们才允许访问。

由于每个需要验证token的试图函数都需要上面的业务逻辑,所以我们可以编写一个装饰器,以面向切面的方式统一处理,编写一个函数验证token,如果验证通过,我们就继续执行试图函数的方法,如果不通过,我们就返回一个自定义异常。

app.libs/token_auth.py

app/api/v1/user.py

5.2 HTTPBasicAuth

1.HTTPBasicAuth基本原理

除了自定义发送账号和密码之外,HTTP这种协议本身就有多种规范,来允许我们来传递账号和密码。其中一种就是HTTPBasic

HTTPBasic:需要在HTTP请求的头部设置一个固定的键值对key=Authorization,value=basic base64(account:psd)

2.以BasicAuth方式来发送token

我们可以将token作为上面所说的账号account,而密码psd传递空值

image
image

5.3 Token的发送与验证

1.验证token

app\libs\token_auth.py

2.视图函数的编写

app\api\v1\user.py

3.重写后的get_or_404,抛出自定义异常

app\models\base.py

4.获取令牌信息

Last updated

Was this helpful?