2015-11-18 7 views
5

私はこれを使用してきた:新しいMicrosoft Graph APIを使用して認証トークンを作成するにはどうすればよいですか?

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

作品グラフAPIにアクセスします。私の紺碧のAD登録されたアプリケーションは、ディレクトリにユーザーのリストを取得するためにAPIに問い合わせることができます。

これで、ディレクトリ内のユーザーのフォルダを一覧表示するとします。 このページ

http://graph.microsoft.io/docs 

URLがあるべきと言う:

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

私は私のREST呼び出しでそのURLを使用する場合

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

は理にかなって、私は、それからトークンを取得するのget

https://graph.windows.net 

だから、私は失われている。コンシューマーグレードのonedrive(以前はskydrive)、最初のグラフapi(私はhttps://graph.windows.netでアクセス)、オフィス365 API(これはhttps://login.microsoftonline.comでアクセス)、グラフapi api https://graph.microsoft.com)私はちょうど正しい情報を探すためにどこから始めるべきか分かりません。

私は現時点でPHPで作業していますが、マイクロソフトのサポート対象プラットフォームのリストではかなり低いと思われますが、アクセストークンの生成が最新APIで動作する方法については、他のグラフのapi(graph.windows.net)との比較が分かります。

誰かが私と同じように混乱していますか? これらのapisとそのアクセス方法の相違点を説明する中心的なリファレンスがありますか?

答えて

4

Microsoft Graphは、Office 365とAzure ADサービスが提供するデータにアクセスするための1つのエンドポイント(およびトークンの取得)を提供する必要があります。詳細については、https://graph.microsoft.comにアクセスしてください。ただし、v1.0バージョンはプロダクションサービスに適したGAバージョンですのでご利用ください。

ユーザーUIを持たないサービスアプリについてのご質問は、client_credentialフローを使用してアプリ専用のアクセストークンを取得することができます。 (これは現在、Microsoft Graphのドキュメントには記載されていませんが、にリソースを設定するだけで、elsewhereがサポートされ、記述されています)。 Azure管理ポータルでは、アプリケーションにも必要な「アプリケーション権限」を選択する必要があります。現在、メールリソースへのアプリケーションのみのアクセスがサポートされていますが、アプリケーションは1つのドライブリソース(Microsoftグラフ経由)へのアクセスのみがサポートされていません。私たちはまもなくそれを開くことを目指しています。

希望すると、

+0

これは私が歯を落とすことができるものです。ありがとうございます。 – stu

+0

アプリはグループのカレンダーリソースにのみアクセスできますか? –

+0

@ダン・カーショーこの質問はお手伝いできますか?http://stackoverflow.com/questions/41754060/microsoft-office-api-invalidauthenticationtoken-compacttoken-parsing-failed-with please? – WowBow

3

https://login.microsoftonline.comのエンドポイントは、ユーザーがログインするためのSSOページを提供し、&認証コードを取得するAzure AD許可エンドポイントです。

https://graph.microsoft.comのようなものは、REST APIに基づいて構築され、Microsoftからリソースとサービスを提供するリソースエンドポイントです。

は、具体的には、https://graph.windows.netをエンドポイントするために、公式サイト上の説明は次のとおりです。

のAzure Active DirectoryのグラフAPIはRESTのAPIエンドポイント経由のAzure Active Directoryへのプログラムによるアクセスを提供します。 AppsはAzure AD Graph APIを使用して、ディレクトリデータやディレクトリオブジェクト(ユーザー、グループ、組織の連絡先など)に対してCRUD(作成、読み取り、更新、削除)操作を実行できます。 https://graph.mircosoft.comは、Outlook、OneDrive、OneNote、Planner、Office Graphなどの他のMicrosoftサービスのAPIも含む統一されたAPIであり、すべて1つのアクセストークンで単一のエンドポイント経由でアクセスされます。

詳細については、AD Graph RESTを参照してください。

Azure AD経由でオフィス365を統合するには、オフィス365テナントがあるか、オフィス365テナントの管理者ユーザーがAzure ADへのアクセス許可を持っているかどうかをチェックする必要があります。Deep Dive into the Office 365 Unified APIを参照すると、オフィス統合インテグレーションAPIのステップバイステップガイドが表示されます。

さらに、Get started with Office 365 APIs powered by Microsoft Graphを参照してPHPの例を作成することもできます。

+0

おかげで、私は言いたいことを忘れてしまいました。私はサーバーアプリケーションを作成していますが、ユーザーのUI操作はありません。私はADに管理者アクセス権を持っています。ユーザーのリストを取得するためにグラフAPIを照会できます。今私はそれらのユーザーを繰り返し、自分のメールを読んで、onedriveファイルをリストしたいと思っています。私が正しく理解すれば、onedriveはo365 apiで、メールはグラフapiです。しかし、可能であれば、新しい汎用APIを使用したいと考えています。それは...ですか? – stu

+0

Microsoft Graph APIを統合するには、依然としてアプリケーション管理者のために認証する必要があります。そして、あなたの要件に固有の、私はそれが肯定的だと思います。 http://graph.microsoft.io/docs/api-reference/beta/resources/driveでonedrive APIを見つけて、http://graph.microsoft.io/docs/api-reference/beta/のメールAPIリソース/メッセージ。さらに、これらのAPIを[APIエクスプローラ](https://graphexplorer2.azurewebsites.net/)でテストすることができます –

0

私は本当にライブ展望の連絡先をインポートしようとしました。しかし、数日後にR & DIがhttps://dev.office.com/blogs/outlook-rest-api-v1-0-office-365-discovery-and-live-connect-api-deprecationになったので、私はMicrosoftのグラフに切り替えることができました。私は紺碧のドキュメントやその他のものも試しましたが、非常に混乱していましたが、それでも私はそれではっきりしませんでした幸いにも成功したことが判明したPHPで以下を実装しました。次の手順に従ってください:1)https://apps.dev.microsoft.comにアプリケーションを作成します。a)新しいパスワードを生成します。アプリケーションIDとパスワードを保管してください。 b)Webとしてプラットフォームを追加し、httpsだけを使用できるリダイレクトURLを追加します.HTTPは適用されません。 c)[高度なオプション]で[Live SDKのサポート]を確認し、保存します。

2)URLのスコープをcontacts.readとして、サインインしたユーザーの連絡先が必要なときに渡します。

$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)認証に成功すると、認証コードが返されます。今のコードを取得した後、我々は

$ URLの連絡先を取得するには

$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)としてpostfieldsでhttps://login.live.com/oauth20_token.srfでカールポスト要求によるトークンの要求を取得=「https://graph.microsoft.com/v1.0/me/contacts」 私たちも適用することができます

今すぐPARAMATERS URLとトークンでカールを要求彼らにフィルタ

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)データを取得した後、返されるデータは純粋なjson形式でなくてもよいので、正規表現を適用してデータからjson部分のみを抽出し、それをデコードして使用することができます。 読んでいただきありがとうございます

関連する問題