使用 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 Web 应用调用 Azure Sphere 公共 API (PAPI)。

步骤 1:在资源中启用系统分配的标识

若要在资源中启用系统分配的标识,并查找项目的对象 ID:

  1. Azure 门户的左侧导航窗格中,单击App 服务
  2. 从下拉列表中选择所需的订阅,并从搜索结果中选择应用。
  3. 在逻辑应用菜单的“设置”下,选择“标识” 。
  4. 通过将状态设置为“打开”来启用系统分配的标识。
  5. 单击“ 保存”。
  6. 复制对象 ID

步骤 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:在项目中添加 Azure.Identity NuGet 包

项目中添加 Azure.Identity NuGet 包Azure Sphere 公共 API (PAPI) 令牌可由 DefaultAzureCredential 获取

有关示例,请参阅代码片段:

    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;
    }