在 Django 中存储 api 键的位置

where to store api key in Django

我目前通过 Mongolabs 使用外部 MongoDb 构建 Web 应用程序。 api 基于在 url 中使用的个人密钥。正如文档所说,例如:

这是完整资源的示例 URL:

https://api.mongolab.com/api/1/databases?apiKey=**2E81PUmPFI84t7UIc_5YdldAp1ruUPKye** 所以问题是如何安全地存储这样的 api 密钥 2E81PUmPFI84t7UIc_5YdldAp1ruUPKye

正在阅读有关跨站请求伪造的 Django 文档,但仍然不明白密钥记录在哪里。

我会从环境变量将其加载到设置文件中。看看 Django Settings

有两种方法可以做到这一点。

一种方法是将 local_settings.py 文件导入主 settings.py 文件并放入 .gitignore,这样它就不会在 git 中。然而,有些人认为这不是好的做法,因为它可能会试图将 VCS 中没有的复杂内容放在那里,因此人们实际上拥有不同的环境。不过我觉得还好。

try:
    from local_settings import *
except ImportError:
    pass  # No local_settings file

另一种方式(不喜欢第一种方式的人推荐)是通过环境变量进行设置,然后在 settings.py.

中读取它们
MONGO_API_KEY = os.environ['MONGO_API_KEY']

然后您必须以某种方式传递环境变量。例如。通过 uwsgi 的 environ 设置,或者通过导出在你的 bash 中设置它,或者通过其他方式。

一种替代方法是使用使用库 cryptography.

的库 django-fernet-fields

用法很简单。在您的模型中,您需要添加一个新字段:

from django.db import models
from fernet_fields import EncryptedTextField

class MyModel(models.Model):
    apikey = EncryptedTextField()

默认情况下,该字段将使用您设置中的 SECRET_KEY 进行加密。因此,如果您更改它或丢失它,您将无法访问您的数据。

为了更好的安全性,您可以将 SECRET_KEY 保存为环境变量,然后将其传递给设置文件。

import os

SECRET_KEY = os.environ.get('APP_SECRET_KEY', 'unsafe-secret-key')

django-fernet-fields

快速回答:

  1. 存储在 .env 中
  2. 读入settings.py