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

13

我想要使用一个使用我的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_ntlm实现,但我不知道如何操作。


2
我认为下面的回答者们没有理解“Windows身份验证”的含义,这意味着希望Sharepoint服务器从您当前使用的Windows工作站中获取身份验证。 - vy32
嗨,Tim,你解决了吗?如果有,请发布出来。我尝试了下面的解决方案,但所有的都返回401状态码。 - vaibhavnayan
3个回答

10

如果您不想明确声明您的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


好的,谢谢。我希望能够在不需要我的干预下运行此程序,但如果我不想密码以明文存储的话,似乎可能无法实现。 - Tim S_
可能是有可能的,只是我不知道怎么做。 - Noelkd

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)

请查看这里获取更多信息。

-3
你是否考虑在运行脚本的机器上将用户名和密码存储为环境变量?这样可以避免在脚本本身中存储敏感信息。只有机器管理员才能访问/修改敏感信息。
通过cmd提示符,设置所需变量(以下语法适用于Windows机器):
SET username=domain\\user
SET password=your_password

为确保您已正确设置变量,请在命令提示符中键入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. 环境变量存储为字符串。

5
在Windows系统中,环境变量并不是非常安全。由于它们存储在系统级别的注册表中,任何人都可以查看其他人的环境变量。因此,在这里存储密码或其他敏感信息并不是一个好主意。 - FistOfFury

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接