gpt4 book ai didi

具有 Django REST 框架的本地和 mod_wsgi 服务器之间的 Django JWT 身份验证行为不同

转载 作者:行者123 更新时间:2023-12-03 15:02:39 24 4
gpt4 key购买 nike

我试图确定为什么使用 Authorization: 对 protected 资源进行身份验证使用本地开发服务器时, header 行为正常,但在我部署的 apache 2.2 w/mod_wsgi 实现上则不然。

我正在使用 django 1.8 和 django-rest-frameworkdjango-rest-framework-jwt用于基于 JWT 的身份验证的 lib。 apache 服务器是带有 mod_wsgi 的 2.2 版。这一切都在 ubuntu 12.04 实例(python 2.7)上运行。

在本地主机上使用 manage.py runserver 的工作案例:

# manage.py runserver is running
curl -s -X POST \
-d '{"username":"test@test.com", "password":}' \
http://localhost:8000/portfolio/login

# Response as expected:
##> {"token":"eyJhbGciOiJIUzI1NiIsInR5cCI6Ikp..."}

# Using above token as $TOKEN_STR with JWT prefix for Auth header:
curl -X GET -H "Content-Type: application/json" \
-H "Authorization: $TOKEN_STR" \
http://localhost:8000/portfolio

# Response as expected
##> {"data":"[...]"}

apache2.2 mod_wsgi 的破案:
curl -s -X POST \
-d '{"username":"test@test.com", "password":}' \
http://myremote.com/django/portfolio/login

# Response as expected:
##> {"token":"eyJhbGciOiJIUzI1NiIsInR5cCI6Ikp..."}

# Using above token as $TOKEN_STR with JWT prefix for Auth header:
curl -X GET -H "Content-Type: application/json" \
-H "Authorization: $TOKEN_STR" \
http://myremote.com/django/portfolio

# Response behaves as authentication not even there w/403 or 401:
##> {"detail": "Authentication credentials were not provided."}

Apache 站点配置
 #### DJANGO APP ####
LogLevel info
WSGIDaemonProcess dev processes=2 threads=15
WSGIProcessGroup dev

WSGIScriptAlias /django /webapps/django/config/wsgi.py
<Directory /webapps/django>
Order allow,deny
Allow from all
</Directory>


### DJANGO APP ####

可能相关的配置

配置文件
## Django rest frameowkr config
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.IsAuthenticated',
),
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.SessionAuthentication',
'rest_framework.authentication.BasicAuthentication',
'rest_framework_jwt.authentication.JSONWebTokenAuthentication',

)
}

JWT_AUTH = {
'JWT_ENCODE_HANDLER':
'rest_framework_jwt.utils.jwt_encode_handler',
'JWT_DECODE_HANDLER':
'rest_framework_jwt.utils.jwt_decode_handler',
'JWT_PAYLOAD_HANDLER':
'rest_framework_jwt.utils.jwt_payload_handler',
'JWT_PAYLOAD_GET_USER_ID_HANDLER':
'rest_framework_jwt.utils.jwt_get_user_id_from_payload_handler',

'JWT_RESPONSE_PAYLOAD_HANDLER':
'rest_framework_jwt.utils.jwt_response_payload_handler',
'JWT_SECRET_KEY': SECRET_KEY,
'JWT_ALGORITHM': 'HS256',
'JWT_AUTH_HEADER_PREFIX': 'JWT',
}

最佳答案

我遇到过类似的问题。我发现我在 Apache 配置文件中缺少以下指令

WSGIPassAuthorization On

关于具有 Django REST 框架的本地和 mod_wsgi 服务器之间的 Django JWT 身份验证行为不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32851714/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com