使用 AAD 應用程式服務主體存取 Azure 球體公用 API
自動化工具需要受限制的存取和非互動式驗證,而不是以具有完全許可權的使用者身分驗證。 您可以使用允許應用程式以特定許可權登入的服務主體來達成此目標。 簡單來說,Azure 服務主體可做為在 Azure Active Directory 中註冊應用程式時,在 Azure 中建立的身分識別。
在此模式中,Azure Active Directory (AAD) 租使用者中的應用程式存取權限是由服務主體定義,可在存取資源時啟用驗證和授權。
有兩種類型的驗證方法適用於服務主體、用戶端憑證和用戶端機密。
先決條件
- Azure Active Directory 租使用者 (租使用者網域) 。
- Azure 球體租使用者。
- 服務主體用戶端機密或用來建立 PEM 格式之服務主體的 X509 憑證。
- 將 Azure 球體公用 API 應用程式識別碼新增至您的 Azure 租使用者。
步驟 1:註冊服務主體
- 在 Azure 入口網站 的左側瀏覽窗格中,按兩下 [Azure Active Directory]。
- 向 Azure AD 註冊應用程式,並建立服務主體。 請注意客戶端識別碼。
- 選取驗證類型。 服務主體有兩種類型的驗證:
- 用戶端機密
- 客戶端憑證
步驟 2:將服務主體新增至 Azure 球體租使用者並指派角色
注意
在開始此步驟之前,請先確定您有下列專案:
- Azure 球體租使用者:使用 Azure 球體 CLI 執行命令 **azsphere 租用戶顯示已選取**
- Azure 租使用者標識碼:透過 Azure 入口網站 尋找租用戶標識碼。 複製 Azure Active Directory 租用戶識別碼。
- 尋找與此應用程式相關聯之服務主體物件的唯一識別碼:
- 移至 應用程式註冊,然後選取您在步驟 1:註冊服務主體中建立的應用程式。
- 在 [本機目錄中受管理的應用程式] 底下,選取含有您應用程式名稱的連結。 此選取範圍的標籤可能被截斷。
- 在 [ 內容] 頁面上,複製 對象標識碼。
Azure 球體會將服務主體視為另一個使用者。 若要使用服務主體取得令牌,請先將服務主體使用者新增至 Azure 球體租用戶,然後使用 Azure 球體 CLI 指派角色給 Azure 球體租使用者中的使用者。
使用者身分識別可以產生為 <ObjectID>@<TenantID.onmicrosoft.com>。
在下列範例中,我們會在 Azure 球體租使用者標識碼中,使用物件識別xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
碼和 Azure AD 租使用者標識zzzzzzzz-zzzz-zzzz-zzzz-zzzzzzzzzzzz
tttttttt-tttt-tttt-tttt-tttttttttttt
碼的組合來建立使用者,然後新增此用戶的參與者角色。
使用 Azure 球體 CLI 使用您的 Azure 球體登入:
azsphere login
選取必要的租使用者:
azsphere tenant select --tenant tttttttt-tttt-tttt-tttt-tttttttttttt
若要在 Azure 球體租使用者中建立服務主體使用者:
azsphere register-user --new-user xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx@zzzzzzzz-zzzz-zzzz-zzzz-zzzzzzzzzzzz.onmicrosoft.com
若要將使用者新增至必要角色:
azsphere role add --role Contributor --user xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx@zzzzzzzz-zzzz-zzzz-zzzz-zzzzzzzzzzzz.onmicrosoft.com
步驟 3:使用應用程式註冊入口網站註冊用戶端機密或客戶端憑證
用戶端機密和客戶端憑證可讓應用程式在使用 HTTPS 配置) 接收網址位置 (的令牌時,識別自己對驗證服務的身分。 我們建議您在使用 Azure Active Directory 進行驗證時,使用憑證,而不要使用客戶端認證案例的用戶端機密。
應用程式註冊的用戶端機密或客戶端憑證可用來取得 Azure 球體公用 API (PAPI) 的存取令牌。
使用用戶端機密設定應用程式
若要向用戶端機密註冊您的應用程式:
在 Azure 入口網站 的左側瀏覽窗格中,按兩下 [Azure Active Directory]。
移至 應用程式註冊,然後選取您在步驟 1:註冊服務主體中建立的應用程式。
在左窗格中,選 取 [憑證 & 機密用戶端> 機密一節 >的 [新增用戶端機密]。
輸入描述、選取有效持續時間,然後選取 [新增]。 隨即產生客戶機密,並顯示客戶機密值。
複製用戶端機密值,因為您之後將無法擷取密鑰。
提供用戶端機密值搭配 Azure 球體公用 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。