使用 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) 租户中应用程序的访问权限由服务主体定义,在访问资源时启用身份验证和授权。

有两种类型的身份验证方法可用于服务主体、客户端证书和客户端机密。

先决条件

步骤 1:注册服务主体

  1. Azure 门户的左侧导航窗格中,单击“Azure Active Directory”。
  2. 向 Azure AD 注册应用程序并创建服务主体。 记下客户端 ID。
  3. 选择身份验证类型。 有两种类型的身份验证可用于服务主体:
    • 客户端机密
    • 客户端证书

步骤 2:将服务主体添加到 Azure Sphere 租户并分配角色

注意

在开始此步骤之前,请确保满足以下条件:

Azure Sphere 将服务主体视为其他用户。 若要使用服务主体获取令牌,请先将服务主体用户添加到 Azure Sphere 租户,然后使用 Azure Sphere CLI 将角色分配给 Azure Sphere 租户中的用户。

用户标识可以生成为 <ObjectID>@<TenantID.onmicrosoft.com>。

在以下示例中,我们使用 Azure Sphere 租户 ID 中的对象 ID xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx 和 Azure AD 租户 tttttttt-tttt-tttt-tttt-ttttttttttttID zzzzzzzz-zzzz-zzzz-zzzz-zzzzzzzzzzzz 的组合创建用户,然后为此用户添加参与者角色。

  1. 使用 Azure Sphere CLI 使用 Azure Sphere 登录:

    azsphere login
    
  2. 选择所需的租户:

    azsphere tenant select --tenant tttttttt-tttt-tttt-tttt-tttttttttttt
    
  3. 将用户添加到所需角色:

    azsphere role add --role Contributor --user xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx@zzzzzzzz-zzzz-zzzz-zzzz-zzzzzzzzzzzz.onmicrosoft.com
    

步骤 3:使用应用程序注册门户注册客户端机密或客户端证书

客户端机密和客户端证书允许应用程序在 Web 可寻址位置(使用 HTTPS 方案)接收令牌时自行识别到身份验证服务。 建议在使用 Azure Active Directory 进行身份验证时,对客户端凭据方案使用证书而不是客户端密码。

应用程序注册的客户端机密或客户端证书可用于获取 Azure Sphere 公共 API(PAPI)的访问令牌

使用客户端密码配置应用程序

若要向客户端密码注册应用程序,请执行以下操作:

  1. Azure 门户的左侧导航窗格中,单击“Azure Active Directory”

  2. 转到应用注册,然后选择在步骤 1 中创建的应用程序:注册服务主体

  3. 在左窗格中,选择“证书和机密客户端机密”部分>“新建客户端机密”。>

  4. 输入说明,选择有效期,然后选择“添加”。 生成客户端密码并显示客户端机密值。

  5. 复制客户端机密值,因为以后将无法检索密钥。

  6. 使用 Azure Sphere 公共 API 应用程序 ID 提供客户端机密值,以以应用程序身份登录。 将密钥值存储在应用程序可检索的位置。

    重要

    客户端机密值是重要的安全凭据。 不要与任何人共享客户端密码,也不将其分发到客户端应用程序中。 建议使用 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;

使用客户端证书配置应用程序

若要设置客户端证书,请执行以下操作:

  1. Azure 门户的左侧导航窗格中,单击“Azure Active Directory”
  2. 转到应用注册,然后选择在步骤 1 中创建的应用程序:注册服务主体
  3. 在左窗格中,选择“证书和机密>证书上传证书”。> 选择证书(现有证书或导出的自签名证书)。
  4. 在应用程序注册门户中将证书注册到应用程序后,请启用客户端应用程序代码以使用该证书。

若要将应用程序注册到客户端证书,请使用以下示例代码:

 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。