在Django中为用户存储多个API密钥

时间:2017-10-21 15:18:47

标签: python django django-models

我正在学习Django,我正在构建一个具有“用户”模型的应用程序,我需要为每个用户存储各种其他应用程序的私有API密钥字典,其中密钥是服务名称,值是实际的API密钥。我目前的计划是将字典存储为JSON,但我想知道是否有更好/更安全的方式我应该这样做?

3 个答案:

答案 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