使用 AAD 受控識別存取 Azure Sphere 公用 API
重要
這是 Azure Sphere (舊版) 檔。 Azure Sphere(舊版)將於 2027 年 9 月 27 日淘汰,且使用者此時必須移轉至 Azure Sphere(整合式)。 使用位於 TOC 上方的版本選取器來檢視 Azure Sphere (整合式) 檔。
您可以使用此方法向任何支援 Azure Active Directory (AAD) 驗證的服務進行驗證,而不需要程式代碼中的任何認證。 AAD 受控識別會代表您處理服務主體的建立或更新。 它是特殊類型的服務主體,只能與 Azure 資源搭配使用。 刪除受控識別後,對應的服務主體也會自動移除。
系統指派:某些 Azure 服務可讓您直接在服務執行個體上啟用受控識別。 例如,Azure App 服務。 啟用系統指派的受控識別時,就會在 Azure AD 中建立身分識別,該識別與服務執行個體的生命週期連繫在一起。 因此,當刪除資源時,Azure 會自動為您刪除身分識別。 根據設計,只有該 Azure 資源可以使用此身分識別,自 Azure AD 要求權杖。
必要條件
- 具有開發功能的 Azure Sphere 型裝置。
- Azure Sphere 租使用者。
- 設定 Azure Sphere 的開發環境。
- Azure Active Directory 租使用者(租使用者標識符)。
- Azure 訂用帳戶。
- 將 Azure Sphere 公用 API 應用程式識別碼新增至您的 Azure 租使用者。
下一節說明如何使用受控識別從 Azure Web 應用程式呼叫 Azure Sphere 公用 API (PAPI)。
步驟 1:在資源中啟用系統指派的身分識別
若要在資源中啟用系統指派的身分識別,並尋找項目的物件識別碼:
- 在 Azure 入口網站 的左側瀏覽窗格中,按兩下 [App Services]。
- 從下拉式清單中選擇必要的訂用帳戶,然後從搜尋結果中選取您的應用程式。
- 在邏輯應用程式功能表的 [設定] 下,選取 [身分識別]。
- 將 [狀態] 設定為 [開啟],以啟用系統指派的身分識別。
- 按一下 [檔案] 。
- 複製物件 識別碼。
步驟 2:將受控識別新增至 Azure Sphere 租使用者
注意
開始此步驟之前,請確定您有下列專案:
- Azure Sphere 租使用者:使用 Azure Sphere CLI 執行 azsphere tenant show-selected 命令。
- Azure 租使用者標識碼:透過 Azure 入口網站 尋找租用戶標識碼。 複製 Azure Active Directory 租用戶識別碼。
Azure Sphere 會將服務主體視為另一個使用者。 若要使用服務主體取得令牌,請先將服務主體使用者新增至 Azure Sphere 租使用者,然後使用 Azure Sphere CLI 將角色指派給 Azure Sphere 租使用者中的使用者。
使用者身分識別可以產生為 <ObjectID>@<TenantID.onmicrosoft.com>。
在下列範例中,我們會使用 Azure Sphere 租使用者標識碼中的物件識別碼xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
和 Azure AD 租使用者識別碼tttttttt-tttt-tttt-tttt-tttttttttttt
zzzzzzzz-zzzz-zzzz-zzzz-zzzzzzzzzzzz
的組合來建立使用者,然後新增此用戶的參與者角色。
使用 Azure Sphere CLI 以您的 Azure Sphere 登入登入:
azsphere login
選取所需的租使用者:
azsphere tenant select --tenant tttttttt-tttt-tttt-tttt-tttttttttttt
若要將使用者新增至必要角色:
azsphere role add --role Contributor --user xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx@zzzzzzzz-zzzz-zzzz-zzzz-zzzzzzzzzzzz.onmicrosoft.com
步驟 3:在專案中新增 Azure.Identity NuGet 套件
在專案中新增 Azure.Identity NuGet 套件 。 Azure Sphere 公用 API (PAPI) 令牌可由預設AzureCredential 取得。
例如,請參閱代碼段:
public static async Task<string> GetAS3Token()
{
DefaultAzureCredential credential = new DefaultAzureCredential();
var result = await credential.GetTokenAsync(new Azure.Core.TokenRequestContext(
new[] { "https://firstparty.sphere.azure.net/api/.default" }));
return result.Token;
}