如何自动让API密钥过期?

时间:2019-05-08 08:43:18

标签: python

我正在构建一个在会话期间使用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?

1 个答案:

答案 0 :(得分:0)

对不起,我没有足够的代表发表评论,一种简单的方法如下:

由于您的架构中已经有DateTime个对象,也许您可​​以添加另一个诸如"key_expiry_date"这样的项目,其中包含当前时间加上24小时。

然后您可以使用"key_expiry_date"来验证其他请求