在restful设计中,用户认证模式一般使用json web token,而不会使用传统的HTTP Basic认证(传入帐号密码)
token认证模式以下:在请求header中加入token
python
flask扩展flask-httpauth提供了该认证方法web
$ pip install flask-httpauth
首先实例化json
auth = HTTPTokenAuth(scheme='JWT')
上面的scheme
就是token前面的字符串,能够自定义,这里我使用JWT
源代码以下:
flask
它提供了一个装饰器,里面能够实现本身的token检验方法api
@auth.verify_token def verify_token(token): pass #这里须要自定义
Flask中的itsdangerous提供了令牌生成和校验的方法restful
from itsdangerous import TimedJSONWebSignatureSerializer, BadSignature,\ SignatureExpired
组合起来:app
@auth.verify_token def verify_token(token): s = TimedJSONWebSignatureSerializer( current_app.config['SECRET_KEY'] ) try: data = s.loads(token) print(data) except BadSignature: raise AuthFailed(msg='token不正确') except SignatureExpired: raise AuthFailed(msg='token过时') uid = data['uid'] return True
经过验证后返回True表明token认证成功!
若是有须要登陆的视图,就能够使用以下装饰器:ui
@api.route('/login_require/', methods=['POST']) @auth.login_required def func(): pass
只有Token认证成功才能进入该视图设计