5

私はこれを使用しています:

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

機能するグラフAPIにアクセスします。私の Azure 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"

理にかなっています、それはからトークンを取得しています

https://graph.windows.net

だから、私は迷っています。コンシューマー グレードの onedrive (以前の skydrive)、最初のグラフ API ( https://graph.windows.net経由でアクセス)、office 365 API ( https: //login.microsoftonline.com ) そして今はグラフ api (以前のユニバーサル api https://graph.microsoft.com ) 正しい情報をどこから探し始めればよいかわかりません。

私は現在PHPで作業しており、Microsoftのサポートされているプラ​​ットフォームのリストではかなり低いものになると確信していますが、アクセストークン生成が最新のAPIとo365 APIと他のグラフでどのように機能するかについての方向性api (graph.windows.net) をご利用いただければ幸いです。

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

4

3 に答える 3

4

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

ユーザー UI のないサービス アプリに関する質問については、client_credential フローを使用してアプリ専用アクセス トークンを取得できます。(これは現在、Microsoft Graph のドキュメントには記載されていませんが、別の場所でサポートされ、説明されています。リソースをhttps://graph.microsoft.com/に設定するだけです)。Azure 管理ポータルでは、アプリに必要な "アプリケーションのアクセス許可" も選択する必要があります。現在、メール リソースへのアプリのみのアクセスはサポートされていますが、(Microsoft グラフを介した) 1 つのドライブ リソースへのアプリのみのアクセスはサポートされていません。まもなく公開される予定です。

お役に立てれば、

于 2015-11-22T01:53:59.130 に答える
1

Outlook のライブ連絡先をインポートするのに本当に苦労しました。しかし、数日間の研究開発の後、私は https://dev.office.com/blogs/outlook-rest-api-v1-0-office-365-discovery-and-live-connect-api-deprecation を見つけました。 Microsoft Graph に切り替えます。Azure のドキュメントやその他のものも試してみましたが、非常に紛らわしいことがわかりましたが、まだ明確ではありませんでした。次の手順に従ってください: 1) https://apps.dev.microsoft.comでアプリケーションを作成します。a) 新しいパスワードを生成します。アプリケーション ID とパスワードを保存します。b) プラットフォームを Web として追加し、https のみを使用でき、http は適用されないため、https でリダイレクト URL を追加します。c) [詳細オプション] で [ライブ SDK サポート] をオンにして保存します。

2) サインインしているユーザーの連絡先が必要なため、url のスコープを contact.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) 認証が成功すると、認証コードが返されます。コードを取得した後、https: //login.live.com/oauth20_token.srfでポストフィールドを使用して curl ポスト リクエストによってトークンのリクエストを取得します。

  $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) 連絡先を取得するには

$url = ' https://graph.microsoft.com/v1.0/me/contacts ' フィルターを適用することもできます

ここで、パラメーター url と token を使用して curl を要求します

  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部分のみを抽出し、デコード後に使用できます。読んでくれてありがとう

于 2018-02-08T07:04:37.843 に答える