基于加密的 API-key 查询数据库

问题描述 投票:0回答:0

我正在 Python 中设置基于 API 密钥的身份验证。最初我使用以下方法生成 API 密钥:

import secrets
api_key = secrets.token_urlsafe(32)

然后我用它加密:

from cryptography.fernet import Fernet
encrypted_api_key = Fernet(stores_api_secret.encode()).encrypt(api_key.encode()).decode()

我将 encrypted_api_key 存储在我的数据库中。用户可以拥有多个 API 密钥。我现在面临的问题是当用户使用标头发出请求时:

X-访问令牌:{api_key}

我无法通过使用相同的 stores_api_secret 加密用户提供的访问令牌来过滤数据库,因为该加密每次都会生成不同的哈希值。我可以查询所有 encrypted_api_keys,然后将它们一个接一个地解密并与用户提供的 api_key 匹配,但这似乎效率低下。需要知道我如何改进这一点,欢迎任何好的示例实现。

python authentication api-design api-key
© www.soinside.com 2019 - 2024. All rights reserved.