在Python中使用Windows身份验证访问SharePoint站点

13 投票
3 回答
34175 浏览
提问于 2025-04-20 20:47

我正在尝试使用一个SharePoint网站,这个网站需要我的Windows身份验证。我可以使用requests模块来访问这个网站,但我必须明确输入我的Windows密码。

import requests
from requests_ntlm import HttpNtlmAuth

SITE = "https://sharepointsite.com/"
PASSWORD = "pw"
USERNAME = "domain\\user"

response = requests.get(SITE, auth=HttpNtlmAuth(USERNAME,PASSWORD))
print response.status_code

有没有办法让Python通过Windows身份验证访问这个网站,这样我就不需要提供我的密码了?看起来可以通过requests_nltm来实现,但我不知道怎么做。

3 个回答

-3

你有没有考虑过把你的用户名和密码存储为环境变量,这样就可以在运行脚本的机器上保存?这样做可以避免把敏感信息直接写在脚本里。只有机器的管理员才能访问或修改这些敏感信息。

cmd prompt 中设置你想要的变量(下面的语法适用于Windows机器):

SET username=domain\\user
SET password=your_password

为了确保你正确设置了变量,可以在 cmd prompt 中输入 SET,看看变量是否列出来了。

一旦设置正确,就可以使用Python的 os 模块来访问这些变量,并按需使用:

import os
import requests
from requests_ntlm import HttpNtlmAuth

username = os.environ.get('username')
password = os.environ.get('password')

SITE = "https://sharepointsite.com/"

response = requests.get(SITE, auth=HttpNtlmAuth(username, password))

重要提示:

  1. 如果你关闭了 cmd prompt 窗口,你刚设置的环境变量会被清除,这样你的脚本就会报错说找不到环境变量。为了避免这种情况,要么在脚本运行时一直保持 cmd 窗口打开,要么永久设置环境变量(关于Windows机器的说明可以在 这里 找到。注意:说明中提到的是修改 PATH 环境变量,但你可以理解如何创建或修改自己的变量)。
  2. 小心不要覆盖已有的环境变量。首先通过列出所有变量(在 cmd prompt 中输入 SET)来确认这个名字是否可用。
  3. 环境变量是以字符串的形式存储的。
3

这个被接受的答案还是用了存储的密码。一个可以通过Windows的SSPI接口来使用集成认证的选项如下:

import requests
from requests_negotiate_sspi import HttpNegotiateAuth

cert = 'path\to\certificate.cer'
 
response = requests.get(
    r'http://mysharepoint.com/_api',
    auth=HttpNegotiateAuth(),
    verify=cert)

print(response.status_code)

想了解更多信息,可以查看 这里

11

如果你不想直接写出你的Windows密码,可以使用getpass这个模块:

import requests
from requests_ntlm import HttpNtlmAuth
import getpass

SITE = "https://sharepointsite.com/"
USERNAME = "domain\\user"

response = requests.get(SITE, auth=HttpNtlmAuth(USERNAME, getpass.getpass()))
print response.status_code

这样你就不需要把密码以明文形式保存了。

查看requests_ntlm的代码,你会发现要使用它,必须提供你的密码或者密码的哈希值给HttpNtlmAuth

撰写回答