0

Outlook REST API를 사용하여 사용자의 Outlook 메일에서 이메일을 가져 오려고합니다. 또한사용자의 이메일을 가져 오는 동안 Outlook REST API 403 오류가 발생했습니다.

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

, 내가 error에서 오류 다음 얻을 : 나는 아웃룩 REST API에, 나는 다음과 같은 오류가 발생합니다 AJAX 전화를 걸 때 성공적으로하지만, 사용자를 인증하고 토큰에 대한 사용자 액세스를 얻을 수 있었다 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

그 코드를 추가했습니다. 그러나 '오류 : "시간 초과"오류로 인해 토큰 갱신 작업이 실패했습니다. 그러나이 오류를 검색하고 위의 코드 바로 앞에 'ADALContext.handleWindowCallback()'을 추가했지만 무한 루프가 시작됩니다. 나는 크롬 개발 도구의 '로컬 저장소'에서 만료 된 'id_tokens'를 지우려고했지만, 여전히 같은 오류입니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?? –

0

시간 초과 오류가 발생하는 것으로 나타났습니다. 타임 아웃과 똑같은 문제가 있었는데 adal.js 라이브러리를 조작하여 문제를 해결할 수있었습니다. 이 라이브러리에는 6 초의 제한 시간이 있으며 로컬로로드되는 일부 응용 프로그램의 경우 매우 단단한 것처럼 보입니다. 빠른 테스트를 위해 adal.js에서 LOADFRAME_TIMEOUT : '6000'을 찾아 LOADFRAME_TIMEOUT : '30000'으로 바꾸면 응용 프로그램을로드하는 데 30 초가 소요됩니다. 나는 그것이 당신을 위해 일하기를 바란다!