单页应用程序

警告

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

单页应用程序(SPA)通常构建为在浏览器中运行的 JavaScript 呈现层(前端),而 Web API 后端在服务器上运行并实现应用程序的业务逻辑。若要了解有关隐式授权的详细信息,并帮助确定它是否适合应用程序方案,请参阅 了解 Azure Active Directory 中的 OAuth2 隐式授权流

在此方案中,当用户登录时,JavaScript 前端使用 适用于 JavaScript 的 Active Directory 身份验证库(ADAL.JS) 和隐式授权授予从 Azure AD 获取 ID 令牌(id_token)。 令牌会缓存,客户端在调用其 Web API 后端时将其作为持有者令牌附加到请求,该后端使用 OWIN 中间件进行保护。

图表

单页应用程序关系图

协议流

  1. 用户导航到 Web 应用程序。
  2. 应用程序将 JavaScript 前端(呈现层)返回到浏览器。
  3. 用户通过单击登录链接来启动登录。 浏览器将 GET 发送到 Azure AD 授权终结点以请求 ID 令牌。 此请求在查询参数中包含应用程序 ID 和回复 URL。
  4. Azure AD 根据 Azure 门户中配置的已注册回复 URL 验证回复 URL。
  5. 用户在登录页上登录。
  6. 如果身份验证成功,Azure AD 将创建 ID 令牌,并将其作为 URL 片段(#)返回到应用程序的回复 URL。 对于生产应用程序,此回复 URL 应为 HTTPS。 返回的令牌包含应用程序验证令牌所需的关于用户和 Azure AD 的声明。
  7. 在浏览器中运行的 JavaScript 客户端代码从响应中提取令牌,以用于保护对应用程序的 Web API 后端的调用。
  8. 浏览器使用授权标头中的 ID 令牌调用应用程序的 Web API 后端。 如果资源与客户端 ID 相同,Azure AD 身份验证服务会颁发 ID 令牌,该令牌可用作持有者令牌(在本例中,Web API 是应用自己的后端)。

代码示例

请参阅 单页应用程序方案的代码示例。 请务必经常检查一下,因为经常添加新示例。

应用注册

  • 单租户 - 如果要为组织生成应用程序,则必须使用 Azure 门户在公司的目录中注册该应用程序。
  • 多租户 - 如果要构建组织外部的用户可以使用的应用程序,则必须在公司的目录中注册该应用程序,但还必须在将使用该应用程序的每个组织的目录中注册该应用程序。 为了使您的应用程序在他们的目录中可用,您可以包含一个注册流程,允许客户同意使用您的应用程序。 注册应用程序时,它们将显示一个对话框,其中显示了应用程序所需的权限,然后显示同意的选项。 根据所需的权限,其他组织中的管理员可能需要授予许可。 当用户或管理员同意时,应用程序会在其目录中注册。

注册应用程序后,必须将其配置为使用 OAuth 2.0 隐式授权协议。 默认情况下,此协议已禁用应用程序。 若要为应用程序启用 OAuth2 隐式授权协议,请从 Azure 门户编辑其应用程序清单,并将“oauth2AllowImplicitFlow”值设置为 true。 有关详细信息,请参阅应用程序清单

令牌过期

使用 ADAL.js 有助于:

  • 刷新过期的令牌
  • 请求访问令牌以调用 Web API 资源

身份验证成功后,Azure AD 会在用户的浏览器中写入 Cookie 以建立会话。 请注意,该会话存在于用户与 Azure AD 之间(而不是用户与 Web 应用程序之间)。 当令牌过期时,ADAL.js 使用此会话以无提示方式获取另一个令牌。 ADAL.js 使用隐藏的 iFrame 通过 OAuth 隐式授权协议发送和接收请求。 ADAL.js 也可以使用同一机制为应用程序调用的其他 Web API 资源以无提示方式获取访问令牌,前提是这些资源支持跨域资源共享(CORS),这些资源在用户的目录中注册,并在登录期间向用户提供任何必需的同意。

后续步骤