当前位置: 首页 > 知识库问答 >
问题:

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

安经纶
2023-03-14

我很难弄清楚如何让应用程序对Sharepoint站点进行读/写访问。

以下是我所做的:

  1. 我创建了一个sharepoint网站
  2. 我创建了一个microsoft azure应用程序,并使用OAuth2对用户进行了身份验证
  3. 我在应用程序控制面板上设置了包括文件的委派权限。读写。全部
  4. 我创建了一个对sharepoint网站具有读/写权限的用户,并用应用程序对其进行了身份验证
  5. 我有一个程序(在PHP中)具有有效的access\u令牌和refresh\u令牌,但当我尝试上载文件时,我得到了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网站或Is文件设置应用程序权限。读写。我唯一的选择?我可以为当前未登录但通过OAuth2进行身份验证的用户使用委派权限吗?

更多信息5/16/20

我有两个用户。一个是我用来创建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": "xxxx@xxxxxx.onmicrosoft.com",
            "id": "xxxxx-xx-xxxx-xxxx-xxxxxxxx",
            "displayName": "sftp Owners"
        }
    },
    "quota": {
        "deleted": 2812850,
        "remaining": 27487773843447,
        "state": "normal",
        "total": 27487790694400,
        "used": 8848121
    }
}

共有2个答案

闾丘鸣
2023-03-14

据我所知:

不能限制到应用程序中的特定站点权限级别(如果需要,在逻辑上进行限制)。

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

如果要使用Graph api,请使用Microsoft Graph中的权限访问SharePoint中的数据。

韦澄邈
2023-03-14

我已经很久没有使用SharePoint了,但我会尝试回答与Azure AD相关的问题。

奇怪的是,我能够以创建网站的用户的身份做到这一点,但不是作为一个虚拟用户(也有读写文件的权限)

这很奇怪。我希望调用可以使用应用程序具有的权限:\

是否有方法仅为该sharepoint网站或Is文件设置应用程序权限。读写。我唯一的选择?

这个我不确定。您可以向应用程序授予委托权限文件。读写。所有这些都允许您访问/修改用户可以访问的任何文件,或者您可以授予应用程序权限文件。读写。所有这些都允许应用程序访问/修改任何网站集中的任何文件。

我可以为当前未登录但通过OAuth2进行身份验证的用户使用委派权限吗?

简单回答,是的。如果他们至少对你的应用程序进行了一次身份验证,那么当他们进行身份验证时,你会得到该用户的刷新令牌。安全地存储该刷新令牌,并在需要时使用它来获取新的访问令牌。注意以下几点:

  • 刷新令牌本身将在一段时间后过期(也许2周?)
    • 当您使用该刷新令牌获得新令牌时,您也会获得一个新的刷新令牌
    • 用户必须再次验证才能提供新的刷新令牌

 类似资料:
  • 我正在努力通过Mircosoft Graph访问Sharepoint网站的文档库,但到目前为止没有任何运气。 这是我的设置: 我有两个网站 https://mydomain.sharepoint.com https://mydomain.sharepoint.com/teams/MyTestSite 当我对https://graph.microsoft.com/v1.0/drives进行api调用

  • 大家好,我想给文件以读模式或写模式打开的权限。ext包含文件扩展名,file_name包含文件名。f_p是一个可验证的输入,其中I是作为“r”或“w”模式的输入。这里我在不同的位置使用相同的文件 但是在这段代码中,我得到了错误,因为找不到符号:方法setReadable(布尔)location:fos2是FileOutputStream类型 <% %>https://jsfiddle.net/wc

  • 使用Microsoft GraphAPI,我可以访问SharePoint团队站点文档库和列表,但无法访问SharePoint通信站点。 中添加的应用权限: 文件夹。阅读全部,文件。读写。全部,组。阅读所有,站点。管理全部,用户。阅读,用户。阅读全部,用户。ReadBasic。全部的 用于访问SharePoint团队网站的endpoint: 我正在调用同一个endpoint来访问通信站点,但我得到了

  • 如果我把我的Applescript给另一个人,他们将不得不手动允许Applescript控制他们的计算机进入系统首选项,点击安全 如果没有添加applescript以便它可以控制,我会得到错误,“脚本编辑器不允许辅助访问。”

  • 问题内容: 我可以使用以下代码轻松地授予对一个IP的访问权限: 但是我需要允许整个子网192.168.1。*远程访问数据库。 我怎样才能做到这一点? 问题答案: 编辑:考虑在此页面上查看并认可Malvineous的答案。网络掩码是一种更为优雅的解决方案。 只需在IP地址中将百分号用作通配符即可。 从http://dev.mysql.com/doc/refman/5.1/en/grant.html

  • 问题内容: 我正在尝试使用PHP创建文件,但无法正常工作。我假设这是因为它没有写访问权限(以前一直是问题)。我试图通过使文件夹chmod 0777来测试这是否是问题,但是最终使该目录中的每个脚本都返回了500条错误消息,直到我将其改回为止。如何授予PHP对文件系统的写访问权,以便它可以创建文件? 编辑:它托管在使用Apache的Hostgator共享托管上。 编辑2:有人要求输入代码:该代码是GD