透過 Azure SDK for Media Services 與 C# 以 Azure Active Directory 進行身分驗證

Microsoft Azure Media Services 將於 2018 年6月22日更改身分驗證的方式,過去 Azure Media Services 使用的 Azure Access Control Service (ACS) 身分驗證機制將被 Azure Active Directory 的驗證方式所取代 ( https://azure.microsoft.com/en-us/blog/azure-media-service-aad-auth-and-acs-deprecation/ )。在此示範如何使用 Azure SDK for Media Services 4.0.0.4 之後版本 (  https://github.com/Azure/azure-sdk-for-media-services/ )  以 Azure Active Directory 進行身分驗證。

在您的程式碼中使用 Azure Active Directory 身分驗證驗證,請確認 Microsoft.WindowsAzure.MediaServices.Client.Common.Authentication 與 Microsoft.IdentityModel.Clients.ActiveDirectory 兩個 .NET Assembly 已經被您的專案檔所參考。

 

 

以互動式登入方式透過 Azure Active Directory 進行身分驗證

用戶可以在管理入口網站內針對已經建立妥的 Azure Media Services 點選 「API 存取權」(API Access),如下圖我們會看到兩個選項,一個是針對用戶以互動方式鍵入帳號密碼對 Azure Active Directory 進行身分驗證,另一個則是針對無法互動登入的情境,例如 Server 端程式碼,透過 Service Principal 方式來進行身分驗證。如果我們的應用程式可以允許用戶以互動方式進行登入,請點選如下圖中上方的選項。

 

當點選完畢後就會出現下圖畫面。請記錄下 Azure Active Directory 租戶網域與 REST API 端點兩項資訊,這兩項資訊將提供後續 C# 程式碼身分驗證時使用。

 

使用 Azure SDK for Media Services 通常至少需要使用底下這幾個命名空間:

在過去使用 Azure Access Control Service (ACS) 身分驗證機制的程式碼如下,請不要再繼續使用這種即將失效的身分驗證程式碼 :

而改為使用 Azure Active Directory 身分驗證的程式碼如下,請將之前記錄下來的 「Azure Active Directory 租戶網域」與「REST API 端點」填入程式碼中對應位子 :

 

以 Service Principal 方式透過 Azure Active Directory 進行身分驗證

針對無法有人參與互動的登入的情境,例如 Server 端程式碼,就透過 Azure Active Directory 的 Service Principal 方式來進行身分驗證。當您登入 Azure 管理入口網站,請在已經建立妥的 Azure Media Services 上點選 「API 存取權」(API Access),如下圖我們會看到兩個選項,如果要使用 Service Principal 方式進行身分驗證,請點選下方的選項。

 

當出現下圖畫面後,同樣地請記錄下 Azure Active Directory 租戶網域與 REST API 端點兩項資訊,這兩項資訊將提供後續登入程式碼時使用。使用 Service Principal 方式進行身分驗證時必須在 Azure Active Directory 內註冊一個 Azure AD Application,這個動作已經簡化可在下方畫面中快速完成,我只需要給需要呼叫 Azure Media Services API 的程式一個可供辨識名稱鍵入在「建立應用程式」欄位,輸入完畢後請點選「儲存」按鈕即可完成 Azure AD Application 註冊動作。以下圖的範例, Azure Media Services Explorer 為此一 Azure AD Application 名稱,您可以使用您的應用程式名稱取代之,鍵入完畢後按下上方儲存按鈕即可完成註冊動作。

 

 

當此一 Azure AD Application 註冊完畢,我們即可點選下圖中的「管理應用程式」按鈕,取得並記錄下此一應用程式之「應用程式識別碼」(Application ID),應用程式識別碼 (Application ID) 是一個絕對唯一,代表您這個應用程式的辨識 ID,系統會自動產生後不可修改,當呼叫 Media Services API 時會使用,此 ID 在舊版 Azure Portal 中 Azure Active Directory 管理畫面中稱為 "用戶端識別碼" (clientid),這是沿用了 OAUTH 2.0 規格中的名稱 Client ID,所以 Application ID 與 Client ID 其實是同一件事。接下來我們需要點選下圖右方的「金鑰」準備產生一個的 Service Principal 的「金鑰」。

 

「金鑰」按下請如下圖鍵入一個可供辨識的金鑰名稱,並設定此一金鑰的有效期限,按下儲存按鈕後金鑰即會產生,特別需要注意的是金鑰產生後僅能顯示一次,請務必保存下來以供後續 C# 程式碼登入時使用。

 

接下來之前記錄下來的 「Azure Active Directory 租戶網域」, 「REST API 端點」 ,「應用程式識別碼」(Application ID), Service Principal 的「金鑰」填入以下範例程式碼中的對應位子即可完以 Service Principal 方式透過 Azure Active Directory 進行身分驗證。