OneDrive API - 参考要上传或下载的 Sharepoint 文件 - 受众无效错误
OneDrive API - Refer to Sharepoint file to upload or download - invalid audience error
我想以编程方式与 Office 365 E3 Sharepoint 站点中的文件进行交互。
我正在使用 Azure AD 和 ADAL Python library 来验证对 Sharepoint 站点文件的访问。
import adal
import urllib
import requests
import urllib2
## set variables
username = 'curtis@tenant.onmicrosoft.com'
password = 'OFoarry8Oe$'
authorization_url = 'https://login.windows.net/tenant.onmicrosoft.com' # Authority
redirect_uri = 'https://login.microsoftonline.com/login.srf'
client_id = 'dcbf844f-d2c3-42d1-8a7d-0f838f57899a' # Client id
## use ADAL to create token response
token_response = adal.acquire_token_with_username_password(
authorization_url,
username,
password
)
## endpoints discovery
## https://api.office.com/discovery/v2.0/me/allServices
## create refresh token and save it to use later
refresh_token = token_response['refreshToken']
refresh_token_file = open('refresh_token.txt', 'w')
refresh_token_file.write(refresh_token)
refresh_token_file.close()
## get saved refresh token and use it to get new token response
refresh_token = open('refresh_token.txt', 'r').read()
token_response = adal.acquire_token_with_refresh_token(authorization_url, str(refresh_token))
## get access_token from token response
access_token = token_response.get('accessToken')
headers = {'Authorization':'BEARER ' + str(access_token)}
如我所愿认证成功
print access_token
其中 returns 一个标记字符串。
我正在努力研究用于从 Sharepoint 文件夹下载和上传文件的语法。这是我目前所拥有的:
## download file
file_url = 'https://tenant.sharepoint.com/_api/v1.0/files/root:/myfoldername/myfilename.csv:/content'
r = requests.get(file_url, headers=headers)
print r.text
到目前为止我还没有能够成功引用该文件。我收到一个错误:
{"error":"invalid_client","error_description":"Invalid audience Uri 'https:\/\/management.core.windows.net\/'."}
这似乎表明我指的是 wrong Site. or perhaps referring to
这是我从 Sharepoint 站点获得的我要下载的文件(从其在 Sharepoint 中的属性)获得的 url:
https://tenant.sharepoint.com/Shared%20Documents/myfoldername/myfilename.csv
来自 Sharepoint 站点的文件的 url 是否有助于定义 file_url
语法应该是什么?如果不是,我还能如何确定 file_url
应该是什么?
根据代码,您已使用 Azure AD 进行身份验证,但调用 SharePoint REST API。 SharePoint REST 是不同的身份验证流程。您可以从 here.
中引用它
在您的方案中,我们可以使用 Microsoft Graph API 从 Office 365 中的 SharePoint 站点下载内容。以下是在您的默认站点上下载文件内容的示例:
GET: https://graph.microsoft.com/v1.0/me/drive/root:/test.txt:/content
authorization: bearer {token}
有关 Microsoft Graph API 的更多详细信息,请参阅以下链接:
https://graph.microsoft.io/en-us/docs/api-reference/v1.0/api/item_downloadcontent
https://graph.microsoft.io/en-us/docs/authorization/app_authorization
飞雪让我走上了正确的道路。我的代码正在请求 ADAL 未预期的资源。
原来 __init__.py
中的 adal.acquire_token_with_username_password
有 default values(参见 class _DefaultValues
中代码的底部)client_id
和 resource
。
ADAL 的默认资源是 https://management.core.windows.net/
,这是它期望我的 file_url
资源具有的资源。 invalid audience
是 https://tenant.sharepoint.com
。
所以我更改了 ADAL 的默认值:
`client_id` = my Azure AD app's client_id
`resource` = `https://tenant.sharepoint.com/`
ADAL 的 acquire_token_with_username_password
(见下文)将 client_id
和 resource
设置为 None
。我没有尝试,但猜测这些可以被编辑以删除 =None
并在我的代码中设置而不是 class _DefaultValues
.
def acquire_token_with_username_password(
authority,
username,
password,
client_id=None,
resource=None,
validate_authority=True
):
并且还对我的 file_url
(url 文件名)进行了较小的(但需要)更改为:
file_url = 'https://pokrant.sharepoint.com/_api/v2.0/drive/root:/analytics/output_analytics.csv:/content'
现在,当我 运行 编码时,我会在控制台中打印出 csv 文件内容。
我想以编程方式与 Office 365 E3 Sharepoint 站点中的文件进行交互。
我正在使用 Azure AD 和 ADAL Python library 来验证对 Sharepoint 站点文件的访问。
import adal
import urllib
import requests
import urllib2
## set variables
username = 'curtis@tenant.onmicrosoft.com'
password = 'OFoarry8Oe$'
authorization_url = 'https://login.windows.net/tenant.onmicrosoft.com' # Authority
redirect_uri = 'https://login.microsoftonline.com/login.srf'
client_id = 'dcbf844f-d2c3-42d1-8a7d-0f838f57899a' # Client id
## use ADAL to create token response
token_response = adal.acquire_token_with_username_password(
authorization_url,
username,
password
)
## endpoints discovery
## https://api.office.com/discovery/v2.0/me/allServices
## create refresh token and save it to use later
refresh_token = token_response['refreshToken']
refresh_token_file = open('refresh_token.txt', 'w')
refresh_token_file.write(refresh_token)
refresh_token_file.close()
## get saved refresh token and use it to get new token response
refresh_token = open('refresh_token.txt', 'r').read()
token_response = adal.acquire_token_with_refresh_token(authorization_url, str(refresh_token))
## get access_token from token response
access_token = token_response.get('accessToken')
headers = {'Authorization':'BEARER ' + str(access_token)}
如我所愿认证成功
print access_token
其中 returns 一个标记字符串。
我正在努力研究用于从 Sharepoint 文件夹下载和上传文件的语法。这是我目前所拥有的:
## download file
file_url = 'https://tenant.sharepoint.com/_api/v1.0/files/root:/myfoldername/myfilename.csv:/content'
r = requests.get(file_url, headers=headers)
print r.text
到目前为止我还没有能够成功引用该文件。我收到一个错误:
{"error":"invalid_client","error_description":"Invalid audience Uri 'https:\/\/management.core.windows.net\/'."}
这似乎表明我指的是 wrong Site. or perhaps referring to
这是我从 Sharepoint 站点获得的我要下载的文件(从其在 Sharepoint 中的属性)获得的 url:
https://tenant.sharepoint.com/Shared%20Documents/myfoldername/myfilename.csv
来自 Sharepoint 站点的文件的 url 是否有助于定义 file_url
语法应该是什么?如果不是,我还能如何确定 file_url
应该是什么?
根据代码,您已使用 Azure AD 进行身份验证,但调用 SharePoint REST API。 SharePoint REST 是不同的身份验证流程。您可以从 here.
中引用它在您的方案中,我们可以使用 Microsoft Graph API 从 Office 365 中的 SharePoint 站点下载内容。以下是在您的默认站点上下载文件内容的示例:
GET: https://graph.microsoft.com/v1.0/me/drive/root:/test.txt:/content
authorization: bearer {token}
有关 Microsoft Graph API 的更多详细信息,请参阅以下链接:
https://graph.microsoft.io/en-us/docs/api-reference/v1.0/api/item_downloadcontent
https://graph.microsoft.io/en-us/docs/authorization/app_authorization
飞雪让我走上了正确的道路。我的代码正在请求 ADAL 未预期的资源。
原来 __init__.py
中的 adal.acquire_token_with_username_password
有 default values(参见 class _DefaultValues
中代码的底部)client_id
和 resource
。
ADAL 的默认资源是 https://management.core.windows.net/
,这是它期望我的 file_url
资源具有的资源。 invalid audience
是 https://tenant.sharepoint.com
。
所以我更改了 ADAL 的默认值:
`client_id` = my Azure AD app's client_id
`resource` = `https://tenant.sharepoint.com/`
ADAL 的 acquire_token_with_username_password
(见下文)将 client_id
和 resource
设置为 None
。我没有尝试,但猜测这些可以被编辑以删除 =None
并在我的代码中设置而不是 class _DefaultValues
.
def acquire_token_with_username_password(
authority,
username,
password,
client_id=None,
resource=None,
validate_authority=True
):
并且还对我的 file_url
(url 文件名)进行了较小的(但需要)更改为:
file_url = 'https://pokrant.sharepoint.com/_api/v2.0/drive/root:/analytics/output_analytics.csv:/content'
现在,当我 运行 编码时,我会在控制台中打印出 csv 文件内容。