2017-01-18 3 views
2

Я пытаюсь получить мои сообщения электронной почты из учетной записи Outlook через Javascript. Я использую ADAL для аутентификации, и это, похоже, работает. Однако, если я пытаюсь использовать возвращаемые маркер в запросе GET на внешний вид REST API я получаю несанкционированную ошибку обратно со следующей дополнительной информации в заголовке: x-ms-diagnostics:2000001;reason="This token profile 'V1IdToken' is not applicable for the current protocol.";error_category="invalid_token"Outlook REST API: V1IDToken не применим для текущего протокола

Мой запрос выглядит так:

function test2(token) { 
     try 
     { 
     var xhr = new XMLHttpRequest(); 
     xhr.open("GET", 'https://outlook.office.com/api/v1.0/me/messages'); 

     // The APIs require an OAuth access token in the Authorization header, formatted like this: 'Authorization: Bearer <token>'. 
     xhr.setRequestHeader("Authorization", "Bearer " + token); 

     // Process the response from the API. 
     xhr.onload = function() { 
      // ... 
     } 

     // Make request. 
     xhr.send(); 

Я оба попробовал v1.0 и v2.0 REST api.

+0

Пожалуйста, дайте мне знать, если ответ помогает. –

ответ

1

На основании сообщения об ошибке вы запросили Outlook REST с помощью id_token. id_token используется только для аутентификации пользователей клиентом. Чтобы запросить онлайн-REST Outlook, нам нужно использовать токен .

И если вы разрабатывали с помощью angularJS, нет необходимости добавлять маркер вручную. Ниже приведен пример кода для справки:

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.25/angular.min.js"></script> 
 

 
<script src="https://secure.aadcdn.microsoftonline-p.com/lib/1.0.13/js/adal.min.js"></script> 
 
<script src="https://secure.aadcdn.microsoftonline-p.com/lib/1.0.13/js/adal-angular.min.js"></script> 
 
<script src="//unpkg.com/angular-ui-router/release/angular-ui-router.min.js"></script> 
 
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.25/angular-route.js"></script> 
 

 
<div ng-app="myApp"> 
 
    <div> Hello {{ userInfo.userName }}</div> 
 
    <div ng-controller="homeCtrl"> 
 
     <ul class="nav navbar-nav navbar-right"> 
 
      <li><a ng-click="getMessages()">Get Messages</a></li> 
 
      <li><a class="btn btn-link" ng-show="userInfo.isAuthenticated" ng-click="logout()">Logout</a></li> 
 
      <li><a class="btn btn-link" ng-hide="userInfo.isAuthenticated" ng-click="login()">Login</a></li> 
 
     </ul> 
 

 
     <div> 
 
      <table class="table table-striped"> 
 
       <tbody> 
 
        <tr data-ng-repeat="item in messages"> 
 
         <td> 
 
          <p>{{item.Subject}}</p> 
 
         </td> 
 
         <td> 
 
          <p>{{item.Sender.EmailAddress.Address}}</p> 
 
         </td> 
 
        </tr> 
 
       </tbody> 
 
      </table> 
 
     </div> 
 
    </div> 
 
</div> 
 

 
<script> 
 
    var myApp = angular.module('myApp', ['AdalAngular']) 
 
.config(['$httpProvider', 'adalAuthenticationServiceProvider', function ($httpProvider, adalProvider) { 
 

 
    var endpoints = { 
 
     "https://outlook.office.com": "https://outlook.office.com", 
 
    }; 
 

 
    adalProvider.init(
 
     { 
 
      instance: 'https://login.microsoftonline.com/', 
 
      tenant: '{yourTenant}.onmicrosoft.com', 
 
      clientId: '{yourAppId}', 
 
      extraQueryParameter: 'nux=1', 
 
      endpoints: endpoints, 
 
     }, 
 
     $httpProvider 
 
     ); 
 

 

 
}]) 
 
    myApp.controller('homeCtrl', ['$scope', '$http', 'adalAuthenticationService', '$location', 'toGetMessagesSvc', function ($scope, $http, adalService, $location, toGetMessagesSvc) { 
 

 
     $scope.login = function() { 
 
      adalService.login(); 
 
     }; 
 
     $scope.logout = function() { 
 
      adalService.logOut(); 
 
     }; 
 

 
     $scope.getMessages = function() { 
 
      toGetMessagesSvc.getMessages().success(function (results) { 
 
       $scope.messages = results.value; 
 
       $scope.loadingMessage = ""; 
 
      }); 
 
     } 
 

 

 
    }]); 
 

 
    myApp.factory('toGetMessagesSvc', ['$http', function ($http) { 
 

 
     var apiEndpoint = "https://outlook.office.com/"; 
 
     $http.defaults.useXDomain = true; 
 
     delete $http.defaults.headers.common['X-Requested-With']; 
 
     return { 
 
      getMessages: function() { 
 
       return $http.get(apiEndpoint + 'api/v1.0/me/messages'); 
 
      } 
 
     }; 
 
    }]); 
 

 
</script>

 Смежные вопросы

  • Нет связанных вопросов^_^