2017-06-06 59 views
0

不同的授權碼,我下面這個文檔:https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-protocols-oauth-codeActive Directory中的OAuth 2.0 - 請求通過PHP比瀏覽器請求

下,請求授權碼,它提供了一個參與端點OAuth 2.0一個示例代碼。我已經按照這個結構,立足我對自己的要求大致如下:

https://login.microsoftonline.com/{tenant}/oauth2/authorize? 
client_id=6731de76-14a6-49ae-97bc-6eba6914391e 
&response_type=code 
&redirect_uri=https://example.com 
&response_mode=query 
&resource=6731de76-14a6-49ae-97bc-6eba6914391e 
&state=12345 

在我的測試中,我甚至試過(獲得請求裸露地):

https://login.microsoftonline.com/{tenant}/oauth2/authorize? 
client_id=6731de76-14a6-49ae-97bc-6eba6914391e 
&response_type=code 

這裏的有趣事情:如果我通過瀏覽器訪問這些域,它們返回一個「成功」的號召,像這樣:

https://example.com/?code=AOA................................... 

不過,我似乎無法得到這個SAM e結果(獲取代碼)通過PHP解決方法。

我已經試過:

file_get_contents($my_url); 

但所有的返回是一個錯誤,微軟的一個登錄頁面。我也試過cURL,但沒有運氣。

任何人都可以建議如何複製獲得這樣的代碼(自動)?

回答

0

的需要在這裏是訪問的API爲用戶以後也是如此。

當您兌換授權碼時,您將獲得訪問令牌和刷新令牌。您附加到API調用的訪問令牌,默認在1小時後過期。但刷新令牌默認在14天內過期,並且可用於獲取新的訪問令牌和刷新令牌。所以只要您使用刷新令牌在14天內獲得新的令牌,您就可以永久訪問。

每次刷新時都會檢查用戶的訪問權限,因此,如果他們的帳戶被禁用或訪問權限被刪除,您將收到錯誤而不是新的令牌。


簡答:你不能。要獲得授權碼,您必須重定向瀏覽器,以便用戶可以登錄,必要時通過MFA,登錄其組織本地AD ...作爲最終結果,用戶將被髮送回您的應用程序代碼,然後您可以將其訪問令牌兌換爲您想調用的受Azure AD保護的API。

+0

是否有無論如何傳遞用戶/傳遞憑據自動登錄,然後被重定向到與代碼頁面? – NoReceipt4Panda

+0

您可以在重定向時將用戶名作爲參數傳入,但不能傳入密碼。 – juunas

+0

其實,更好的問題 - 當請求一個'access_token'時,一個'refresh_token'附帶了它。有人不能繼續使用'refresh_token'來持續訪問嗎? – NoReceipt4Panda

0

您可以通過使用header()函數重定向用戶到微軟的登錄頁面發送HTTP Location頭:

header("Location: https://login.microsoftonline.com/xxxxxx/oauth2/authorize?client_id=xxxxxx&response_type=code&redirect_uri=http%3A%2F%2Flocalhost:8088/testauth.php%2F&response_mode=query&resource=https%3A%2F%2Fgraph.windows.net%2F&state=12345"); 

用戶輸入用戶名/密碼後,蔚藍的廣​​告會重定向到重定向網址的代碼,你可以通過獲取代碼:

echo $_GET['code'];