在Python中使用Windows身份验证访问SharePoint站点
我正在尝试使用一个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))
重要提示:
- 如果你关闭了
cmd prompt
窗口,你刚设置的环境变量会被清除,这样你的脚本就会报错说找不到环境变量。为了避免这种情况,要么在脚本运行时一直保持cmd
窗口打开,要么永久设置环境变量(关于Windows机器的说明可以在 这里 找到。注意:说明中提到的是修改PATH
环境变量,但你可以理解如何创建或修改自己的变量)。 - 小心不要覆盖已有的环境变量。首先通过列出所有变量(在
cmd prompt
中输入SET
)来确认这个名字是否可用。 - 环境变量是以字符串的形式存储的。
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
。