我正在构建一个在会话期间使用API密钥的应用程序。到目前为止,我已经成功生成了API密钥,并且可以检查它们的有效性以及它们是否使用正确的帐户,并且还添加了蛮力保护。
我的问题是我想让它们在24小时后自动过期。现在,当用户请求新密钥时,我会删除旧密钥,以减少某人猜测正确密钥的机会,但这不适用于不再使用该应用程序的用户。
在我阅读其他人的建议时,我打算通过安排cronjob来实现这一目标。但是,托管应用程序的服务器不是我的,并且服务器确实属于的人最初并不认为需要自动到期。这意味着我想以某种方式将其包含在代码本身中,或者有充分的理由说明他为什么应该让我(或亲自完成)安排cronjob。
包含API密钥的表如下:
class DBAuth(db.Model):
__tablename__ = 'auth'
id = db.Column(db.Integer, primary_key=True)
user_id = db.Column(db.Integer, index=True)
api_key = db.Column(db.String(256))
begin_date = db.Column(db.DateTime, nullable=False)
并且api密钥生成器的调用方式如下:
auth = DBAuth()
key = DBAuth.query.filter_by(user_id=user.id).first()
if key is not None:
db.session.delete(key)
db.session.commit()
api_key = auth.generate_key(user.id)
db.session.add(auth)
db.session.commit()
具有这样的生成器功能:
def generate_key(self, user_id):
self.user_id = user_id
self.api_key = #redacted#
self.begin_date = datetime.datetime.now()
return self.api_key
我的问题实际上是两部分: 1:我的同事说自动到期是不必要的,对吗?和2:有没有一种方法可以向代码添加自动到期,而不是安排cronjob?
答案 0 :(得分:0)
对不起,我没有足够的代表发表评论,一种简单的方法如下:
由于您的架构中已经有DateTime
个对象,也许您可以添加另一个诸如"key_expiry_date"
这样的项目,其中包含当前时间加上24小时。
然后您可以使用"key_expiry_date"
来验证其他请求