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

如何在Python中使用传递身份验证实现IIS上REST API服务的身份验证?

解决本地IIS NTLM认证的REST API请求问题

方案1:修正requests_ntlm的使用方式

多数401错误源于未正确传递域名或会话构建逻辑错误。务必使用DOMAIN\username格式的用户名,并通过会话对象发送请求,而非单次请求。

示例代码:

import requests
from requests_ntlm import HttpNtlmAuth

# 构建持久会话
session = requests.Session()
# 本地机器认证可使用机器名或 "." 代表本地域,例如 .\Administrator
session.auth = HttpNtlmAuth('YOUR_DOMAIN\\your_username', 'your_password')

# 发送GET请求
response = session.get('http://localhost/your-api-endpoint')
print(response.status_code)
print(response.text)

方案2:使用requests-negotiate-sspi库(本地Windows环境推荐)

该库基于Windows SSPI接口实现,对IIS的NTLM认证兼容性更强,既可以自动复用当前登录用户凭据,也支持手动指定账号密码。

首先安装依赖:

pip install requests-negotiate-sspi

方式A:复用当前Windows登录用户凭据(无需输入密码)

import requests
from requests_negotiate_sspi import HttpNegotiateAuth

session = requests.Session()
# 自动绑定当前登录Windows用户的身份
session.auth = HttpNegotiateAuth()

response = session.get('http://localhost/your-api-endpoint')
print(response.status_code)

方式B:手动指定用户名密码

import requests
from requests_negotiate_sspi import HttpNegotiateAuth

session = requests.Session()
session.auth = HttpNegotiateAuth(username='your_username', password='your_password', domain='YOUR_DOMAIN')

response = session.get('http://localhost/your-api-endpoint')
print(response.status_code)

关键排查点

  • 确认IIS站点身份验证设置:已禁用匿名认证,仅启用NTLM认证(避免仅开启Negotiate模式)。
  • 检查API端点URL是否与IIS站点绑定的端口、主机头匹配。
  • 验证用户账号拥有该IIS站点及API资源的访问权限(可在IIS管理器中查看站点权限设置)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 00:22:17