警告
本内容适用于较旧版本的 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 中间件进行保护。
图表
协议流
- 用户导航到 Web 应用程序。
- 应用程序将 JavaScript 前端(呈现层)返回到浏览器。
- 用户通过单击登录链接来启动登录。 浏览器将 GET 发送到 Azure AD 授权终结点以请求 ID 令牌。 此请求在查询参数中包含应用程序 ID 和回复 URL。
- Azure AD 根据 Azure 门户中配置的已注册回复 URL 验证回复 URL。
- 用户在登录页上登录。
- 如果身份验证成功,Azure AD 将创建 ID 令牌,并将其作为 URL 片段(#)返回到应用程序的回复 URL。 对于生产应用程序,此回复 URL 应为 HTTPS。 返回的令牌包含应用程序验证令牌所需的关于用户和 Azure AD 的声明。
- 在浏览器中运行的 JavaScript 客户端代码从响应中提取令牌,以用于保护对应用程序的 Web API 后端的调用。
- 浏览器使用授权标头中的 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),这些资源在用户的目录中注册,并在登录期间向用户提供任何必需的同意。