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

使用Azure AD与Postman时Django API认证返回微软登录页问题

问题排查与解决方案

以下是针对你的API请求返回微软登录页面问题的具体排查步骤:


1. 检查DRF认证类配置

确保你的Django REST Framework配置中包含ADFS的Token认证类,因为网页登录依赖Session认证,但API需要Token认证:

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework.authentication.SessionAuthentication',
        'django_auth_adfs.rest_framework.AdfsAccessTokenAuthentication',
    ],
    # 其他DRF配置...
}

2. 验证Access Token有效性

用jwt.io解析你的Access Token,重点检查三个字段:

  • aud(受众):必须与django_auth_adfs配置中的AUDIENCE完全一致,也就是你在Azure AD「Expose an API」中设置的Application ID URI
  • iss(签发者):格式应为https://sts.windows.net/<你的租户ID>/,需匹配配置里的ISSUER值
  • scp(权限范围):必须包含你为API配置的自定义范围(比如api://<客户端ID>/access_as_user),确保Token拥有访问API的权限

如果aud字段错误,说明你在Postman生成Token时,「资源」参数填成了Azure AD Graph或Microsoft Graph的地址,需改成你自己暴露的API的Application ID URI。

3. 核对django_auth_adfs核心配置

确保配置中API相关参数正确:

AUTH_ADFS = {
    "CLIENT_ID": "<你的API应用客户端ID>",
    "CLIENT_SECRET": "<你的API应用客户端密钥>",
    "AUDIENCE": "api://<你的API应用ID URI>",  # 与Token的aud一致
    "ISSUER": "https://sts.windows.net/<你的租户ID>/",
    "PERMISSION_CLAIM": "scp",  # 对应Token中的scp字段,用角色则填"roles"
    "LOGIN_EXEMPT_URLS": [],  # 确保API路径不在豁免列表中
    # 其他配置...
}

4. 确认API权限授权状态

  • 若你配置的是委托权限:个人用户生成Token时,只要用户已同意该权限即可;若权限需要管理员同意,需先让Azure AD管理员在应用的「API权限」页面完成授权。
  • 若你配置的是应用权限:必须由管理员完成授权才能生效,检查权限状态是否为「已授予」。

5. 检查Postman请求头

  • 确保Authorization头格式正确:Bearer <你的Access Token>(注意Bearer后有一个空格)
  • 可尝试禁用Postman的Cookie功能,避免Session认证干扰Token认证流程

6. 验证Django中间件顺序

确保ADFS中间件位置正确,在Session和Authentication中间件之后:

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django_auth_adfs.middleware.AdfsAuthMiddleware',  # 需在此位置
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

7. 查看Django调试日志

开启DEBUG模式并配置日志,捕获认证失败的具体原因:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'console': {'class': 'logging.StreamHandler'},
    },
    'loggers': {
        'django_auth_adfs': {
            'handlers': ['console'],
            'level': 'DEBUG',
            'propagate': True,
        },
    },
}

运行Django后查看控制台输出,可定位Token验证失败的具体问题(如签名无效、Token过期等)。


内容的提问来源于stack exchange,提问作者Arad Soutehkeshan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 00:50:09