我一直在尝试根据这个 OneDrive Release Notes 实现 OneDrive Business API。我们已经实现了 OneDrive 最终用户 API,没有任何问题。
显而易见的第一件事是处理 OAuth2 身份验证以获取正确的 token ,首先发现 {tenant}-my.sharepoint.com 特定租户 OneDrive Business URI,然后获取该租户的 token 。可以找到用于该目的的文档 here 。
按照该教程,我们已经能够执行以下操作:
可以理解的是,我们在第 2 步中遇到了问题, 发现 OneDrive for Business 资源 URI 和 向 OneDrive API 0x25181914213 发出请求。
发现 OneDrive for Business 资源 URI 的问题
这部分过程的问题是,虽然我们在 api.office.com/discovery/v2.0/me/services 与第一个 获得的访问 token 10x21212121212121212121212121121212121212121212121121214212121421212142141214212121421214111421411142121411142141114214111421411411142之后获得1411142后/discovery/ ,我们没有进入 OneDrive for Business 的服务租户特定共享点 URI 列表。根据文档,我们得到的列表中的任何条目都带有
capability = "MyFiles" AND serviceApiVersion = "v2.0"
。事实上,列表中的任何条目在 serviceEndpointUri 中都具有 {tenant}-my.sharepoint.com 结构。这是我回来的 JSON 响应。我删除了一些敏感数据:{
"@odata.context" : "https://api.office.com/discovery/v2.0/me/$metadata#allServices",
"value" : [ {
"capability" : "Directory",
"providerName" : "Microsoft",
"serviceAccountType" : 2,
"serviceApiVersion" : "",
"serviceEndpointUri" : "http://azure.microsoft.com/",
"serviceName" : "Microsoft Azure",
"serviceResourceId" : null
}, {
"capability" : "MyFiles",
"providerName" : "Microsoft",
"serviceAccountType" : 2,
"serviceApiVersion" : "",
"serviceEndpointUri" : "http://www.microsoft.com/en-us/office365/online-software.aspx",
"serviceName" : "Office 365 SharePoint",
"serviceResourceId" : null
}, {
"capability" : "RootSite",
"providerName" : "Microsoft",
"serviceAccountType" : 2,
"serviceApiVersion" : "",
"serviceEndpointUri" : "http://www.microsoft.com/en-us/office365/online-software.aspx",
"serviceId" : "O365_SHAREPOINT",
"serviceName" : "Office 365 SharePoint",
"serviceResourceId" : null
}, {
"capability" : "MyFiles",
"providerName" : "Microsoft",
"serviceAccountType" : 1,
"serviceApiVersion" : "",
"serviceEndpointUri" : "https://g.live.com/8seskydrive/HomePageUrl",
"serviceName" : "OneDrive",
"serviceResourceId" : null
} ]
}
问题是如果我登录到我的 portal.office.com 并检查我的共享点 URL,它配置良好,我可以看到 {tenant}-my.sharepoint.com URI。
关于向 OneDrive API 发出请求的问题
除了我不能够发现正确租户的SharePoint URI ,如果我硬编码的URL赎回下一访问 token 要求与我租户的SharePoint URI ,我得到的访问 token ,但是当我想打一个电话以
https://{tenant}-my.sharepoint.com/drive/root
或任何其他端点为例,我在每次调用中都会收到 401 Unauthorize 响应,即使刚刚获得 token 也是如此。这是一个握手的例子。我正在隐藏敏感数据:curl -v 'https://{tenant}-my.sharepoint.com/drives' -H 'Authorization: Bearer TOKEN_ACQUIRED'
Connected to {tenant}-my.sharepoint.com port 443
GET /drives HTTP/1.1
Host: {tenant}-my.sharepoint.com
Authorization: Bearer TOKEN_ACQUIRED
HTTP/1.1 401 Unauthorized
你能给我建议吗?我的租户中是否缺少某些配置?我的 Azure AD 应用程序中是否缺少某些配置?
顺便说一句,我每次兑换的应用程序的权限范围是
AllSites.FullControl AllSites.Manage MyFiles.Write Sites.Search.All TermStore.ReadWrite.All User.Read.All
。我想我已经正确设置了权限。最好,
项目 list
最佳答案
可能有点晚了,但是这个 blog article 解决了如何使用 OneDrive API 和 OneDrive for Business API 完全相同。
这是一个快速的 Java 代码片段:
CloudRail.setAppKey("[CloudRail License Key]");
// CloudStorage cs = new OneDrive(redirectReceiver, "[clientIdentifier]", "[clientSecret]", "[redirectUri]", "[state]");
CloudStorage cs = new OneDriveBusiness(redirectReceiver, "[clientID]", "[clientSecret]", "[redirectUri]", "[state]");
new Thread() {
@Override
public void run() {
cs.createFolder("/TestFolder");
InputStream stream = null;
try {
stream = getClass().getResourceAsStream("Data.csv");
long size = new File(getClass().getResource("Data.csv").toURI()).length();
cs.upload("/TestFolder/Data.csv", stream, size, false);
} catch (Exception e) {
// TODO: handle error
} finally {
// TODO: close stream
}
}
}.start();
关于azure - OneDrive for Business API 发现和授权问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33753471/