[英]How can I automatically let API keys expire?
我正在構建一個在會話期間使用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?
對不起,我沒有足夠的代表發表評論,一個簡單的方法如下:
由於您的架構中已經有DateTime
對象,因此您可以添加另一個包含當前時間加上24小時的"key_expiry_date"
項。
然后,您可以使用"key_expiry_date"
來驗證更多請求
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.