我正在学习Django,我正在构建一个具有“用户”模型的应用程序,我需要为每个用户存储各种其他应用程序的私有API密钥字典,其中密钥是服务名称,值是实际的API密钥。我目前的计划是将字典存储为JSON,但我想知道是否有更好/更安全的方式我应该这样做?
答案 0 :(得分:0)
1)使用与默认Django用户模型1to1关系的额外模型(可扩展,更好)
2)使用哈希字段来保护数据 见https://github.com/amcat/django-hash-field
答案 1 :(得分:0)
我建议您再向用户模型添加一个带有外键的UserApiKey模型。您可以创建表示每个应用程序名称的UserApiKey对象。让我为你举个例子,
class UserApiKey(models.Model):
"""
Model to store user api keys.
Atribs:
user: Link to user model
name: name of your API (say Facebook or Google)
key: api key
""""
user = models.ForeignKey(User)
name = models.CharField(default='', max_length=200)
key = models.CharField(default='', max_length=500)`
您可以使用hashfield来保护密钥。我建议使用ForeignKey,因为你可以为同一个用户创建多个api密钥对象,并且它比存储的json对象更易查询。
答案 2 :(得分:-1)
djangomachine是正确的。散列不是答案,因为您需要在某个时候使用实际的密钥。
您需要在存储时加密密钥,并在检索时解密密钥。例如查看https://github.com/incuna/django-pgcrypto-fields。