You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

部署到IIS生产服务器后Django Rest Framework的JWT认证失效

IIS部署DRF API后JWT认证失效的排查方案

1. 核对SimpleJWT核心配置

  • 确保生产环境settings.py中的SECRET_KEY为独立安全密钥(可与本地不同,但需保证签名逻辑一致),SimpleJWT默认使用该密钥签名Token,密钥不匹配会直接导致认证失败。
  • 检查SIMPLE_JWT配置项是否完整,示例参考:
    from datetime import timedelta
    
    SIMPLE_JWT = {
        'ACCESS_TOKEN_LIFETIME': timedelta(minutes=5),
        'REFRESH_TOKEN_LIFETIME': timedelta(days=1),
        'ALGORITHM': 'HS256',
        'SIGNING_KEY': SECRET_KEY,
        'AUTH_HEADER_TYPES': ('Bearer',),
        'AUTH_HEADER_NAME': 'HTTP_AUTHORIZATION',
    }
    
  • 确认生产环境已安装对应版本的djangorestframework-simplejwt,执行pip list核对版本与本地一致,避免版本兼容问题。

2. 修复IIS请求头传递问题

IIS默认可能拦截或篡改Authorization请求头,需在web.config中添加配置确保头信息正常传递:

<system.webServer>
    <rewrite>
        <rules>
            <rule name="Preserve Authorization Header" stopProcessing="true">
                <match url=".*" />
                <conditions>
                    <add input="{HTTP_AUTHORIZATION}" pattern="^(Bearer .+)$" />
                </conditions>
                <serverVariables>
                    <set name="HTTP_AUTHORIZATION" value="{C:0}" />
                </serverVariables>
            </rule>
        </rules>
    </rewrite>
</system.webServer>

注意:需先在IIS中启用URL重写模块,若未安装需通过服务器管理器添加该组件。

3. 校验wfastcgi部署配置

检查web.config中的wfastcgi参数是否正确:

<appSettings>
    <add key="WSGI_HANDLER" value="django.core.wsgi.get_wsgi_application()" />
    <add key="PYTHONPATH" value="D:\your_project_root" />
    <add key="DJANGO_SETTINGS_MODULE" value="your_project.settings" />
</appSettings>
<system.webServer>
    <handlers>
        <add name="Python FastCGI" path="*" verb="*" modules="FastCgiModule" 
             scriptProcessor="C:\Python39\python.exe|C:\Python39\Lib\site-packages\wfastcgi.py" 
             resourceType="Unspecified" requireAccess="Script" />
    </handlers>
</system.webServer>
  • 确保PYTHONPATH指向Django项目根目录,DJANGO_SETTINGS_MODULE对应正确的settings文件路径。
  • 生产环境建议使用虚拟环境,避免全局Python包冲突,需将scriptProcessor中的Python路径改为虚拟环境的python.exe路径。

4. 日志定位具体错误

在生产环境settings.py中配置日志,捕获JWT认证相关错误:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'api_log': {
            'level': 'DEBUG',
            'class': 'logging.FileHandler',
            'filename': 'D:\logs\api_errors.log',
            'formatter': 'verbose',
        },
    },
    'formatters': {
        'verbose': {
            'format': '{levelname} {asctime} {module} {message}',
            'style': '{',
        },
    },
    'loggers': {
        'rest_framework_simplejwt': {
            'handlers': ['api_log'],
            'level': 'DEBUG',
            'propagate': True,
        },
        'django.request': {
            'handlers': ['api_log'],
            'level': 'DEBUG',
            'propagate': True,
        },
    },
}

查看日志文件,重点关注Invalid token、Authorization header not found等关键词,定位具体失败原因。

5. 验证请求头是否到达后端

新增测试视图,确认Authorization头是否被正确传递到Django:

from rest_framework.views import APIView
from rest_framework.response import Response

class AuthHeaderCheckView(APIView):
    def get(self, request):
        auth_header = request.META.get('HTTP_AUTHORIZATION')
        return Response({'received_auth_header': auth_header})

部署后用Postman请求该接口,若返回null或空值,说明IIS未传递请求头,需重新检查URL重写配置。

内容的提问来源于stack exchange,提问作者Parth Panchal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 14:55:15