首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何让API密钥自动过期?

如何让API密钥自动过期?
EN

Stack Overflow用户
提问于 2019-05-08 16:43:18
回答 1查看 128关注 0票数 0

我正在构建一个在会话期间使用API密钥的应用程序。到目前为止,我已经成功地生成了API密钥,我可以检查它们的有效性,以及它们是否与正确的帐户匹配,我还添加了暴力保护。

我的问题是,我想让它们在24小时后自动过期。现在,当用户请求新密钥时,我会删除旧密钥,以减少有人猜测正确密钥的机会,但这对不再使用应用程序的用户不起作用。

我打算通过安排一个cronjob来实现这一点,因为我读到了其他人的建议。然而,应用程序将要托管的服务器不是我的,并且服务器实际所属的人从一开始就认为没有必要自动过期。这意味着我想以某种方式将它包含在代码本身中,或者有一个很好的理由来解释为什么他应该让我(或他自己做)安排一个cronjob。

包含API密钥的表如下:

代码语言:javascript
代码运行次数:0
运行
复制
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密钥生成器的调用方式如下:

代码语言:javascript
代码运行次数:0
运行
复制
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()

生成器函数如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
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?

EN

回答 1

Stack Overflow用户

发布于 2019-05-08 16:58:55

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

由于您的模式中已经有了DateTime对象,也许您可以添加另一个这样的项,比如"key_expiry_date",它包含当前时间加上24小时。

然后,您可以使用"key_expiry_date"验证进一步的请求

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56036783

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档