使用OneDrive API获取访问令牌

时间:2016-08-11 14:54:47

标签: oauth office365 access-token onedrive

我正在尝试进行身份验证并在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) {

        }
    });

我真的很感激任何帮助。

1 个答案:

答案 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)。