将应用服务或 Azure Functions 应用配置为使用 Azure AD 登录

本文介绍如何配置 Azure 应用服务或 Azure Functions,以便将 Azure Active Directory (Azure AD) 用作身份验证提供程序。

备注

快速设置流会设置 AAD V1 应用程序注册。 如果想使用 Azure Active Directory v2.0(包括 MSAL),请按照高级配置说明操作。

在设置应用和身份验证时,请遵循以下最佳做法:

  • 为每个应用服务应用提供其自身的权限和许可。
  • 为每个应用服务应用配置其自身的注册。
  • 避免通过对不同的部署槽使用不同的应用注册,在环境之间共享权限。 测试新代码时,这种做法有助于防止问题影响到生产应用。

备注

此功能暂不适用于 Azure Functions 的 Linux 消耗计划

使用高级设置进行配置

若要使用另一 Azure AD 租户中的应用注册,可以手动配置应用设置。 若要完成此自定义配置,请执行以下操作:

  1. 在 Azure AD 中创建注册。
  2. 向应用服务提供一些注册详细信息。

在 Azure AD 中为应用服务应用创建应用注册

配置应用服务应用时,需要提供以下信息:

  • 客户端 ID
  • 租户 ID
  • 客户端机密(可选)
  • 应用程序 ID URI

执行以下步骤:

  1. 登录到 Azure 门户,搜索并选择“应用服务”,然后选择应用。 记下应用的 URL。 稍后要使用此 URL 来配置 Azure Active Directory 应用注册。

  2. 选择“Azure Active Directory” > “应用注册” > “新建注册”。

  3. 在“注册应用”页上的“名称”中,输入应用注册的名称。

  4. 在“重定向 URI”中,选择“Web”并键入 <app-url>/.auth/login/aad/callback。 例如,https://contoso.chinacloudsites.cn/.auth/login/aad/callback

  5. 选择“注册”。

  6. 在应用注册创建后,复制“应用(客户端) ID”和“目录(租户) ID”,以供稍后使用。

  7. 选择“身份验证”。 在“隐式授权”下,启用“ID 令牌”以允许 OpenID Connect 用户从应用服务登录。

  8. (可选)选择“品牌”。 在“主页 URL”中,输入应用服务应用的 URL,然后选择“保存”。

  9. 依次选择“公开 API” > “设置”。 对于单租户应用,请粘贴应用服务应用的 URL 并选择“保存”;对于多租户应用,请粘贴基于某个租户验证域的 URL,然后选择“保存”。

    备注

    此值是应用注册的应用 ID URI。 如果 Web 应用需要访问云中的 API,则在配置云应用服务资源时,需要提供该 Web 应用的“应用程序 ID URI”。 例如,如果你希望云服务显式向该 Web 应用授予访问权限,则可以使用此 URI。

  10. 选择“添加范围”。

    1. 在“范围名称”中输入 user_impersonation
    2. 在文本框中,输入许可范围名称,以及希望在许可页上向用户显示的说明。 例如,输入“访问我的应用”。
    3. 选择“添加范围”。
  11. (可选)若要创建客户端机密,请选择“证书和机密” > “新建客户端机密” > “添加”。 复制页面中显示的客户端机密值。 它不会再次显示。

  12. (可选)若要添加多个回复 URL,请选择“身份验证”。

在应用服务应用中启用 Azure Active Directory

  1. Azure 门户中搜索并选择“应用服务”,然后选择应用。

  2. 在左窗格中的“设置”下,选择“身份验证/授权” > “启用”。

  3. (可选)默认情况下,应用服务身份验证允许未经身份验证的用户访问你的应用。 若要强制执行用户身份验证,请将“请求未经验证时需执行的操作”设置为“使用 Azure Active Directory 登录”。

  4. 在“身份验证提供程序”下,选择“Azure Active Directory”。

  5. 在“管理模式”中,选择“高级”,然后根据下表来配置应用服务身份验证:

    字段 说明
    客户端 ID 使用应用注册的应用(客户端)ID。
    颁发者 URL 使用 <authentication-endpoint>/<tenant-id>/v2.0,然后将 <authentication-endpoint> 替换为云环境的身份验证终结点(例如 China Azure 的“https://login.chinacloudapi.cn”),同时将 <tenant-id> 替换为其中创建了应用注册的“目录(租户) ID” 。 例如,此值用于将用户重定向到相应的 Azure AD 租户,以及下载适当的元数据,以便确定相应的令牌签名密钥和令牌颁发者声明值。 对于使用 Azure AD v1 的应用程序以及对于 Azure Functions 应用,请在 URL 中省略 /v2.0
    客户端密码(可选) 使用在应用注册中生成的客户端机密。
    允许的令牌受众 如果这是云应用或服务器应用,并且你希望允许使用 Web 应用中的身份验证令牌,请在此处添加 Web 应用的应用 ID URI。 系统始终会将配置的“客户端 ID”隐式视为允许的受众。
  6. 选择“确定”,然后选择“保存” 。

现在,可以使用 Azure Active Directory 在应用服务应用中进行身份验证。

配置本机客户端应用程序

可以注册本地客户端,以使用客户端库(例如 Active Directory 身份验证库)对应用中托管的 Web API 进行身份验证。

  1. Azure 门户中,选择“Active Directory” > “应用注册” > “新建注册”。

  2. 在“注册应用”页上的“名称”中,输入应用注册的名称。

  3. 在“重定向 URI”中选择“公共客户端(移动和桌面)”,然后键入 URL <app-url>/.auth/login/aad/callback。 例如,https://contoso.chinacloudsites.cn/.auth/login/aad/callback

    备注

    对于Microsoft Store 应用程序,请改用包 SID 作为 URI。

  4. 选择“创建”。

  5. 创建应用注册后,复制“应用程序(客户端) ID”的值。

  6. 选择“API 权限” > “添加权限” > “我的 API”。

  7. 选择前面为应用服务应用创建的应用注册。 如果未看到该应用注册,请确保在 在 Azure AD 中为应用服务应用创建应用注册部分已添加 user_impersonation 范围。

  8. 在“委托的权限”下,依次选择“user_impersonation”和“添加权限”。

现在,你已配置了可以代表用户访问应用服务应用的本机客户端应用程序。

为服务到服务调用配置后台程序客户端应用程序

应用程序可以获取令牌,代表自身(不代表用户)调用应用服务或 Functions 应用中托管的 Web API。 此方案适用于在没有登录用户的情况下执行任务的非交互式后台程序应用程序。 它使用标准 OAuth 2.0 客户端凭据授权。

  1. Azure 门户中,选择“Active Directory” > “应用注册” > “新建注册”。
  2. 在“注册应用程序”页上的“名称”中,输入后台程序应用注册的名称。
  3. 对于后台应用程序,不需要“重定向 URI”,因此可将其保留为空。
  4. 选择“创建”。
  5. 创建应用注册后,复制“应用程序(客户端) ID”的值。
  6. 选择“证书和机密” > “新建客户端机密” > “添加”。 复制页面中显示的客户端机密值。 它不会再次显示。

现在可以通过将 resource 参数设置为目标应用的“应用程序 ID URI”,使用客户端 ID 和客户端机密请求访问令牌。 然后,可以使用标准 OAuth 2.0 授权标头将生成的访问令牌提供给目标应用,应用服务身份验证/授权将像平常一样验证和使用该令牌,以指示调用方(在本例中是应用程序,不是用户)已进行身份验证。

目前,这允许 Azure AD 租户中的 任何 客户端应用程序请求访问令牌,并向目标应用进行身份验证。 如果还想要强制 授权 以只允许某些客户端应用程序,则必须执行一些附加配置。

  1. 在表示要保护的应用服务或 Functions 应用的应用注册清单中定义应用角色
  2. 在表示需要获得授权的客户端的应用注册上,选择“API 权限” > “添加权限” > “我的 API”。
  3. 选择之前创建的应用注册。 如果看不到应用注册,请确保已添加应用角色
  4. 在“应用程序权限”下,选择之前创建的应用角色,然后选择“添加权限”。
  5. 确保单击“授予管理员同意”以授权客户端应用程序请求权限。
  6. 与前面的方案(添加任何角色之前)类似,现在可以为同一目标 resource 请求访问令牌,而访问令牌将包括一个 roles 声明,其中包含授权给客户端应用程序的应用角色。
  7. 在目标应用服务或 Functions 应用代码中,现在可以验证令牌中是否存在预期的角色(这不是由应用服务身份验证/授权执行的)。 有关详细信息,请参阅访问用户声明

现已配置可以使用自己的标识访问应用服务应用的后台程序客户端应用程序。

后续步骤