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 

應用程序的工作沒有問題,如果我們使用的是Microsoft圖表REST API V1但下面的問題發生使用版本2時,它與代理權限授予我們讀,寫/發送這很好地工作許可登記V1的應用程序。

對於V2: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 

導致該問題的代碼塊授權碼:

@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()被稱爲

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 java庫。

+0

您是否註冊過在V2端點上使用的新V2應用程序?據我所知,您不能在V1和V2端點上使用相同的應用程序。 –

+0

@ShawnTabrizi我爲此創建了一個新應用程序,但是您在哪裏告訴您正在使用的應用程序是v2還是不是? – WowBow

+1

您只能使用應用註冊門戶註冊V2應用,如[此處]所述(https://docs.microsoft.com/zh-cn/azure/active-directory/develop/active-directory-v2-flows)。您將在名爲「融合應用程序」的應用程序部分與屬於MSA特定應用程序的「Live SDK應用程序」或屬於V1應用程序的「Azure AD only應用程序」下看到它們。 –

回答

2

目前,adal4j庫不支持Azure AD v2.0端點(請參閱here)。我們爲v2.0端點設置權限的事件仍然使用舊版本。

作爲解決方法,您可以直接編寫HTTP請求。這是給你的參考樣本請求(參見here):

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} 

如果你想在adal4j庫,支持Azure的AD v2.0的端點,可以從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'授權:無記名令牌...「現在回覆無效版本。微軟網站上的所有示例都使用https://outlook.office.com/v2.0/me/messages,所以我試了一下,我發出了一條消息,說我們不能顯示這些內容。我在這方面做了些什麼,我有點失落。 – WowBow