【问题标题】:Access SharePoint Online files from daemon app从守护程序应用访问 SharePoint Online 文件
【发布时间】:2016-07-12 23:31:05
【问题描述】:

守护程序应用程序(仅限应用程序,无经过身份验证的用户)是否可以通过 Microsoft Graph API 访问 SharePoint Online 内容?如果没有,我有什么选择?

我试过了:

https://graph.microsoft.com/v1.0/drives/<id>

但访问被拒绝。

通过以下方式访问 Office 365 组中的驱动器:

https://graph.microsoft.com/v1.0/groups/<id>/drive

这是我检索授权令牌的方式:

https://login.microsoftonline.com/<tenant id>/oauth2/token
resource=https://graph.microsoft.com
grant_type=client_credentials
client_id=<client id>
client_secret=<client secret>

【问题讨论】:

    标签: office365 sharepoint-online microsoft-graph-api


    【解决方案1】:

    您可以读取组文件的原因是应用程序令牌具有 Group.Read.All 规则。没有像 Files.Read.All 这样的应用专用范围来允许应用读取 SharePoint 在线网站上的所有文件。

    目前,Microsoft Graph API 仅支持通过委托令牌获取属于自己的文件或他人共享给自己的文件。

    如果您希望应用程序获取文件而不是用户登录,一种可能的解决方法是您可以在第一时间手动获取访问令牌和刷新令牌并将它们保存在应用程序中。然后就可以调用带有访问令牌的REST API,并在访问令牌过期时更新访问令牌/刷新令牌。

    如果您需要此功能,您可以提交来自here 的反馈。

    【讨论】:

    • 感谢您的回答。您是说守护程序应用程序可以使用刷新令牌运行数月吗?它将计划每天运行一次。
    • 是的。刷新令牌的有效期为 14 天,连续使用最长可达 90 天。 90 天后,将要求用户重新进行身份验证。参考详情here
    【解决方案2】:

    您检查过Build service and daemon apps in Office 365。基本思想是创建一个 Azure AD 应用程序以使用仅限应用程序的令牌。以下是步骤摘要:

    • 创建您的 Azure AD 应用程序
    • 创建证书以保护您的令牌请求过程。你需要 更新 Azure AD 应用清单文件中的证书信息。
    • 配置 Azure AD 应用程序的配置以允许某些权限 在“应用程序权限”列表下。

    通过使用 App-only 令牌,您的应用程序可以代表 Azure AD 中的其他用途。您可以调用https://graph.microsoft.com/v1.0/{user's UPN or ID}/drive/root/children 来获取基于 Graph API 的用户文件。我已经尝试过这种方法来访问 SharePoint 列表和文档库中的内容。当我更新列表项或文档时,该 Azure AD 应用程序的名称显示了“修改者”。 我还使用相同的方法访问 Outlook 以代表服务帐户发送电子邮件。详情请参考Send email on behalf of a service account using Office Graph API

    希望对您有所帮助,如果您对纯应用令牌配置有任何疑问,请告诉我。

    【讨论】:

    • 谢谢。您能否向我展示一个访问 SharePoint 列表的 REST 调用示例?例如,我将如何访问站点 mytenant.sharepoint.com/SiteName 中名为 ToDoList 的任务列表中的项目?
    • 完整版请参考我刚刚创建的github.com/frankchen76/MediumSample/tree/master/…
    • 谢谢,但恐怕这不是我想要的。我的问题是关于通过 Graph API 访问 SP 列表,据我了解,您的示例是关于访问电子邮件(并且没有 Graph API)。
    • 我的示例最初来自通过 Graph API 发送电子邮件。由于机制相同,我使用相同的方式获取访问令牌和访问 SPO REST API。您可以在第 26 行到第 32 行找到 SPO 的设置。对于 Graph API,您只能访问与特定用户关联的文件,而不是列表。您最初的问题是“守护程序应用程序(仅限应用程序,没有经过身份验证的用户)是否可以通过 Microsoft Graph API 访问 SharePoint Online 内容?如果不能,我有什么选择?”我认为您可能可以使用 SPO REST API 通过守护程序应用程序的纯应用令牌获取 SPO 内容。
    猜你喜欢
    • 1970-01-01
    • 2020-04-03
    • 1970-01-01
    • 2017-09-24
    • 2012-08-13
    • 1970-01-01
    • 1970-01-01
    • 2016-07-23
    • 2018-04-06
    相关资源
    最近更新 更多