Linux下Python通过OS会话数据实现HTTP请求认证的问题求助
解决方案
方案1:改用NTLM认证(适用于目标服务支持NTLM的场景)
如果目标HTTP服务支持NTLM认证(常见于Windows IIS服务),可在Linux上用requests-ntlm库实现本地用户的OS认证,无需依赖Kerberos:
- 安装依赖库
pip install requests requests-ntlm
- 示例代码
import requests from requests_ntlm import HttpNtlmAuth # 用户名格式需为「本地主机名\用户名」 local_hostname = "你的Linux主机名" local_username = "你的本地用户名" r = requests.get( "目标URL", auth=HttpNtlmAuth(f"{local_hostname}\\{local_username}", ""), # 空密码表示使用当前登录用户凭据 verify=False ) print(r.status_code) print(r.json())
若空密码无效,可尝试填入本地用户的登录密码。
方案2:配置本地Kerberos票据(适用于目标服务仅支持Kerberos的场景)
若目标服务只接受Kerberos认证,需为Linux本地用户生成有效Kerberos票据:
- 安装Kerberos工具
sudo apt-get install krb5-user # Debian/Ubuntu系列 # 或 sudo yum install krb5-workstation # RHEL/CentOS系列
- 配置
/etc/krb5.conf
添加本地域相关配置,示例:
[libdefaults] default_realm = YOUR_LOCAL_REALM # 大写格式,如LOCALHOST.LOCALDOMAIN dns_lookup_realm = false dns_lookup_kdc = true [realms] YOUR_LOCAL_REALM = { kdc = localhost:88 admin_server = localhost:749 } [domain_realm] .your-local-domain = YOUR_LOCAL_REALM your-local-domain = YOUR_LOCAL_REALM
- 生成Kerberos票据
kinit 你的本地用户名
执行后输入本地用户密码完成票据生成。
- 发起请求
import requests from requests_kerberos import HTTPKerberosAuth r = requests.get( "目标URL", auth=HTTPKerberosAuth(), verify=False ) print(r.status_code) print(r.json())
关键排查点
- 确认目标服务认证方式:查看服务端返回的
WWW-Authenticate响应头,包含Negotiate则支持Kerberos,包含NTLM则支持NTLM。 - 本地用户权限:确保Linux本地用户在目标服务中拥有访问权限,避免因权限不足触发401错误。
内容的提问来源于stack exchange,提问作者gjvignesh
相关产品推荐
相关产品推荐

