大家好,上次我們說了Graph API獲取認證的兩個方式之一的委託(用戶名密碼登錄)的認證方式,本次讓我們來說說應用程序權限的認證方法。
應用程序授權並不需要用戶身份進行登錄驗證,但它需要管理員對其進行授權。在大多數情況下,你僅需點擊Azure AD註冊應用中的按鈕進行授權:
但有時候,UI上的授權會不生效。想確保管理員一定對此應用進行了授權,可以訪問一下以下網址(以中國版Azure AD爲例):
https://login.chinacloudapi.cn/<Tenant ID>/adminconsent?client_id=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx&redirect_uri=http://localhost/
再次解釋一下:
- 基於Azure AD 2.0,你可以把Tenant ID寫爲common,另外,即使些Tenant ID,也不需要加尖括號,直接些GUID即可;
- client_id,不多解釋了,client_id就是註冊應用的應用程序 ID
- redirect_uri,又叫做重定向URI,在身份驗證中進行設置的,截圖如下:
當你輸入完成這樣一個網址後,瀏覽器訪問它,你會進入Azure AD的驗證界面,此時需要使用管理員進行登錄並授權:
當你點擊接收後,瀏覽器會把你導航到你的重定向URI中,當然這個頁面實際無所謂,重點是你已經爲你註冊的應用獲得到了管理員授權。也是就說此時,該應用(服務主體)已經確保獲得了無用戶參與登錄的訪問權限,並拿到了一些權限。
接下來的步驟比較簡單,應用程序獲取登錄認證不需要委託的認證那樣,存在code這個中間量。而是直接去獲取Access Token。
在給應用程序授予了管理員許可後,即可開始請求Access Token的過程。在應用程序的認證中申請憑證也需要POST http方法,即通過PostMan等工具或代碼進行執行來實現。
具體的請求方法爲(以中國版Azure AD舉例):
https://login.partner.microsoftonline.cn/<Tenant ID>/oauth2/token,當然,還是可以將Tenant ID修改爲common,Body中要填寫的內容如下表:
名稱 |
值 |
說明 |
client_id |
應用程序ID |
你註冊應用的應用程序ID |
grant_type |
client_credentials |
固定填寫 |
scope |
https://microsoftgraph.chinacloudapi.cn/.default |
固定格式,必須填寫。國際版值爲https://graph.microsoft.com/.default |
client_secret |
證書與密碼中,客戶端密碼的值 |
必須填寫。你可以隨時在證書與密碼中重新申請。 |
resource |
源,中國版請填寫https://microsoftgraph.chinacloudapi.cn |
該地址只在連接中國版時需要且必須,如連接國際版,勿添加此參數 |
如果不出意外的話,你會得到類似如下反饋:
{
"token_type": "Bearer",
"expires_in": "3599",
"ext_expires_in": "3599",
"expires_on": "1585623335",
"not_before": "1585619435",
"resource": "https://microsoftgraph.chinacloudapi.cn",
"access_token": "eyJ0eXAiOiJKV1QiLCJub25jZSI6Ii……
}
你會發現,與通過用戶名密碼登錄的情況不同,Azure AD只返回了access Token,當然這對應用程序來說也夠用了,有關其他Token的情況,我還是留到下次再說吧。代碼這次就不留了,和上次用戶名密碼通過code申請憑據的差不多,無非都是POST方法。
剩下的就是帶着這個Token去調用API了,簡單說明一下,你可以使用POSTMAN、Fiddler之類的工具,也可以開發完成。
POSTMAN中的測試極爲簡單,在Authorization 中,TYPE選爲Bearer Token,將剛剛獲取的Access Token粘貼在Token中,你可以去調用一個非常簡單的API,如列出用戶:
謝謝大家花時間閱讀,下次我們講一下之前漏掉的一些說明和情況。