在 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')
快速回答:
- 存储在 .env 中
- 读入settings.py
我目前通过 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')
快速回答:
- 存储在 .env 中
- 读入settings.py