使用 AAD 應用程式服務主體存取 Azure Sphere 公用 API
重要
這是 Azure Sphere (舊版) 檔。 Azure Sphere(舊版)將於 2027 年 9 月 27 日淘汰,且使用者此時必須移轉至 Azure Sphere(整合式)。 使用位於 TOC 上方的版本選取器來檢視 Azure Sphere (整合式) 檔。
自動化工具需要受限的存取和非互動式驗證,而不是以完全特殊許可權的使用者身分進行驗證。 您可以使用可讓應用程式以特定許可權登入的服務主體來達成此目的。 簡單地說,Azure 服務主體會作為在 Azure Active Directory 中註冊應用程式時在 Azure 中建立的身分識別。
在此模式中,Azure Active Directory (AAD) 租使用者中應用程式的訪問許可權是由服務主體所定義,可在存取資源時啟用驗證和授權。
有兩種類型的驗證方法可用於服務主體、用戶端憑證和客戶端密碼。
必要條件
- Azure Active Directory 租使用者(租使用者網域)。
- Azure Sphere 租使用者。
- 服務主體客戶端密碼,或用來以 PEM 格式建立服務主體的 X509 憑證。
- 將 Azure Sphere 公用 API 應用程式識別碼新增至您的 Azure 租使用者。
步驟 1:註冊服務主體
- 在 Azure 入口網站 的左側瀏覽窗格中,按兩下 [Azure Active Directory]。
- 向 Azure AD 註冊應用程式,並建立服務主體。 記下用戶端識別碼。
- 選取 [驗證類型]。 服務主體有兩種可用的驗證類型:
- 用戶端密碼
- 用戶端憑證
步驟 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:使用應用程式註冊入口網站註冊客戶端密碼或客戶端憑證
用戶端秘密和用戶端憑證可讓應用程式在可尋址位置(使用 HTTPS 配置)接收令牌時,向驗證服務識別自己。 我們建議在向 Azure Active Directory 進行驗證時,針對客戶端認證案例使用憑證而非客戶端密碼。
應用程式註冊的用戶端密碼或客戶端憑證可用來取得 Azure Sphere 公用 API (PAPI) 的存取令牌。
使用客戶端密碼設定應用程式
若要向客戶端密碼註冊您的應用程式:
在 Azure 入口網站 的左側瀏覽窗格中,按兩下 [Azure Active Directory]。
從左窗格中,選取 [ 憑證與秘密> 客戶端密碼] 區段 >[新增客戶端密碼]。
輸入描述、選取有效期間,然後選取 [新增]。 會產生客戶端密碼,並顯示客戶端密碼值。
複製客戶端密碼值,因為您稍後將無法擷取密鑰。
使用 Azure Sphere 公用 API 應用程式識別碼提供客戶端密碼值,以應用程式身分登入。 儲存應用程式可以擷取的鍵值。
重要
用戶端密碼值是重要的安全性認證。 請勿與任何人共用用戶端密碼,或將其散發在用戶端應用程式內。 建議您使用 Azure 金鑰保存庫 服務來提供集中式秘密管理,並完全控制存取原則和稽核歷程記錄。
使用下列範例程式代碼:
IConfidentialClientApplication app =
ConfidentialClientApplicationBuilder.Create("<<App registration Client ID>>")
.WithClientSecret("<<App registration Client Secret Value>>")
.WithAuthority(AzureCloudInstance.AzurePublic, "<<3rd Party Tenant Id>>")
.Build();
string[] scopes = new[] { "https://firstparty.sphere.azure.net/api/.default" };
AuthenticationResult result = await app.AcquireTokenForClient(scopes).ExecuteAsync();
string accessToken=result.AccessToken;
使用客戶端憑證設定應用程式
若要設定客戶端憑證:
- 在 Azure 入口網站 的左側瀏覽窗格中,按兩下 [Azure Active Directory]。
- 移至 應用程式註冊,然後選取您在步驟 1:註冊服務主體中建立的應用程式。
- 從左窗格中,選取 [憑證與秘密>憑證>上傳憑證]。 選取憑證(現有的憑證或您導出的自我簽署憑證)。
- 在應用程式註冊入口網站中向您的應用程式註冊憑證之後,請啟用用戶端應用程式程式代碼以使用憑證。
若要向客戶端憑證註冊應用程式,請使用下列範例程式代碼:
IConfidentialClientApplication app =
ConfidentialClientApplicationBuilder.Create("<<App registration Client ID>>")
.WithCertificate("<<App registration Certificate>>")
.WithAuthority(AzureCloudInstance.AzurePublic, "<<3rd Party Tenant Id>>")
.Build();
string[] scopes = new[] { "https://firstparty.sphere.azure.net/api/.default" };
AuthenticationResult result = await app.AcquireTokenForClient(scopes).ExecuteAsync();
string accessToken=result.AccessToken;
注意
您必須新增 MSAL.Net 連結庫 ,才能使用 IConfidentialClient。