在Django中存储api密钥的位置

时间:2015-08-15 18:46:06

标签: ajax django mongodb mlab

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

以下是完整资源网址的示例:

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

阅读关于跨站点请求伪造的Django文档但是stil不明白密钥的记录位置。

3 个答案:

答案 0 :(得分:1)

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

一种方法是将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的环境设置,或通过导出或其他方式在bash中设置它。

答案 1 :(得分:0)

我会在设置文件中执行此操作并从环境变量加载它。看看Django Settings

答案 2 :(得分:0)

一种选择是使用库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