警告
本内容适用于较旧版本的 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 的访问权限。
图表
协议流
使用 OAuth 2.0 客户端凭据授权的应用身份认证
- 用户在 Web 应用程序中登录到 Azure AD(有关详细信息,请参阅 Web 应用 部分)。
- Web 应用程序需要获取访问令牌,以便它可以向 Web API 进行身份验证并检索所需的资源。 它向 Azure AD 的令牌终结点发出请求,提供凭据、应用程序 ID 和 Web API 的应用程序 ID URI。
- Azure AD 对应用程序进行身份验证,并返回用于调用 Web API 的 JWT 访问令牌。
- 通过 HTTPS,Web 应用程序使用返回的 JWT 访问令牌在请求的授权标头中以“Bearer”标识添加 JWT 字符串,以请求 Web API。 然后,Web API 会验证 JWT 令牌,如果验证成功,则返回所需的资源。
使用 OpenID Connect 进行用户身份委派
- 用户使用 Azure AD 登录到 Web 应用程序(请参阅上面的 Web 浏览器到 Web 应用程序部分)。 如果 Web 应用程序的用户尚未同意允许 Web 应用程序代表其调用 Web API,则用户将需要同意。 应用程序将显示它所需的权限,如果其中任一权限是管理员级权限,目录中的普通用户将无法同意。 此许可过程仅适用于多租户应用程序,而不是单租户应用程序,因为应用程序已经拥有必要的权限。 用户登录时,Web 应用程序收到 ID 令牌,其中包含有关用户的信息以及授权代码。
- 使用 Azure AD 颁发的授权代码,Web 应用程序将请求发送到 Azure AD 的令牌终结点,其中包括授权代码、有关客户端应用程序的详细信息(应用程序 ID 和重定向 URI),以及所需的资源(Web API 的应用程序 ID URI)。
- Azure AD 验证有关 Web 应用程序和 Web API 的授权代码和信息。 成功验证后,Azure AD 返回两个令牌:JWT 访问令牌和 JWT 刷新令牌。
- 通过 HTTPS,Web 应用程序使用返回的 JWT 访问令牌在请求的授权标头中以“Bearer”标识添加 JWT 字符串,以请求 Web API。 然后,Web API 会验证 JWT 令牌,如果验证成功,则返回所需的资源。
使用 OAuth 2.0 授权代码授予的委托用户标识
- 用户已登录到 Web 应用程序,其身份验证机制独立于 Azure AD。
- Web 应用程序需要授权代码来获取访问令牌,因此它会通过浏览器向 Azure AD 的授权终结点发出请求,并在身份验证成功后为 Web 应用程序提供应用程序 ID 和重定向 URI。 用户登录到 Azure AD。
- 如果 Web 应用程序的用户尚未同意允许 Web 应用程序代表其调用 Web API,则用户将需要同意。 应用程序将显示它所需的权限,如果其中任一权限是管理员级权限,目录中的普通用户将无法同意。 此同意适用于单租户和多租户应用程序。 在单个租户案例中,管理员可以代表其用户执行管理员同意。 可以使用
Grant Permissions的按钮完成此作。 - 用户同意后,Web 应用程序会收到它需要获取访问令牌的授权代码。
- 使用 Azure AD 颁发的授权代码,Web 应用程序将请求发送到 Azure AD 的令牌终结点,其中包括授权代码、有关客户端应用程序的详细信息(应用程序 ID 和重定向 URI),以及所需的资源(Web API 的应用程序 ID URI)。
- Azure AD 验证有关 Web 应用程序和 Web API 的授权代码和信息。 成功验证后,Azure AD 返回两个令牌:JWT 访问令牌和 JWT 刷新令牌。
- 通过 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 刷新令牌。 访问令牌过期时,可以使用刷新令牌重新对用户进行身份验证,而无需他们重新登录。 然后,此刷新令牌用于对用户进行身份验证,这会导致新的访问令牌和刷新令牌。