我正在尝试使用我的Windows身份验证的sharepoint站点。我可以使用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
实现的,但我无法弄清楚如何。
答案 0 :(得分:4)
如果您不想明确说明您的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
的{{3}},无法在不提供密码或密码哈希的情况下使用它HttpNtlmAuth
答案 1 :(得分:0)
接受的答案仍然使用存储的密码。通过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)
有关更多信息,请参见here。
答案 2 :(得分:-2)
您是否考虑将用户名和密码存储为运行脚本的计算机上的环境变量?这将防止您必须将敏感信息存储在脚本本身中。然后只有机器的管理员才能访问/修改敏感信息。
通过cmd prompt
,设置所需的变量(以下语法适用于Windows机器):
SET username=domain\\user
SET password=your_password
为确保您已正确设置变量,请在SET
中输入cmd prompt
并查看是否列出了变量。
一旦正确设置,然后使用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机器的说明here。注意:说明指的是更改PATH
环境变量,但你会知道如何创建/修改自己的变量。)SET
键入cmd prompt
)。