如何通过Microsoft Graph API获取OneDrive特定共享链接的授权用户信息
获取OneDrive共享链接的授权人员信息(Graph API方案)
我之前也碰到过一模一样的问题:OneDrive界面明明能看到共享链接对应的授权用户,但调用Graph API返回的权限对象里只有scope: "users",完全看不到关联的用户信息。其实核心问题是默认的权限查询不会返回关联的身份数据,需要显式扩展属性。
下面是具体的解决步骤:
1. 修改Graph API请求,添加扩展参数
默认调用GET /drives/{drive-id}/items/{item-id}/permissions/{permission-id}只会返回基础权限信息(就是你贴的那个响应)。要获取授权用户,需要在请求中加上$expand=grantedToIdentitiesV2(推荐用V2版本,包含更完整的身份信息)。
完整请求示例:
GET https://graph.microsoft.com/v1.0/drives/{drive-id}/items/{item-id}/permissions/{permission-id}?$expand=grantedToIdentitiesV2
2. 解析返回的授权用户信息
加上扩展参数后,响应里会多出grantedToIdentitiesV2数组,里面包含所有被授权的用户详情,示例如下:
{ "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#drives('b***')/items('0***')/permissions/$entity", "id": "***-c555beee2324", "roles": [ "read" ], "link": { "scope": "users", "type": "view", "webUrl": "***qbagBM9ioYBhgkVqZx4blggM7Ow" }, "grantedToIdentitiesV2": [ { "user": { "id": "user-id-123", "displayName": "张三", "userPrincipalName": "zhangsan@contoso.com" } } ] }
3. 确认权限范围
确保你的应用已经申请了足够的Graph API权限,比如Files.Read.All(针对个人OneDrive)或Sites.Read.All(针对SharePoint/OneDrive for Business),否则可能无法获取到身份扩展信息。
补充说明
OneDrive UI之所以能直接看到授权用户,是因为它内部调用的Graph API请求已经自动包含了$expand参数,而我们手动调用时需要显式指定这一步。另外,如果你使用beta版本的Graph API,还能获取到更多额外的身份属性,但v1.0版本已经足够满足基本需求。
内容的提问来源于stack exchange,提问作者Amiram Krasner
相关产品推荐
相关产品推荐

