2014-09-12 70 views
1

我正在編寫一個Web應用程序,用於訪問存儲在Microsoft Dynamics CRM Online中的客戶端數據。我想允許我的用戶使用OAuth授予對其Dynamics帳戶的訪問權限。如何爲Azure AD多租戶應用程序的access_token交換授權碼?

  1. 我創建在天青AD多租戶應用,提供redirect_uris中,生成的客戶ID &祕密。多tennant設置爲ON。
  2. 我創建了演示Microsoft Dynamics CRM帳戶。 「examplecrmaccount.crm4.dynamics.com」。
  3. 我已成功生成授權網址,將用戶發送至授權屏幕,並收到應交換爲「訪問令牌」的「代碼」。

我無法爲「access_token」交換此「代碼」。

$data = array(
    "grant_type" => "authorization_code", 
    "client_id" => urlencode("my_app_azure_ad_client_id"), 
    "redirect_uri" => urlencode("https://myapp.com/callback"), 
    "client_secret" => urlencode("my_app_azure_ad_client_secret"), 
    "code" => urlencode("code_returned_from_previous_request"), 
    "resource" => urlencode("https://examplecrmaccount4.crm4.dynamics.com") 
); 

$endpoint = "https://login.windows.net/common/oauth2/token?api-version=1.0"; 

$response = helpers\Curl::doPOST(
    $endpoint, 
    null,  
    array("Content-type: application/x-www-form-urlencoded"), 
    $data 
); 

服務器響應:

Status 404 
StatusName Not Found 
{"error":"invalid_request","error_description":"ACS90002: No service namespace named \u0027common\u0027 was found in the data store.\r\nTrace ID: b1025082-3e9b-49d8-bf91-7d998f694162\r\nCorrelation ID: 49d9d1e5-6958-4ffc-91ff-464f078a00f5\r\nTimestamp: 2014-09-12 08:35:59Z","error_codes":[90002],"timestamp":"2014-09-12 08:35:59Z","trace_id":"b1025082-3e9b-49d8-bf91-7d998f694162","correlation_id":"49d9d1e5-6958-4ffc-91ff-464f078a00f5"} 

回答

2

刪除 「API版本= 1.0」 查詢參數,它應該工作。這是我們的文檔和Azure門戶中的一個錯誤,它告訴您在使用授權代碼流時添加該代碼。

+0

從這個(和授權url請求,「/ common/oauth2/authorize」)中刪除「api-version = 1.0」的竅門。我現在收到: {「error」:「invalid_request」,「error_description」:「AADSTS90011:'redirect_uri'的值必須是有效的絕對Uri。\ r \ nTrace ID:035a0c90-bc8f-444c-8723-e8d9aea033bb \ r \ n相關性ID:58c6fc52-cf50-44ae-8622-cc4aa3259bac \ r \ n時間戳:2014-09-22 17:08:02Z「,」error_codes「:[90011],」timestamp「:」2014-09-22 17 :08:02Z」, 「trace_id的」: 「035a0c90-bc8f-444C-8723-e8d9aea033bb」, 「CORRELATION_ID」: 「58c6fc52-cf50-44ae-8622-cc4aa3259bac」, 「submit_url」:空, 「情境」:空} ) – dclaysmith 2014-09-22 17:12:13

+0

哎呀我以前沒有注意到。在多租戶應用程序中,redirect_uri值必須與Azure AD租戶的名稱相關。例如,如果您的租戶是contoso.com,那麼redirect_uri的格式必須是https://contoso.com/ 。我認爲在這種情況下,您的租戶的名稱是crm4.dynamics.com。 – user4067195 2014-09-22 17:33:43

+0

對不起,那也不對,我對AppID URI感到困惑。沒有足夠的咖啡。不掛斷。 – user4067195 2014-09-22 18:57:58

相關問題