网络应用程序接口

警告

本内容适用于较旧版本的 Azure AD v1.0 终结点。 为新项目使用 Microsoft 标识平台

Web API 应用是需要从 Web API 获取资源的 Web 应用程序。 在此方案中,Web 应用程序可以使用两种标识类型进行身份验证和调用 Web API:

  • 应用程序标识 - 此方案使用 OAuth 2.0 客户端凭据授予作为应用程序进行身份验证并访问 Web API。 使用应用程序标识时,Web API 只能检测 Web 应用程序正在调用它,因为 Web API 不会收到有关用户的任何信息。 如果应用程序收到有关用户的信息,它将通过应用程序协议发送,并且它不是由 Azure AD 签名的。 Web API 信任 Web 应用程序对用户进行身份验证。 因此,此模式称为受信任的子系统。
  • 委派的用户标识 - 可以通过两种方式完成此方案:OpenID Connect 和 OAuth 2.0 授权代码授予机密客户端。 Web 应用程序获取用户的访问令牌,该令牌向 Web API 证明用户已成功向 Web 应用程序进行身份验证,并且 Web 应用程序能够获取委托的用户标识来调用 Web API。 此访问令牌在请求中发送到 Web API,该 API 授权用户并返回所需的资源。

在下面的流程中讨论了应用程序标识和委托用户标识类型。 它们之间的主要区别在于,委托的用户标识必须先获取授权代码,然后用户才能登录并获取对 Web API 的访问权限。

图表

Web 应用程序到 Web API 关系图

协议流

使用 OAuth 2.0 客户端凭据授权的应用身份认证

  1. 用户在 Web 应用程序中登录到 Azure AD(有关详细信息,请参阅 Web 应用 部分)。
  2. Web 应用程序需要获取访问令牌,以便它可以向 Web API 进行身份验证并检索所需的资源。 它向 Azure AD 的令牌终结点发出请求,提供凭据、应用程序 ID 和 Web API 的应用程序 ID URI。
  3. Azure AD 对应用程序进行身份验证,并返回用于调用 Web API 的 JWT 访问令牌。
  4. 通过 HTTPS,Web 应用程序使用返回的 JWT 访问令牌在请求的授权标头中以“Bearer”标识添加 JWT 字符串,以请求 Web API。 然后,Web API 会验证 JWT 令牌,如果验证成功,则返回所需的资源。

使用 OpenID Connect 进行用户身份委派

  1. 用户使用 Azure AD 登录到 Web 应用程序(请参阅上面的 Web 浏览器到 Web 应用程序部分)。 如果 Web 应用程序的用户尚未同意允许 Web 应用程序代表其调用 Web API,则用户将需要同意。 应用程序将显示它所需的权限,如果其中任一权限是管理员级权限,目录中的普通用户将无法同意。 此许可过程仅适用于多租户应用程序,而不是单租户应用程序,因为应用程序已经拥有必要的权限。 用户登录时,Web 应用程序收到 ID 令牌,其中包含有关用户的信息以及授权代码。
  2. 使用 Azure AD 颁发的授权代码,Web 应用程序将请求发送到 Azure AD 的令牌终结点,其中包括授权代码、有关客户端应用程序的详细信息(应用程序 ID 和重定向 URI),以及所需的资源(Web API 的应用程序 ID URI)。
  3. Azure AD 验证有关 Web 应用程序和 Web API 的授权代码和信息。 成功验证后,Azure AD 返回两个令牌:JWT 访问令牌和 JWT 刷新令牌。
  4. 通过 HTTPS,Web 应用程序使用返回的 JWT 访问令牌在请求的授权标头中以“Bearer”标识添加 JWT 字符串,以请求 Web API。 然后,Web API 会验证 JWT 令牌,如果验证成功,则返回所需的资源。

使用 OAuth 2.0 授权代码授予的委托用户标识

  1. 用户已登录到 Web 应用程序,其身份验证机制独立于 Azure AD。
  2. Web 应用程序需要授权代码来获取访问令牌,因此它会通过浏览器向 Azure AD 的授权终结点发出请求,并在身份验证成功后为 Web 应用程序提供应用程序 ID 和重定向 URI。 用户登录到 Azure AD。
  3. 如果 Web 应用程序的用户尚未同意允许 Web 应用程序代表其调用 Web API,则用户将需要同意。 应用程序将显示它所需的权限,如果其中任一权限是管理员级权限,目录中的普通用户将无法同意。 此同意适用于单租户和多租户应用程序。 在单个租户案例中,管理员可以代表其用户执行管理员同意。 可以使用 Grant Permissions按钮完成此作。
  4. 用户同意后,Web 应用程序会收到它需要获取访问令牌的授权代码。
  5. 使用 Azure AD 颁发的授权代码,Web 应用程序将请求发送到 Azure AD 的令牌终结点,其中包括授权代码、有关客户端应用程序的详细信息(应用程序 ID 和重定向 URI),以及所需的资源(Web API 的应用程序 ID URI)。
  6. Azure AD 验证有关 Web 应用程序和 Web API 的授权代码和信息。 成功验证后,Azure AD 返回两个令牌:JWT 访问令牌和 JWT 刷新令牌。
  7. 通过 HTTPS,Web 应用程序使用返回的 JWT 访问令牌在请求的授权标头中以“Bearer”标识添加 JWT 字符串,以请求 Web API。 然后,Web API 会验证 JWT 令牌,如果验证成功,则返回所需的资源。

代码示例

请参阅 Web 应用程序到 Web API 方案的代码示例。 而且,常回来查看 -- 新样本不断添加。 Web 应用程序与 Web API

应用注册

若要向 Azure AD v1.0 终结点注册应用程序,请参阅 “注册应用”。

  • 单租户 - 对于应用程序标识和委托的用户标识案例,Web 应用程序和 Web API 必须在 Azure AD 中的同一目录中注册。 可以将 Web API 配置为公开一组权限,这些权限用于限制 Web 应用程序对其资源的访问。 如果使用委派用户身份类型,Web 应用程序需要从 Azure 门户中的 权限授予其他应用程序 下拉菜单中选择所需的权限。 如果使用应用程序标识类型,则不需要此步骤。
  • 多租户 - 首先,网络应用被配置以确定其正常运行所需的权限。 当目标目录中的用户或管理员向应用程序提供许可时,对话框会显示此所需权限列表,使应用程序可供其组织使用。 某些应用程序只需要用户级权限,组织中的任何用户都可以同意这些权限。 其他应用程序需要管理员级权限,组织中的用户无法同意该权限。 只有目录管理员才能同意需要此级别的权限的应用程序。 当用户或管理员同意时,Web 应用程序和 Web API 都在其目录中注册。

令牌过期

当 Web 应用程序使用其授权代码获取 JWT 访问令牌时,它还会收到 JWT 刷新令牌。 访问令牌过期时,可以使用刷新令牌重新对用户进行身份验证,而无需他们重新登录。 然后,此刷新令牌用于对用户进行身份验证,这会导致新的访问令牌和刷新令牌。

后续步骤