2017-08-09 180 views
0

我正在嘗試使用OAuth2訪問Exchange郵箱,但我遇到了OAuth協議的問題。我沒有使用庫,只是直接http調用(使用libcurl)。我使用的是在這裏找到的文檔:無法使用OAuth2與Exchange獲取訪問令牌

https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-protocols-oauth-code

我已經成功地獲得了授權碼,現在我想用它來獲得訪問令牌。返回的json中的響應是「無效授權,傳輸數據解析器失敗:授權碼格式錯誤或無效。」。 HTTP錯誤400.下面是我生成的整個流程:

獲取驗證碼:

啓動IE這個網址:

https://login.microsoftonline.com/common/oauth2/authorize?client_id=38f1da80-9f80-4ff6-84a8-27c83d7212d3&redirect_uri=https%3A%2F%2Flogin.microsoftonline.com%2Fcommon%2Foauth2%2Fnativeclient&resource=https%3A%2F%2Foutlook.office.com%2F&response_type=code&scope=openid+Mail.ReadWrite 

在這一點上,用戶呈現的Microsoft登錄屏幕。他輸入他的憑證,然後被要求批准訪問所請求的範圍。他這樣做。接下來,在重定向URL,我們收到的數據:

https://login.microsoftonline.com/common/oauth2/nativeclient?code=AQABAAIAAAA9kTklhVy7SJTGAzR-p1BcUmXu0izUoOslqxHN85yR0vAVKicFVbtjs3IsKScxeBuTmxBsVy8qT3axn5YaDt_O6M4YVcAk--kpJ-dnNbKtnovjHIxGwtdRawo53UU9u19YP5ST5a8Ekffnxh0Z2gbBM_sKbmbhx2E-y_xs1spgV8gF6im39tLWo 

獲得令牌:

申請後提取數據 「碼=」,再上崗到這個網址:

https://login.microsoftonline.com/common/oauth2/token

這樣的數據:

grant_type=authorization_code&client_id=38f1da80-9f80-4ff6-84a8-27c83d7212d3&code=AQABAAIAAAA9kTklhVy7SJTGAzR-p1BcUmXu0izUoOslqxHN85yR0vAVKicFVbtjs3IsKScxeBuTmxBsVy8qT3axn5YaDt_O6M4YVcAk--kpJ-dnNbKtnovjHIxGwtdRawo53UU9u19YP5ST5a8Ekffnxh0Z2gbBM_sKbmbhx2E-y_xs1spgV8gF6im39tLWo&redirect_uri=https%3A%2F%2Flogin.microsoftonline.com%2Fcommon%2Foauth2%2Fnativeclient&resource=https%3A%2F%2Foutlook.office.com%2F 

這篇文章會導致HTTP呃ror 400,返回的數據是:

{"error":"invalid_grant","error_description":"AADSTS70000: Transmission data parser failure:Authorization Code is malformed or invalid....} 

有沒有人可以看看我做了什麼,並建議我哪裏出錯了?另外,我嘗試運行由Shawn建議的Powershell腳本 - 該腳本使用我現有的應用程序ID並使用ADAL獲取授權碼和令牌。這似乎工作,所以我懷疑問題出在我的代碼中,而不是Azure中的應用程序配置。

回答

0

我相信你正在將Azure Active Directory V2端點與V1端點混合在一起。

具體來說,你有聯繫的文件,說你是以下,是指對AAD V1端點,並使用下列URL(如記錄):

https://login.microsoftonline.com/{tenant}/oauth2/authorize

https://login.microsoftonline.com/{tenant}/oauth2/token

注意:在網址中沒有/v2.0/

我看到您的令牌請求的另一個問題是您沒有指定resource。我相信這是必需的,如果你想獲得一個特定資源的訪問令牌。對於Exchange Online,您希望指定資源https://outlook.office.com/

請注意,如果可能,Office 365建議您直接使用Microsoft Graph(https://graph.microsoft.com/)而不是Exchange API。如果您沒有問題,那麼您應該也可以使用AAD V2端點。與您上面列出的V2端點等效的文章是here

讓我知道這是否能解決您的問題。

+0

感謝您的意見。我一直在嘗試兩個端點,使用我在應用程序註冊門戶和Azure管理門戶中完成的註冊。在我的測試中,我確實使用了非2.0端點和在Azure門戶中創建的應用程序。還是行不通。我確實嘗試添加「資源」,儘管它表示可選。如果我使用Azure打開支持案例,是否可以幫助解決這類問題?有很多移動部件 - 我想我需要一些深入的諮詢,任何幫助表示讚賞。 –

+0

嗨,傑夫,如果你嘗試過不同的事情,你需要發佈具體的錯誤信息和結果你在這些不同的步驟。沒有這些細節,很難幫助調試您的情況。如果您可以使用** right **端點更新您的原始消息,並且會產生錯誤,這將有很大幫助。此外,我們應該在我們的[GitHub here](https://github.com/azure-samples)上完整地處理樣品。 –

+0

好的,我編輯了原文,準確反映了我發佈的內容和地點。 –

相關問題