1

Office 365 전자 메일을 사용하도록 응용 프로그램을 허가 한 사용자의 브라우저에서 다음 인증 코드를 복사했습니다.Office 365 v2 API 인증 코드가 잘못되었거나 잘못되었습니다.

code=OAQABAAIAAADRNYRQ3dhRSrm-4K-adpCJ3J3UJ8GyC2qJDvNhlrUAObjph6sQ3A9waeQ5Tr-DA6WzxCdFbvadCRJw2S4a_lwA7MyelZWAPQZOlaB_X_1165CbmTXJMGioU6Cr0DhVTUzIlUv_-Svjp8DBrLVCxcDp5rJMM5mDNR0iGysuDIozWnOaPqCOl35NxPzyktrYK6D1MBptmXOPbhS-stTZXbHJr9gGE3FHzMU0XANXmTm30q4SPaoWPch-S1uFFL4xwS2oUv-lELBdcfIGh5UJBSraabGihVWUnbwBhh8eURSMRwryi7kubUcq0D27S-vIVZhtKopemQ1njAcExO58S7EgAyqbIzMxvmBXBe0X1ieVrcyHYRpt4ZAq1Z4v5HLTrYhx5fGp6AkqhV09yri3bqXaZvw5R1hKuhAbRDt_isZn_L8ZEhfwnqICGUwpDU27c6Qd1txuiOVY90a4BiAUh1M1u5gjDx8nIE88R7S915w7mUjJtCzZuTKQavve8q8UOtm9udUvBOX1f-bYslpgiIRbdSYBYlP9UrbreLS1W6OFk2NX-uqp9mabyImvvj1RUm166qV6uc9hsuhzrfErDURC17JotuQBSWYauAvb38p5B-cDbsCZafpyORlbrWsYyQcdWwUPL0aOZEQXFW-v3gDw7Xri_9hvsiHrj10NTaaozqm1QpZmMf-SHJ0yF9wBWKYgAA 

응용 프로그램은 우리가 마이크로 소프트 그래프 REST API를 V1을 사용하는 경우 문제없이 작동하지만 다음과 같은 문제는 버전 2를 사용하는 경우 그것은 우리가, 읽기/쓰기와 함께 잘 작동 권한을 보내기 부여하는 권한을 위임에 등록되어 발생 응용 프로그램의 V1.

V2를 들어

:

@Override 
    public AuthenticationResult getToken(String authCode) { 

     ExecutorService service = Executors.newFixedThreadPool(1); 
     OfficeCredentials credentials = getCredentials(); 

     try { 
      AuthenticationContext context = new AuthenticationContext(credentials.getAuthority(), true, service); 
      final Future<AuthenticationResult> resultFuture = context.acquireTokenByAuthorizationCode(
        authCode, new URI(credentials.getRedirectUri()), new ClientCredential(credentials.getClientId(), 
          credentials.getClientSecret()), credentials.getResourceUrl(), null); 

      return resultFuture.get();//throws exception 

     } catch (URISyntaxException e) { 
      logger.error(e.getMessage()); 
     } catch (MalformedURLException e) { 
      logger.error(e.getMessage()); 
     } catch (Exception e) { 
      logger.error(e.getMessage()); 

     } 

     return null; 

    } 

이 예외가 호출 resultFuture.get()입니다 : authority =https://login.microsoftonline.com/common/oauth2/v2.0/token 및 내가 문제를 일으키는 코드 블록이

https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=30..7&response_type=code&scope=mail.read&redirect_uri=https://myurl:8443/controller/saveToken 

다음 URL을 사용하여 인증 코드를 가져 오지하기

java.util.concurrent.ExecutionException: com.microsoft.aad.adal4j.AuthenticationException: {"error_description":"AADSTS70000: Transmission data parser failure: Authorization Code is malformed or invalid.\r\nTrace ID: c37b4aba-c5fb-44f3-815c-dd798072095d\r\nCorrelation ID: e190ccd2-f98a-440c-8e79-69cfcead3c04\r\nTimestamp: 2017-02-06 17:53:30Z","error":"invalid_grant"} 

v2로 마이그레이션하려고 할 때 내가 뭘 잘못하고 있는지 알지 못합니다. redirect_uri는 azure에 정의 된 것과 동일하며 HTTPS입니다. 이미 로컬 주소가 this에 따라 HTTPS를 수락하도록했습니다. 참고 : 나는 adal4 자바 라이브러리를 사용하고 있습니다.

+0

V2 엔드 포인트에서 사용할 새로운 V2 애플리케이션을 등록 했습니까? 내 지식으로는 V1과 V2 엔드 포인트에서 동일한 앱을 사용할 수 없습니다. –

+0

@ShawnTabrizi 그 목적으로 새 앱을 만들었지 만, 현재 작업하고있는 앱에 v2인지 여부를 알려주시겠습니까? – WowBow

+1

[여기] (https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-v2-flows)에 명시된대로 App Registration Portal을 사용하여 V2 응용 프로그램을 등록 할 수만 있습니다. MSA 특정 응용 프로그램 인 "수렴 응용 프로그램"대 "라이브 SDK 응용 프로그램"또는 V1 응용 프로그램 인 "Azure AD 전용 응용 프로그램"이라는 응용 프로그램 섹션에서 볼 수 있습니다. –

답변

2

현재 adal4j 라이브러리는 Azure AD v2.0 엔드 포인트를 지원하지 않습니다 (here 참조). v2.0 엔드 포인트에 대한 권한을 설정했지만 여전히 이전 버전을 사용합니다.

해결 방법으로 HTTP 요청을 직접 작성할 수 있습니다.

POST: https://login.microsoftonline.com/{tenantId}/oauth2/v2.0/token 

client_id={clientId}&client_secret={clientSecret}&scope={scope}&code={authorizationCode}&grant_type=authorization_code&redirect_uri={redirectUri} 

그리고 당신은 푸른 AD 2.0 엔드 포인트를 지원하기 위해 adal4j 라이브러리를 원한다면, 당신은 here에서 의견을 제출할 수 있습니다 여기에 (here 참조) 참조 용 샘플 요청입니다.

+0

위대한 작품이지만 액세스 토큰을 다시 가져 오지만 새로 고침 토큰을 가져 오지 않습니다. 그 정보는 어디서 구할 수 있습니까? – WowBow

+1

@WowBow 새로 고침 토큰을 다시 가져 오려면 offline_access 범위가 필요합니다. –

+0

또 다른 문제는 다음과 같습니다. v2 "curl -i https://graph.microsoft.com/v2.0/me/messages -H '에 가입 한 사용자의 전자 메일을 얻으려면 다음 명령을 사용했습니다. Content-Type : application/x-www-form-urlencoded '-H'인증 : 무기명 토큰 ... "이제는 유효하지 않은 버전으로 응답합니다. Microsoft 사이트의 모든 예제는 https://outlook.office.com/v2.0/me/messages를 사용하므로이 내용을 시도해 보았습니다.이 내용을 표시 할 수 없다는 메시지가 나타났습니다. 나는 이것에 무엇을 해야할지에 대해 약간 분실되어있다. – WowBow