使用 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 应用程序 ID 添加到 Azure 租户。
步骤 1:注册服务主体
- 在Azure 门户的左侧导航窗格中,单击“Azure Active Directory”。
- 向 Azure AD 注册应用程序并创建服务主体。 记下客户端 ID。
- 选择身份验证类型。 有两种类型的身份验证可用于服务主体:
- 客户端机密
- 客户端证书
步骤 2:将服务主体添加到 Azure Sphere 租户并分配角色
注意
在开始此步骤之前,请确保满足以下条件:
- Azure Sphere 租户:使用 Azure Sphere CLI 运行命令 **azsphere tenant show-selected**
- Azure 租户 ID:通过Azure 门户查找租户 ID。 复制 Azure Active Directory 租户 ID。
- 查找与此应用程序关联的服务主体对象的唯一 ID:
- 转到应用注册,然后选择在步骤 1 中创建的应用程序:注册服务主体。
- 在本地目录中的托管应用程序下,选择具有应用名称的链接。 此选择的标签可能会被截断。
- 在 “属性” 页上,复制 对象 ID。
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-tttttttttttt
ID 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:使用应用程序注册门户注册客户端机密或客户端证书
客户端机密和客户端证书允许应用程序在 Web 可寻址位置(使用 HTTPS 方案)接收令牌时自行识别到身份验证服务。 建议在使用 Azure Active Directory 进行身份验证时,对客户端凭据方案使用证书而不是客户端密码。
应用程序注册的客户端机密或客户端证书可用于获取 Azure Sphere 公共 API(PAPI)的访问令牌。
使用客户端密码配置应用程序
若要向客户端密码注册应用程序,请执行以下操作:
在 Azure 门户的左侧导航窗格中,单击“Azure Active Directory”。
转到应用注册,然后选择在步骤 1 中创建的应用程序:注册服务主体。
在左窗格中,选择“证书和机密客户端机密”部分>“新建客户端机密”。>
输入说明,选择有效期,然后选择“添加”。 生成客户端密码并显示客户端机密值。
复制客户端机密值,因为以后将无法检索密钥。
使用 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;
使用客户端证书配置应用程序
若要设置客户端证书,请执行以下操作:
- 在 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。