如何使用刷新令牌更新Outlook 2.0 API令牌?

时间:2018-11-05 12:39:09

标签: javascript outlook outlook-restapi

我有下一种情况: 主要的身份验证流程发生在服务器上,然后客户端获取这些数据,因为那一刻我想让客户端能够自行更新令牌。似乎客户端上有所有需要的数据(access_token,refresh_token),但我不知道如何组织请求到https://login.microsoftonline.com/common/oauth2/v2.0/token路由。

首先,我尝试获取json响应:

$.ajax({
  url: `https://login.microsoftonline.com/common/oauth2/token?grant_type=refresh_token&refresh_token=refresh_token&scope=openid%20profile%20offline%20access%20user.read%20mail.read%20contacts.read%20calendars.read&client_id=client&client_secret=secret`,
  type: 'POST',
  cache: false,
  processData: false,
  contentType: false,
  dataType: 'json',
  headers: {
    'Host': 'https://login.microsoftonline.com',
    'Content-Type': 'application/json'
  },
  success: function(data) {
    ...
  },
  error: function(xhr) {
    ...
  }
});

之后,我发现只能通过重定向获取此数据,对吗?如果是这样,有人可以提供一个有关如何实现此目标的示例,看起来需要创建一个iframe并以某种方式处理授权。谢谢。

更新: 正如Alina Li在评论她的答案时指出的那样,官方文档https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-auth-code-flow

中有一个解决方案

1 个答案:

答案 0 :(得分:1)

根据我的测试,您可以通过以下代码使用刷新令牌:

var data = "grant_type=refresh_token&refresh_token=refreshToken&client_id=" + appState.clientId;
        $http = $http || $injector.get('$http');
        $http.post(authUrl + '/token', data, {
            headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
        }).success(function (response) {

        }).error(function (err, status) {

        });

您不需要添加scope参数。

引用来自:

Storing Refresh Token In JavaScript, Getting New Access Token