python - 将 JWT 作为“x-my-jwt”标头附加到上游发布请求
问题描述
去一个看起来像这样的特定解决方案
从我之前的努力中可以看出,在 Django 中,有一个特定的端点
#urls.py
path('api/token/', MyTokenObtainPairView.as_view(), name='token_obtain'),
#views.py
class MyTokenObtainPairView(TokenObtainPairView):
serializer_class = MyTokenObtainPairSerializer
当我与现有用户一起发布时
我收到一个回复,可以看到与此类似的访问令牌
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiZXhwIjoxNTkwOTE0MTk4LCJqdGkiOiJhZDZmNzZhZjFmOGU0ZWJlOGI2Y2Y5YjQ4MGQzZjY2MiIsInVzZXJfaWQiOjExLCJpYXQiOjE1OTA5MTc0OTgsInVzZXIiOiJ0aWFnbyIsImRhdGUiOiIyMDIwLTA1LTMxIn0.-5U9P-WWmhlOenzCvc6b7_71Tz17LyNxe_DOMwwqH4RqrNsilVukEcZWFRGupLHRZjIvPya2QJGpiju9ujzQuw
如何将 JWT 作为“x-my-jwt”标头附加到上游 POST 请求?
解决方案
+---------+ +----------+ +--------+ +----------+
| | | | | | | |
| Browser |----->| Nginx |---------->|Gunicorn| ----->|Django App|
| | | | | | | |
+---------+ +----------+ +--------+ +----------+
响应时访问令牌的浏览器请求/api/token
:
{
"access" : "TOKENXYZ",
"user" : "user",
"date" : "2020-06-08",
}
Django Rest 框架身份验证Authorization
器需要存在标头,并且应该有一个前缀Bearer
,因此您应该在 API 调用中设置Authorization
和标头。x-my-jwt
从浏览器中,如果您使用的是 jQuery,请执行以下操作。
$.ajax({
type: 'POST',
url: url,
headers: {
"x-my-jwt":"TOKEN_XYZ",
"Authorization" : "Bearer TOKEN_XYZ"
}
}).done(function(data) {
alert(data);
});
如果您从 Django 应用程序向需要 JWT 令牌的其他 Django 应用程序服务器进行 API 调用,则使用requests
库将标头设置为
headers = {
"x-my-jwt":"TOKEN_XYZ",
"Authorization":"Bearer TOKEN_XYZ"
}
r = requests.post(url, data=payload, headers=headers)
如果需要,您还可以在 Nginx 级别进行标头重写。在这种情况下,您需要设置Authorization
标题。Authorization
标头与您在通话中收到的访问令牌相同,api/token
带有前缀Bearer
。如果您不想 Bearer
在my-jwt
令牌中删除该Bearer
组件,
proxy_set_header X-my-jwt $http_authorization;
推荐阅读
- python - 不和谐机器人欢迎消息不起作用.py
- node.js - 使用 Express.js 的正向代理(打字稿)
- javascript - 尝试使用 JavaScript 来实现它,但脚本似乎有问题
- c++ - 如何在 Eigen 中有效地将稀疏矩阵的特定行和列设置为零
- sql - 有没有其他方法可以提高执行速度。目前以下查询需要 6 秒才能执行
- sql - 如何在 SQL 子查询中选择超过 1 个值
- python - 删除列表中的 0 值
- javascript - 嵌套 ajax 调用的最佳实践
- c# - 将过滤的包含附加到表达式
- html - 如何在javascript中使用“mailto”加入地址邮件?