我尝试通过使用秘密的应用程序注册生成访问令牌来使用 Python 读取 SharePoint 网站。我还授予了该应用程序的读/写访问权限。然而,这个方法失败了。另一方面,当我使用委派权限进行身份验证时,我能够成功访问 SharePoint 网站。为什么我在第一种情况下无法访问 SharePoint 网站?
我尝试使用 deligated 并且我能够阅读 但我想集成客户端秘密以避免登录身份验证。
注意:如果您使用客户端凭证流,则需要在 XML 请求中授予应用程序访问该站点的权限。
授予站点.选定的应用程序类型API权限:
导航至
https://TenantDomain.sharepoint.com/sites/SiteName/_layouts/15/appinv.aspx
并创建:
<AppPermissionRequests AllowAppOnlyPolicy="true">
<AppPermissionRequest Scope="http://sharepoint/content/sitecollection" Right="FullControl" />
</AppPermissionRequests>
使用以下代码访问SharePoint网站:
from azure.identity import ClientSecretCredential
import requests
client_id = 'ClientID'
client_secret = 'Secret'
tenant_id = 'TenantID'
scope = ['https://graph.microsoft.com/.default']
credential = ClientSecretCredential(
tenant_id=tenant_id,
client_id=client_id,
client_secret=client_secret
)
token = credential.get_token(*scope)
access_token = token.token
url = 'https://graph.microsoft.com/v1.0/sites/Tenant.sharepoint.com:/sites/SiteName:/'
headers = {
'Authorization': f'Bearer {access_token}',
'Content-Type': 'application/json'
}
response = requests.get(url, headers=headers)
if response.status_code == 200:
print(response.json())
else:
print(f"Error {response.status_code}: {response.text}")
否则使用 PnP PowerShell 将应用程序分配到选定的 SharePoint 站点,请参阅 博客,作者为 Sang Huynh。