2016-05-10 4 views
0

私はオフィス365が新しく、残りのAPIにアクセスすることに問題があります。 私はのカレンダーとメールAPIの残りのAPIをテストしようとしているので、私はPostmanを使用することに決めました。ただし、これらのAPIをテストするには、Authorizationヘッダーにアクセストークンが必要です。トークンの入手方法を理解するために、私はサンプルプロジェクトhereを取得し、このローカルサイトで設定、実行、サインインして、ローカルストレージにキャッシュされたトークンを取得し、そのトークンをPostmanのさらなるリクエストに使用することにしました。しかし、私がテストしたすべてのリクエストは、「401 unauthorized request」を返しました。カレンダーAPIへのアクセスreturn 401 Unauthorized

私がやったこと:

  • は、完全なアプリの権限と委任権限を追加O365アカウント
  • に関連したAzureのADDで新しいアプリを登録します。
  • マニフェストファイルの 'oauth2AllowImplicitFlow'をtrueに更新します。 app.jsで
  • クローンサンプルプロジェクト
  • 、私はアプリを実行した後

    function config($routeProvider, $httpProvider, adalAuthenticationServiceProvider) { 
        $routeProvider 
        .when('/', { 
         templateUrl: 'views/home.html', 
         controller: 'HomeController', 
         controllerAs: 'home', 
         requireADLogin: true 
        }) 
    
        .otherwise({ 
         redirectTo: '/' 
        }); 
    
    // The endpoints here are resources for ADAL to get tokens for. 
    var endpoints = { 
        'https://outlook.office365.com': 'https://outlook.office365.com' 
    }; 
    
    // Initialize the ADAL provider with your tenant name and clientID (found in the Azure Management Portal). 
    adalAuthenticationServiceProvider.init(
        { 
         tenant: 'mytenantname.onmicrosoft.com', 
         clientId: '<my cliend Id>', 
         endpoints: endpoints, 
         cacheLocation: 'localStorage' 
        }, 
        $httpProvider 
        ); 
    }; 
    

次のように設定機能の内容を変更する変更する、それだけで罰金で私を署名し、Iトークンを取得することもできますが、そのトークンも要求する権限がありません。 トークンをデコードして 'aud'の値を見たが、それは "https://outlook.office365.com/"を返さなかった。 this urlでは、著者は

は、だから私は何を逃した?は「メール、カレンダー、または連絡先のAPIの」https://outlook.office365.com/「これがあるべき」と述べましたか

答えて

1

AngularJSでOffice 365 APIをどのように呼びますか?

ユーザーにサインインすると、ユーザーを認証するためだけにid_tokenが取得されます。

id_tokenのaudはテナントID(GUID)です。

Office 365 APIを呼び出すには、AugularJS http要求を使用する必要があります。ここで

はAngularJSでMicrosoftグラフAPIを使用して電子メールを送信するサンプルです:

// Build the HTTP request to send an email. 
    var request = { 
    method: 'POST', 
    url: 'https://graph.microsoft.com/v1.0/me/microsoft.graph.sendmail', 
    data: email 
    }; 

    // Execute the HTTP request. 
    $http(request) 
    .then(function (response) { 
     $log.debug('HTTP request to Microsoft Graph API returned successfully.', response);  
     response.status === 202 ? vm.requestSuccess = true : vm.requestSuccess = false; 
     vm.requestFinished = true; 
    }, function (error) { 
     $log.error('HTTP request to Microsoft Graph API failed.'); 
     vm.requestSuccess= false; 
     vm.requestFinished = true; 
    }); 

APIを呼び出す前に、ADAL.jsは別のトークンを取得します - あなたは電子メールを送信するために使用できるアクセストークン。

enter image description here

UPDATE#1

私はまた、あなたが言及したサンプルをダウンロードしました。このサンプルを実行するには、Exchange Online>読み取りと書き込みのユーザーメールがアプリケーションに割り当てられていることを確認してください。

enter image description here

+0

私はそのgihubプロジェクトに提供するメール送信機能のデフォルトを使用していて、それがaccess_tokenは のhttpを得ることができなかったことが判明://私は。imgur.com/4500mK6.png と私はAPI呼び出しを行うためにid_tokenを使用したことを認めました。では、なぜaccess_tokenが空であるのかを検出する方法は? –

+0

答えは –

+0

です。すでにアクセストークンを取得できますが、URLを入力してサンプルコードではなく、手動で認証コードを取得しています。この問題は、Azure ADのアプリケーションの設定に関する許可に関連していません。なぜなら私はすでにExchange Onlineに対して完全なアクセス許可を設定しているからです。それでも理由がわからない –

関連する問題