2015-11-18 22 views
5

Sto usando questo:Come si crea un token di autenticazione con il nuovo microsoft graph api?

https://github.com/Azure-Samples/active-directory-php-graphapi-web.git 

Per accedere all'API grafico, che funziona. La mia applicazione registrata in azzurro AD è in grado di interrogare l'API per ottenere un elenco di utenti nella directory.

Ma ora voglio elencare le cartelle per un utente nella directory. Questa pagina

http://graph.microsoft.io/docs 

dice l'URL deve essere:

https://graph.microsoft.com/v1.0/me/drive/root/children 

Quando uso l'URL nella mia chiamata REST, ottengo

"code": "InvalidAuthenticationToken", 
"message": "CompactToken parsing failed with error code: -2147184105" 

ha un senso, si sta facendo un gettone da

https://graph.windows.net 

Quindi, mi sono perso. Esistono così tante versioni diverse dell'API, dal consumer grade onedrive (precedentemente skydrive), al primo grafico api (che accedo tramite https://graph.windows.net), all'API 365 per ufficio (a cui accedo tramite https://login.microsoftonline.com) e ora al grafico api (precedentemente universale api https://graph.microsoft.com) Solo non so da dove cominciare a cercare informazioni corrette.

Attualmente sto lavorando in PHP, e sono sicuro che sarà piuttosto basso nella lista di piattaforme supportate da Microsoft, ma qualsiasi direzione su come la generazione di token di accesso funzioni nella più recente api rispetto all'ape di o365 rispetto all'altro grafico api (a graph.windows.net) sarebbe apprezzato.

Qualcun altro è confuso come lo sono io? C'è qualche riferimento centrale che spiega tutte le differenze tra queste apis e come accedervi?

risposta

4

Microsoft Graph dovrebbe fornire un endpoint (e acquisizione di token) per accedere ai dati offerti da Office 365 e servizi Azure AD. Si prega di visitare https://graph.microsoft.com per maggiori dettagli - ma si prega di utilizzare la versione v1.0 in quanto questa è la versione GA che è appropriato per i servizi di produzione.

Come per la domanda relativa a un'app di servizio senza interfaccia utente utente, è possibile ottenere un token di accesso solo per app utilizzando il flusso client_credential. (Questo non è attualmente documentato nella documentazione di Microsoft Graph, ma è supportato e descritto elsewhere - basta impostare la risorsa su https://graph.microsoft.com/). Nel portale di gestione di Azure dovrai selezionare le "Autorizzazioni applicazione" richieste anche dall'app. Attualmente è supportato l'accesso solo alle app alle risorse di posta, ma l'accesso alle app solo a risorse di un'unità (tramite il grafico Microsoft) non è supportato. Cercheremo di aprirlo a breve.

Spero che questo aiuti,

+0

Ora è qualcosa in cui posso affondare i miei denti, grazie mille. – stu

+0

L'app ha accesso solo alle risorse del calendario dei gruppi supportati? –

+0

@Dan Kershaw Puoi aiutare con questa domanda http://stackoverflow.com/questions/41754060/microsoft-office-api-invalidauthenticationtoken-compacttoken-parsing-failed-with please? – WowBow

3

L'endpoint di https://login.microsoftonline.com è l'endpoint di autorizzazione di Azure AD che fornisce la pagina SSO per gli utenti che accedono e autenticano & ottenendo un codice di autorizzazione.

Altri come https://graph.microsoft.com è un endpoint di risorsa che è costruito su API REST e fornisce risorse e servizi di Microsoft.

In particolare, all'endpoint https://graph.windows.net, la spiegazione sul sito ufficiale è:

L'Active Directory API Azure grafico fornisce l'accesso programmatico a Azure Active Directory tramite gli endpoint REST API. Le app possono utilizzare l'API grafico di Azure AD per eseguire operazioni di creazione, lettura, aggiornamento ed eliminazione (CRUD) su dati di directory e oggetti di directory, quali utenti, gruppi e contatti organizzativi. E https://graph.mircosoft.com è un'API unificata che include anche API di altri servizi Microsoft come Outlook, OneDrive, OneNote, Planner e Office Graph, tutti accessibili tramite un singolo endpoint con un singolo token di accesso.

Vedere AD Graph REST per ulteriori informazioni.

Per integrare Office 365 tramite Azure AD, è necessario verificare se si dispone di un tenant di Office 365 e l'utente amministratore del tenant di Office 365 ha l'autorizzazione di accesso su Azure AD.È possibile fare riferimento a Deep Dive into the Office 365 Unified API per la guida passo passo dell'integrazione dell'API unificata di Office 365.

Inoltre, è possibile fare riferimento a Get started with Office 365 APIs powered by Microsoft Graph per creare un esempio PHP.

+0

Grazie per l'informazione, ho dimenticato di menzionare, sto scrivendo un'applicazione server, non c'è interazione dell'interfaccia utente utente. Ho accesso amministratore ad AD, posso interrogare l'API grafico per ottenere un elenco di utenti. Ora voglio scorrere gli utenti e leggere la loro posta ed elencare i loro file onedrive. Se ho capito bene, onedrive è l'o365 api e la posta è il grafico api. Ma mi piacerebbe utilizzare la nuova API universale per tutto ciò, se possibile. È? – stu

+0

Per integrare le API di grafico Microsoft, è ancora necessario autorizzare l'amministratore dell'applicazione. E specifico per le tue esigenze, penso sia positivo. Come ho trovato le API suedrive all'indirizzo http://graph.microsoft.io/docs/api-reference/beta/resources/drive e anche le API di posta su http://graph.microsoft.io/docs/api-reference/beta/ risorse/messaggi. Inoltre, puoi testare queste API in [API explorer] (https://graphexplorer2.azurewebsites.net/) –

0

ho davvero cercato di importare i contatti di Outlook Live. Ma dopo pochi giorni di R & DI ho trovato https://dev.office.com/blogs/outlook-rest-api-v1-0-office-365-discovery-and-live-connect-api-deprecation che mi ha fatto passare al microsoft graph.ho provato anche con la documentazione azzurra e altre cose ma l'ho trovato molto confuso ma ancora non mi è stato chiaro con esso.Così hanno implementato il seguente in php che si è rivelato essere fortunatamente di successo. Segui i seguenti passaggi: 1) Crea la tua applicazione in https://apps.dev.microsoft.com a) Genera una nuova password. Salva con te l'ID dell'applicazione e la password. b) Aggiungi la piattaforma come web e aggiungi l'URL di reindirizzamento con https in quanto è possibile utilizzare solo https e http non è applicabile. c) Controlla supporto Live SDK in Opzioni avanzate e salva.

2) passare l'ambito nell'URL come contatti. Se necessario, è necessario disporre dei contatti dell'utente connesso.

$client_id="YOUR_CLIENT_ID"; 
$redirect_uri = SiteUrl.'hotmail-contact'; 
      $url="https://login.microsoftonline.com/common/oauth2/v2.0/authorize? 
        client_id=".$client_id." 
        &response_type=code 
        &redirect_uri=".$redirect_uri." 
        &response_mode=query 
        &scope=offline_access%20user.read%20mail.read%20contacts.read 
        &state=12345"; 

3) Dopo aver eseguito correttamente l'autenticazione, è necessario restituire il codice di autenticazione. Ora dopo aver ottenuto il codice otteniamo richiesta per il token richiesta montante flessione a https://login.live.com/oauth20_token.srf con postfields come

$fields=array(
     'code'=> urlencode($auth_code), 
     'client_id'=> urlencode($client_id), 
     'client_secret'=> urlencode($client_secret), 
     'redirect_uri'=> urlencode($redirect_uri), 
     'grant_type'=> urlencode('authorization_code') 
    ); 

4) Per recuperare i contatti

$ url = possiamo applicare anche 'https://graph.microsoft.com/v1.0/me/contacts' filtri per loro

Ora su ricciolo con paramaters url e Token

public function curl_use_token($url,$token) { 

    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_AUTOREFERER, TRUE); 
    // curl_setopt($ch,CURLOPT_HTTPHEADER,array('HeaderName: HeaderValue')); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization:Bearer '.$token)); 
    // curl_setopt($ch, CURLOPT_HTTPHEADER, array("Authorization", "Bearer " + $token)); 
    curl_setopt($ch, CURLOPT_HEADER, 1); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE); 

    $data = curl_exec($ch); 
    curl_close($ch); 
    // print(gettype($data)); 
    // print($data); 
    return $data; 
    } 

5) Dopo aver ottenuto i dati, i dati restituiti non saranno in puro formato json in modo da poter estrarre solo una parte json dai dati applicando espressioni regolari e dopo aver decodificato possiamo usarlo. Grazie per la lettura