python - 如何保护从 Django 到 Flask 微服务的通信?
问题描述
我设计了一个简单的 Django 服务,它使用 POST 请求与 Flask 微服务进行通信。基本上,用户提交一个带有一些首选项的表单,这些首选项被发送到 Django 视图,Django 视图将这些发送到 Flask,Flask 将根据这些首选项执行一些操作,然后返回一个响应给 Django,它将显示它给用户或做一些其他的操作。
整个系统现在可以工作,唯一的问题是我不知道它有多安全。这是我发送请求的方式:
def myview(request):
# Some code ...
req = requests.post('http://127.0.0.1:5000', json=myDataDict)
这是我的 Flask 服务接收它的方式:
@app.route("/", methods=["GET", "POST"])
def receivePost():
data = request.get_json()
# some code ..
return jsonify(data)
同样,该系统在本地工作;我想让它在我部署它时更安全。
以下是我的担忧:
1) 如果第三方myDataDict
在两个服务通信时读取变量内部的内容怎么办?2) Flask 服务应该只接受来自 Django 服务的请求。
我对 OAuth2 等库进行了一些研究并发现,令牌身份验证系统将是使该系统更安全的好方法,但我真的不知道如何将其添加到我的实际代码中。所以这是我的问题:我怎样才能使这个系统安全?任何形式的建议表示赞赏。
解决方案
您可以使用密钥和地址Flask-login
对用户进行身份验证。这是一个例子。API
IP
@login_manager.request_loader
def load_user_from_request(request):
api_key = request.headers.get('My-Api-Key')
is_api_path = re.match(r"^/api/+", request.path)
if is_api_path and api_key:
user = User.query.filter_by(key=api_key).first()
if user and user.ip == request.remote_addr:
return user
return None
使用Flask-login
'srequest_loader
加载和验证用户而不使用 cookie。
首先从这里调用的标题中获取API
密钥。然后检查请求是否包含以缩小您可以使用.HTTP
My-Api-Key
URL
/api/
API
如果找到用户,请检查请求是否来自他们的IP
.
在您的Django
应用程序中,您可以像这样请求FLASK
应用程序。
resp = requests.post(url + "/api/myendpoint", json=data, headers={'Content-Type': 'application/json', 'My-Api-Key': api_key})
最后别忘了使用HTTPS
推荐阅读
- javascript - 尝试将 [[Promiseresult]] 作为字符串提取到对象中
- docker - 如何使用 Docker 和多个项目依赖项在 PyCharm 中进行调试
- visual-c++ - 如何将单个字符的 natvis 限制为仅 VisualStudio 中的字符
- android - MVVM - How to cleanly incorporate AlertDialog?
- sql - I would like to make the following psql query faster
- python - Clickable images in QTextBrowser
- apache-kafka - pubSubSource: Receving the same message twice
- django-models - Filtering down through multiple ForeignKey relations in django
- java - Find a three-digit number in a string using replaceAll()
- list - List.assoc using List.find