2014-07-10 3 views
0

Recherche d'un appel REST via SP.WebRequestInfo de SharePoint.Azure Active Directory Graph Appel REST api via SP.WebRequestInfo sur SharePoint Online

Je reçois l'erreur "Le serveur distant a renvoyé l'erreur suivante lors de l'établissement d'une connexion -" Non autorisé "." essayer d'appeler https://graph.windows.net/[Client]/users?api-version=2013-11-0.

J'ai réussi à récupérer un jeton d'accès.

Pouvez-vous m'aider pourquoi je reçois cette erreur?

Voici le code que je utilise:

 var url = "https://graph.windows.net/xxx/users/?api-version=2013-11-08"; 

     var context = SP.ClientContext.get_current(); 
     var request = new SP.WebRequestInfo(); 
     request.set_url(url); 
     request.set_method("GET"); 
     request.set_headers({ 
      "Authorization": token.token_type + " " + token.access_token, 
      "Content-Type": "application/json" 
     }); 

     var response = SP.WebProxy.invoke(context, request); 

     context.executeQueryAsync(successHandler, errorHandler); 

     function successHandler() { 
      if (response.get_statusCode() == 200) { 
       var responseBody = JSON.parse(response.get_body()); 
       deferred.resolve(responseBody); 
      } else { 

       var httpCode = response.get_statusCode(); 
       var httpText = response.get_body(); 
       deferred.reject(httpCode + ": " + httpText); 
      } 
     } 

Le code pour récupérer le jeton est:

this.getToken = function (clientId, clientSecret) { 
     var deferred = $q.defer(); 
     var resource = "https://graph.windows.net"; 
     var formData = "grant_type=client_credentials&resource=" + encodeURIComponent(resource)  + "&client_id=" + encodeURIComponent(clientId) + "&client_secret=" + encodeURIComponent(clientSecret); 

     var url = "https://login.windows.net/xxxxxx.onmicrosoft.com/oauth2/token?api-version=1.0"; 

     var context = SP.ClientContext.get_current(); 
     var request = new SP.WebRequestInfo(); 
     request.set_url(url); 
     request.set_method("POST"); 
     request.set_body(formData); 

     var response = SP.WebProxy.invoke(context, request); 

     context.executeQueryAsync(successHandler, errorHandler); 

     function successHandler() { 
      if (response.get_statusCode() == 200) { 
      var token = JSON.parse(response.get_body()); 
      deferred.resolve(token); 
     } else { 
      var httpCode = response.get_statusCode(); 
      var httpText = response.get_body(); 
      deferred.reject(httpCode + ": " + httpText); 
     } 
    } 

    function errorHandler() { 
     deferred.reject(response.get_body()); 
    } 

    return deferred.promise; 
    }; 
+0

Azure AD Graph API accepte les jetons d'accès avec l'audience 'https://graph.windows.net/'. S'il vous plaît montrez-moi le code qui acquiert le jeton. –

+0

@DushyantGill J'ai mis à jour la question avec le code qui acquiert le jeton. –

Répondre

0

Erik, quelque chose est étrange ici - vous utilisez le flux d'informations d'identification client à partir un client JavaScript - cela révèle le secret délivré à l'application cliente à l'utilisateur de l'application JS. Le flux d'informations d'identification du client requiert également que l'administrateur du répertoire accorde l'autorisation de lecture du répertoire à l'application cliente - pas sûr si celle-ci est déjà configurée - mais ne doit être utilisé qu'avec un client confidentiel comme une application JS . Azure AD n'implémente pas encore le flux oauth implicit_grant à l'aide duquel une application cliente JS peut acquérir un jeton d'accès pour le compte de l'utilisateur via la liaison de redirection (dans le fragment). C'est une exigence hugh-pro sur laquelle nous travaillons - restez à l'écoute.

+0

Merci Dushyant, avec impatience les nouvelles fonctionnalités. Est-il prévu de soutenir JSONP dans l'API? –

+0

Bonjour Dushyant, nous travaillons sur une application client basée sur AngularJS et nous cherchons également une méthode pour acquérir un jeton d'accès pour interroger Azure Graph API. J'espère que ce sera bientôt disponible! Je vous remercie! – qmo

Questions connexes