首页 文章

使用OneDrive API获取访问令牌

提问于
浏览
0

我正在尝试进行身份验证并在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 . 请求的资源上没有'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 回答

  • 1

    要了解您需要的资源,您应该使用office的discover api(并首先对其进行身份验证):

    在大多数情况下,OneDrive for Business API endpoints URL将不知道 . 要发现 endpoints 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) .

相关问题