如何通过OAuth2授予对sharepoint网站上读写文件的访问权限

问题描述 投票:0回答:1

我不知道如何给一个应用程序读写访问一个Sharepoint站点。

下面是我所做的。

  1. 我做了一个Sharepoint网站
  2. 我创建了一个microsoft azure应用程序,并使用OAuth2认证用户。
  3. 我在应用程序控制面板上设置了委托权限,包括Files.ReadWrite.All。
  4. 我创建了一个对sharepoint网站有读写权限的用户,并通过应用程序对他进行了认证。
  5. 我有一个程序(在PHP中),它有有效的access_token和refresh_token,但当我试图上传文件时,我得到一个403错误。
Client error: `PUT https://graph.microsoft.com/v1.0/drives/b!XxxxxxxxxxxxxxxxB/items/root:/StationMD%20Addl%20Enrollees%2020200508.xlsx:/content` resulted in a `403 Forbidden` response:
{
  "error": {
    "code": "accessDenied",
    "message": "Access denied",
    "innerError": {

奇怪的是,我能够以创建网站的用户身份进行操作,但不能以虚拟用户(他也有读写文件的权限)的身份进行操作。

所以...

问题似乎是应用程序的权限。是否有办法只为那个sharepoint站点设置应用程序权限,还是Files.ReadWrite.All是我唯一的选择?我可以为当前未登录但通过OAuth2认证的用户使用委托权限吗?


更多信息 51620

我有两个用户。一个是我的常规账户,我用来创建Sharepoint网站。另一个是用于上传文件的 "服务帐户"。两个用户都可以使用 GUI 编辑上传删除文件。然而,当使用 API 时,服务用户不能上传文件,而普通用户可以。我确保两个用户都是网站的成员。使用 图形浏览器我可以看到驱动器。

https://graph.microsoft.com/v1.0/drives/b!XXXXxxxxx
{
    "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#drives/$entity",
    "createdDateTime": "2020-04-26T11:19:17Z",
    "description": "",
    "id": "b!XXXXXxxxxx",
    "lastModifiedDateTime": "2020-05-16T11:56:23Z",
    "name": "Documents",
    "webUrl": "https://xxxxxxx.sharepoint.com/sites/sftp/Shared%20Documents",
    "driveType": "documentLibrary",
    "createdBy": {
        "user": {
            "displayName": "System Account"
        }
    },
    "owner": {
        "group": {
            "email": "[email protected]",
            "id": "xxxxx-xx-xxxx-xxxx-xxxxxxxx",
            "displayName": "sftp Owners"
        }
    },
    "quota": {
        "deleted": 2812850,
        "remaining": 27487773843447,
        "state": "normal",
        "total": 27487790694400,
        "used": 8848121
    }
}
sharepoint oauth-2.0 azure-active-directory microsoft-graph
1个回答
0
投票

自从我使用SharePoint以来,已经有相当长的一段时间了,但我会尝试为Azure AD相关的问题进行解答。

奇怪的是,我能够作为创建站点的用户来做这件事,但不是作为一个虚拟用户(他也有读写文件的权限)。

这很奇怪。我希望调用与应用程序的权限工作:\\。

有没有办法只为那个sharepoint站点设置应用权限,或者Files.ReadWrite.All是我唯一的选择?

这个我不清楚.你可以给应用程序委托权限Files.ReadWrite.All,允许你访问修改任何用户可以的文件,或者你可以给应用程序权限Files.ReadWrite.All,允许应用程序访问修改任何站点集合中的任何文件。

我可以为当前未登录但通过OAuth2认证的用户使用委托权限吗?

简而言之,是的。如果他们至少认证过一次你的应用程序,当他们认证时,你得到了该用户的刷新令牌,安全地存储该刷新令牌,并在需要时使用它来获得新的访问令牌。

  • 刷新令牌本身会在一段时间后过期(可能是2周)。
    • 当你使用该刷新令牌获得新的令牌时,你也会获得一个新的刷新令牌。
  • 令牌刷新可能会因为某些因素而失败,你的应用应该为此做好准备。
    • 用户必须再次进行身份验证,以提供一个新的刷新令牌。

0
投票

根据我的了解。

在应用权限中不能限制到特定的网站(需要时在逻辑中限制)。

如果要跳过用户登录,请使用应用程序权限。

如果要使用图形API,请使用Microsoft Graph的权限来访问SharePoint中的数据。

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.