Office365-rest-python-client: “TypeError: cannot concatenate 'str' and 'NoneType' objects” 请求获取文件。

创建于 2017-06-12  ·  14评论  ·  资料来源: vgrem/Office365-REST-Python-Client

我正在尝试在此 URL 上下载可访问(通过浏览器)的文件:
https://test.sharepoint.com/sites/team/team documents/subfolder/document.docx

我正在使用带有以下代码的 ClientRequest 对象:

url = "https://test.sharepoint.com/sites/team"
username="[email protected]"
password="pass"
ctxAuth = AuthenticationContext(url)
if ctxAuth.acquire_token_for_user(username, password):
    print 'authentication successful, proceeding...'
    request = ClientRequest(ctxAuth)
    requestUrl="{0}/_api/web/getfilebyserverrelativeurl('team documents/subfolder/document.docx')"
    options=RequestOptions(requestUrl.format(url))
    data = request.execute_query_direct(options)

在运行它时,我得到以下跟踪:

$ python test.py
No handlers could be found for logger "client.office365.runtime.auth.saml_token_provider.SamlTokenProvider.process_service_token_response"
authentication successful, proceeding...
Traceback (most recent call last):
  File "test.py", line 14, in <module>
    data = request.execute_query_direct(options)
  File "/usr/lib/python2.7/site-packages/client/office365/runtime/client_request.py", line 77, in execute_query_direct
    self.context.authenticate_request(request_options)
  File "/usr/lib/python2.7/site-packages/client/office365/runtime/auth/authentication_context.py", line 20, in authenticate_request
    request_options.set_header('Cookie', self.provider.get_authentication_cookie())
  File "/usr/lib/python2.7/site-packages/client/office365/runtime/auth/saml_token_provider.py", line 65, in get_authentication_cookie
    return 'FedAuth=' + self.FedAuth + '; rtFa=' + self.rtFa
TypeError: cannot concatenate 'str' and 'NoneType' objects

我使用模块的方式有问题吗?

最有用的评论

我遇到了类似的问题,因为我们的 SharePoint 实例在代理后面运行。 我必须对SamlTokenProvider进行子类化以覆盖登录 url ( self.sts ) 和 cookie 名称。 我认为问题是在初始化期间,代码不会检查acquire_authentication_cookie的结果,因此如果身份验证失败,您在使用 cookie 之前不会听到它。

所有14条评论

我遇到了类似的问题,因为我们的 SharePoint 实例在代理后面运行。 我必须对SamlTokenProvider进行子类化以覆盖登录 url ( self.sts ) 和 cookie 名称。 我认为问题是在初始化期间,代码不会检查acquire_authentication_cookie的结果,因此如果身份验证失败,您在使用 cookie 之前不会听到它。

我遇到了同样的问题。 似乎身份验证失败不是由异常处理的。 它只会在查询 cookie 时冒泡。 检查您的凭据

同样的问题。 检查凭据,但问题仍然存在。 还有其他想法吗? 谢谢!

我最终使用OAuth2Session来获取 oauth2 身份验证并从图形 api 中获取数据。 已经有一段时间了,我不再记得确切的细节。

谢谢会检查一下。

嗨,我有同样的问题,但就我而言,我认为这是因为我使用 FormAuthentication 方法配置了共享点。 在实施适当的令牌提供程序之前它无法工作

我也遇到了这个问题,但前提是我使用的是 Outlook.com 帐户。 我希望有人可以解释幕后发生的事情,并可能提供解决方案。 下面是一个简单的解释:

1) 我们的 SharePoint 网站在云端 (https://mn365.sharepoint.com)
2) 当我使用我的明尼苏达州凭据连接到该站点时,它连接得很好。
3)但由于我不想在我的应用程序中嵌入我自己的凭据,我创建了一个“服务帐户”,类似于

使用 Outlook.com 地址和我的组织发布的地址(在本例中为 [email protected]

同样的问题在这里。 我们使用 AD FS 进行身份验证。 直到现在我还没有找到任何方法从我们的共享点在线服务器获取任何信息。 我尝试了很多图书馆,但没有任何效果对我有用。

我遇到了同样的错误,因为 sharepoint 正在将身份验证重定向到本地 STS/ADFS。

我们直接在 O365 中创建了一个新的 O365 用户,因此它不使用重定向到本地 STS/ADFS。 这解决了错误👍

我切换到 sharepy,它运行 ootb 并涵盖我的条件

同样在这里:
找不到记录器“office365.runtime.auth.saml_token_provider.SamlTokenProvider._process_service_token_response”的处理程序

其他人的运气好吗?

也许以下有助于进一步缩小范围。

我可以在通用共享点 URL 上成功进行身份验证,但不能在指向特定团队频道的 URL 上成功进行身份验证。 以下代码可以正常工作:

url = "https://COMPANYNAME.sharepoint.com/"
username=raw_input("username: ")
password=raw_input("password: ")
ctx_auth = AuthenticationContext(url=url)
if ctx_auth.acquire_token_for_user(username=username, password=password):

但是当我将 URL 替换为:

url = "https://COMPANYNAME.sharepoint.com/sites/TEAMSCHANNEL/"

然后我收到以下错误::

No handlers could be found for logger "office365.runtime.auth.saml_token_provider.SamlTokenProvider.acquire_authentication_cookie"

任何解决方法都值得赞赏 - 在我的浏览器中,我可以很好地看到它们。

我们找到了上述用例的解决方法。 只需使用基本网址即可获取AuthenticationContext 。 可以使用不同的 url 创建新的ClientContext对象。

base_url = "https://COMPANYNAME.sharepoint.com/"
ctx_auth = AuthenticationContext(url=base_url)
if not ctx_auth.acquire_token_for_user(username=user, password=password):
    sys.exit('Error in getting token - quitting')
url = base_url + "sites/TEAMSCHANNEL/"
ctx = ClientContext(url, ctx_auth)
..
..

大家好!

从报告此问题的那一刻起直到现在,在_支持 SharePoint Online 基于 SAML 的联合身份验证_方面进行了以下改进/错误修复:

  • #210 - 无法连接到 SharePoint(如果联合,acquire_authentication_cookie 错误)
  • #170 - 检索令牌时出错:AADSTS50126:由于用户名或密码无效,验证凭据时出错
  • #85 - 将 Office-365-REST 与 ADFS 结合使用
  • #84 - 使用本地 STS 的站点不进行身份验证 (AADSTS70002)

因此,提供的错误不应再发生,只需确保获取 _latest_ 版本( 2.1.10.1或更高版本)。

此页面是否有帮助?
0 / 5 - 0 等级