0

Outlook REST APIを使用してユーザーのOutlookメールからメールを取得しようとしています。私は、私は、OutlookのREST APIへAJAX呼び出しをしようとするとき、私は次のエラーを取得する、しかし、成功したユーザーを認証し、ユーザーのアクセストークンを取得することがされています。また、私はerrorからエラーを以下の取得ユーザーのメールを取得しようとしたときにOutlook REST API 403エラーが発生しました

GET https://outlook.office.com/api/v2.0/me/messages?callback=jQuery31008093694845457056_1490285639120 403 (Forbidden) 

AJAXの関数コールバック:

Object {readyState: 4, status: 404, statusText: "error"} 

ここでは私のコードです:私は間違っ

var ADAL = new AuthenticationContext({ 
    instance: 'https://login.microsoftonline.com/', 
    tenant: 'common', 
    clientId: '',  //Intentionally left blank here 

    redirectUri: 'http://localhost:8383/',  
    callback: userSignedIn, 
    popUp: true 
}); 

function signIn() { 
    ADAL.login(); 
} 

function userSignedIn(err, token) { 
    console.log('userSignedIn called'); 
    if (!err) { 
     console.log(token);   //This works! 
     fetchUserSentMails(token); 
    } else { 
     console.error("error: " + err); 
    } 
} 

function fetchUserSentMails(token) { 
    var user = ADAL.getCachedUser(); 
    console.log(user.profile.name);  //This works! 

    $.ajax({     //This doesn't work 
     type: 'GET', 
     crossDomain: true, 
     url: 'https://outlook.office.com/api/v2.0/me/messages', 
     dataType: 'jsonp', 
     headers: {'Authorization': 'Bearer ' + token}, 
     success: function (res) { 
      console.log(res); 
     }, 
     error: function (x, t, m) { 
      console.log(x); 
      console.log(t); 
      console.log(m); 
     } 
    }); 
} 

何をやっています?

答えて

0

最も可能性の高い答えは、トークンに適切な有効範囲がないことです。あなたのトークンをhttps://jwt.ioで解析し、scpのクレームにあなたが何であるかを見てください。

AcquireTokenへの電話がありません。 loginメソッドは、ユーザーにサインインしてIDを取得するだけで、アクセストークンを提供しません。

ADAL.acquireToken("https://outlook.office.com", function(error, accessToken){ 
    if (error) { 
    console.log('ERROR: ' + JSON.stringify(error)); 
    } else { 
    fetchUserSentMails(accessToken); 
    } 
} 
+0

私はトークンが 'id_token'であり、Outlook Mail APIにアクセスするための' access_token'ではないと思います。 –

+0

はい。私はあなたが行方不明だと思ういくつかのコードで私の答えを更新するつもりです。 –

+0

私はそのコードを追加しました。しかし、私は 'ERROR:"トークン更新操作がタイムアウト "エラーのために失敗しました。私はこのエラーを探して、上記のコードの直前に 'ADALContext.handleWindowCallback()'を追加しましたが、無限ループを開始します。私はchrome開発ツールの 'ローカルストレージ 'から期限切れの' id_tokens'をクリアしようとしても、それと同じエラーです。私は何を間違えているのですか? –

0

タイムアウトエラーが発生しています。私はタイムアウトと全く同じ問題を抱えていました。私はadal.jsライブラリを操作することでこれを解決できました。このライブラリには6秒のタイムアウトがあり、ローカルにロードされているアプリケーションによっては非常に緊迫しているようです。簡単なテストを行うには、adal.jsでLOADFRAME_TIMEOUT: '6000'を見つけてLOADFRAME_TIMEOUT: '30000'に置き換えます。これにより、アプリケーションのロードに30秒かかります。私はそれがあなたのために働くことを望む!

関連する問題