Flask扩展实现HTTP令牌token认证HTTPTokenAuth

Token认证

在restful设计中,用户认证模式一般使用json web token,而不会使用传统的HTTP Basic认证(传入帐号密码)
token认证模式以下:在请求header中加入token
python

Flask中的实现

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认证成功才能进入该视图设计

相关文章
相关标签/搜索