2017-09-01 242 views
1

我已經設置了Office 365 E3試用帳戶。我在AAD註冊了兩個應用程序。AAD microsoft graph,客戶端憑證

第一個使用「授權碼流」並按預期工作(可以訪問登錄的用戶日曆)。

第二個應用程序使用「客戶端憑據流」,不起作用。

1. login in Browser (Edge) 

GET /OAuthTest3 HTTP/1.1 

HTTP/1.1 302 Found 
Location: https://login.microsoftonline.com/<tenant>/adminconsent?client_id=<app_id>&redirect_uri=http://localhost:1234/OAuthTest3 

GET /OAuthTest3?admin_consent=True&tenant=<tenant> HTTP/1.1 

HTTP/1.1 200 OK 


2. connect to https://login.microsoftonline.com/ 

POST /<tenant>/oauth2/token HTTP/1.1 
Host: login.microsoftonline.com 

client_id=<app_id>& 
client_secret=<client_secret>& 
grant_type=client_credentials& 
redirect_uri=http://localhost:1234/OAuthTest3& 
resource=https://graph.microsoft.com/& 
scope=https://graph.microsoft.com/calendars.readwrite 


HTTP/1.1 200 OK 
{ 
    "token_type": "Bearer", 
    "expires_in": "3600", 
    "ext_expires_in": "0", 
    "expires_on": "1504333342", 
    "not_before": "1504329442", 
    "resource": "https://graph.microsoft.com/", 
    "access_token": <token> 
} 


3. connect to https://graph.microsoft.com/ 

GET /v1.0/users/<user>/calendars HTTP/1.1 
Host: graph.microsoft.com 
Authorization: Bearer <token> 

HTTP/1.1 403 Forbidden 
{ 
    "error": { 
    "code": "ErrorAccessDenied", 
    "message": "Access is denied. Check credentials and try again.", 
    "innerError": { 
     "request-id": "e7228de4-2b27-4779-abef-ccab0d88970a", 
     "date": "2017-09-02T05:22:27" 
    } 
    } 
} 

感謝

周華健

+0

Hello Emil。我想你正在使用V2端點,你使用的是哪個庫? –

+0

嗨讓馬克,我使用端點https://login.microsoftonline.com/ /adminconsent和https://login.microsoftonline.com/ /oauth2 /令牌授權。 和https://graph.microsoft.com/v1.0/users/ 爲圖api。我正在實施我自己的圖書館。 –

回答

1

爲了使用客戶端憑證在AAD V2.0流,你需要首先對象管理同意您的應用程序。即使您不需要使用授權代碼授權同意範圍,也是如此。

查看v2 Endpoint and Admin Consent獲取同意書的步驟。

UPDATE:

作用域與客戶端憑證工作方式不同。您不需要使用空格分隔列表(https://graph.microsoft.com/user.read https://graph.microsoft.com/calendars.readwrite)動態請求範圍,您需要在應用程序的註冊中定義它們。

這是通過使用https://apps.dev.microsoft.com門戶完成的。在您的應用程序的註冊中,找到「應用程序權限」部分,然後單擊「添加」按鈕。此時會彈出一個對話框,您可以選擇您所需要的權限:

permissions

在您的應用程序,你也需要讓系統知道從您註冊使用的範圍,改變你的scope參數。

POST /<tenant>/oauth2/v2.0/token HTTP/1.1 
Host: login.microsoftonline.com 

client_id=<app_id>& 
client_secret=<client_secret>& 
grant_type=client_credentials& 
redirect_uri=http://localhost:1234/OAuthTest3& 
resource=https://graph.microsoft.com/& 
scope=https://graph.microsoft.com/.default 

重要:你改變你的範圍的任何時間,你將不得不重新執行管理員同意前流的新範圍會同意這是通過https://graph.microsoft.com/.default的範圍內進行。

+1

我更新了我的問題,詳細介紹了我的協議實現。 –

+0

太棒了,這是超級有用的。我已經更新了我的答案。 –

+0

非常感謝您的幫助。我現在可以訪問我自己的日曆和其他用戶的日曆。 –