
158
|
第
14
章
现在,
API
蓝本中的所有路由都能自动验证身份。此外,
before_request 处理程序还会拒
绝已通过身份验证但还没有确认账户的用户。
14.2.4
基于令牌的身份验证
每次请求,客户端都要发送身份验证凭据。为了避免总是发送敏感信息(例如密码),我
们可以使用一种基于令牌的身份验证方案。
在基于令牌的身份验证方案中,客户端先发送一个包含登录凭据的请求,通过身份验证
后,得到一个访问令牌。这个令牌可以代替登录凭据对请求进行身份验证。出于安全考
虑,令牌有过期时间。令牌过期后,客户端必须重新发送登录凭据,获取新的令牌。令牌
短暂的使用期限,可以降低令牌落入他人之手所导致的安全隐患。为了生成和核查身份验
证令牌,我们要在 User 模型中定义两个新方法。这两个新方法用到了 itsdangerous 包,
如示例
14-9
所示。
示例
14-9
app/models.py
:支持基于令牌的身份验证
class User(db.Model):
# ...
def generate_auth_token(self, expiration):
s = Serializer(current_app.config['SECRET_KEY'],
expires_in=expiration)
return s.dumps({'id': self.id}).decode('utf-8')
@staticmethod
def verify_auth_token(token):
s = Serializer(current_app.config['SECRET_KEY']) ...