我正在尝试进行身份验证并在OneDrive中签名以获取访问令牌。
我已在Azure Active Directory中注册了我的应用程序,并且我已经获得了client_Id和Client_Secret。基于OneDrive API Documentation,下一步是登录以获取将用于获取访问令牌的授权代码。我能够成功获取代码,但下一步是使用以下参数的POST:
POST https://login.microsoftonline.com/common/oauth2/token
内容类型:application / x-www-form-urlencoded
参数:
client_id:
redirect_uri:
client_secret:
code:
resource: The resource you want to access. ????
此时我将如何知道要访问的资源,不清楚要为此参数发送什么值。
我将它留空,我得到一个" Access-Control-Allow-Origin"错误:
XMLHttpRequest无法加载https://login.microsoftonline.com/common/oauth2/token。 No' Access-Control-Allow-Origin'标头出现在请求的资源上。起源' http://localhost:23320'因此不允许访问。响应的HTTP状态代码为400。
这是我的代码:
var bodyInfo = {
client_id: {client_id},
redirect_uri: {redirect_uri},
client_secret: {client_secret},
code: {code},
grant_type: 'authorization_code',
resource:?????
};
$.ajax({
url: "https://login.microsoftonline.com/common/oauth2/token",
type: "POST",
data: bodyInfo,
success: function (data, textStatus, jqXHR) {
window.alert("Saved successfully!");
},
error: function (jqXHR, textStatus, errorThrown) {
}
});
我真的很感激任何帮助。
答案 0 :(得分:1)
要了解您需要的资源,您应该先使用office发现api(并先验证它):
在大多数情况下,OneDrive for Business API端点URL将不知道。要发现端点URL,您需要调用Office 365 Discovery API。要使用发现API进行身份验证,您需要为资源https://api.office.com/discovery/请求访问令牌。确保包含尾随/字符,否则将拒绝您的应用访问发现API。
然后您需要获取服务数据(步骤3)
GET https://api.office.com/discovery/v2.0/me/services
Authorization: Bearer {access_token}
访问令牌应该在第2步的响应中。
响应应该是这样的:
{
"@odata.context": "https:\/\/api.office.com\/discovery\/v1.0\/me\/$metadata#allServices",
"value": [
{
"@odata.type": "#Microsoft.DiscoveryServices.ServiceInfo",
"capability": "MyFiles",
"serviceApiVersion": "v2.0",
"serviceEndpointUri": "https:\/\/contoso-my.sharepoint.com\/_api\/v2.0",
"serviceResourceId": "https:\/\/contoso-my.sharepoint.com\/"
}
]
}
然后你应该找到serviceResourceId(在值数组的json对象里面),并使用它来获取一个驱动器的正确令牌(步骤4)。