python - 仅在生产中缺少授权 header

标签 python jwt flask-jwt-extended flask-jwt

我有以下工作流程:

我有一个api/token [POST],它获取表单数据(电子邮件和密码)并返回访问 token 和刷新 token 。

然后我有另一个端点 api/users/info [GET] (带有 header 'Authorization': 'Bearer ...),它返回用户信息。在本地测试时,两个端点都可以工作。

在测试我部署的服务器时,只有获取 token 有效。

这是api/users/info的代码:

@API_BP.route('/users/info', methods=['GET'])
@fresh_jwt_required
def users_info():

    user_identity = get_jwt_identity()
    curr_user = (SDB.session.query(User)
                 .filter_by(email=user_identity).one_or_none())
    return jsonify({
        'greeting': 'Hello, World!',
        'foo': 'bar',

    })

此外,这是我的配置:

JWT_TOKEN_LOCATION = ['cookies', 'headers']
JWT_COOKIE_CSRF_PROTECT = True
JWT_COOKIE_SECURE = True 
JWT_ACCESS_COOKIE_NAME = "my_access_cookie"
JWT_REFRESH_COOKIE_NAME = "my_refresh_cookie"
JWT_ACCESS_CSRF_COOKIE_NAME = "my_csrf_access_token"
JWT_REFRESH_CSRF_COOKIE_NAME = "my_csrf_refresh_token"
JWT_ACCESS_CSRF_HEADER_NAME = "X-MY-TOKEN"

我收到的错误是:

{
    "msg": "Missing JWT in cookies or headers (Missing cookie \"my_access_cookie\"; Missing Authorization Header)"
}

我正在使用 Postman 来访问这些端点。我已在授权下设置了 api/token 收到的 token 。这是 Python 中的样子:

import requests

url = "http://my_url.com/api/users/info"

payload = {}
headers = {
  'Authorization': 'Bearer eyJ0eXAiOiJKV1QiLCJhrtyuzI1NiJ9.eyJpYXQiOjE2MjU5MTg0MTEsIm5iZiI6MTYyNTkxODQxMSwianRpfghZi00YTcyLWIxZTYtZGMxYTRjNDhkOThhIiwiZXhwIjoxNjI1OTE5NjExLCJpZGVudGl0eSI6ImFsZnJlZG9Adml2ZWJlbmVmaXRzLmNvbSIsImZyZXNoIjp0cnVlLCsdfghXBlIjoiYWNjZXNzIiwiY3NyZiI6ImQyNTQ0NjY0LTFlOGUtNDY5NS1hY2I4LTE2MzIxMDZlNDY0MiJ9.WT-EWlMtZZKoNyiXYxa3xdfghjg7r7ys'
}

response = requests.request("GET", url, headers=headers, data = payload)

print(response.text.encode('utf8'))

如何确保第二个请求 GET 在产品中正常工作?

最佳答案

如果您在生产中使用 modwsgi,您可能需要确保启用了 WSGIPAssAuthorization On 配置选项。根据您在产品中运行 Flask 应用程序所使用的软件(Apache/nginx/uwsgi/unicorn/etc),可能会有类似的选项。

关于python - 仅在生产中缺少授权 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68327576/

相关文章:

python - 未使用 Flask JWT 扩展设置 Cookie

python - Flask-jwt-extended:装饰器 @jwt.token_in_blacklist_loader 始终撤销 token

c++ - 类似Python的 "if x in y"for C/C++的操作?

authentication - JWT token 未保存在数据库中

python - 无法使用 python-pip 正确安装模块

javascript - firebase 如何发送有效载荷包含下划线字符的 JWT token ?

rest - JWT 和一次性 token ?

python - flask -jwt-扩展类型错误 : Object of type 'function' is not JSON serializable

python - 复制静态变量(文件范围)行为

PYTHON - BEAUTIFULSOUP 如何将空 TD(表数据)刮取为空值而不是跳过它