【问题标题】:Get Access Token with OneDrive API使用 OneDrive API 获取访问令牌
【发布时间】:2016-12-18 09:30:18
【问题描述】:

我正在尝试在 OneDrive for business 中进行身份验证并登录以获取访问令牌。

我已在 Azure Active Directory 中注册了我的应用程序,并获得了我的 client_Id 和我的 Client_Secret。基于OneDrive API Documentation,下一步是登录以获取将用于获取访问令牌的授权码。我能够成功获取代码,但下一步是带有以下参数的 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”标头。因此,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) {

        }
    });

非常感谢任何帮助。

【问题讨论】:

    标签: oauth office365 access-token onedrive


    【解决方案1】:

    要知道您需要的资源,您应该首先使用 office 的发现 api(并首先对其进行身份验证):

    在大多数情况下,OneDrive for Business API 端点 URL 是未知的。要发现终结点 URL,您需要调用 Office 365 发现 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(在 value 数组的 json 对象内),并使用它为一个驱动器获取正确的令牌(步骤 4)。

    【讨论】:

    • 知道如何使用office的discover api吗?我找不到一个明确的例子。
    • Here 是 Discovery Service REST API 参考文档。
    猜你喜欢
    • 2021-07-01
    • 1970-01-01
    • 2020-08-06
    • 2012-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-14
    • 2016-07-12
    相关资源
    最近更新 更多