从守护程序应用程序访问 SharePoint Online 文件

Access SharePoint Online files from daemon app

守护程序应用程序(仅应用程序,无经过身份验证的用户)是否可以通过 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>

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

目前,Microsoft Graph API 仅支持使用委托令牌获取属于 himself/herself 的文件或其他人共享给 himself/herself 的文件。

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

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

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

  • 创建您的 Azure AD 应用程序
  • 创建一个证书来保护您的令牌请求过程。你需要 更新 Azure AD 应用程序清单文件中的证书信息。
  • 配置 Azure AD App 的配置以允许特定权限 在 "Application Permissions" 列表下。

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

希望对您有所帮助,如果您对仅限应用程序的令牌配置有疑问,请告诉我。