使用 SSO:Ajax 请求

Working with SSO: Ajax request

我有一个 Web 应用程序和 API 服务器,该 Web 应用程序总是通过 AJAX 使用 API,少数情况除外。

当我为两者启用 SSO 时,我遇到了众所周知的问题 - 如何处理 AJAX 中的重定向。

(更多细节:Azure 要求用户只能通过其登录页面登录 AD - 因此理想情况下,当访问网页或 api 端点时,他们应该被重定向到 azure 登录页面。由于 HTTP302 重定向不适用于 XmlHTTP,当通过 AJAX)

访问 API 时,用户将不会被重定向到身份验证页面

我有几个选项可以解决这个问题:

  1. 当 Web 应用程序通过身份验证时重定向到预定义的 api 端点(例如:'api/login'),这将负责 api 身份验证,一旦完成后,将其重定向回 Web 应用程序。所以用户将被重定向到:

    web -> azure login -> web -> api -> azure login (auto login) -> api -> web

  2. 在 iframe(或图像)中加载 api 端点并等待加载完成事件

  3. 仅对 Web 应用程序进行身份验证 - 从 sso 上下文中删除 api 并找到其他方法来识别和验证 API 端的 Web 请求(令牌、cookie)

请帮我选择一个正确的模式。

AJAX 自动跟随重定向:

您需要区分来自服务的回复和登录页面,后者是在 AJAX 遵循重定向后获得的(但 not with safari+cors!)。例如,可以通过检查响应 body 中的字符串来完成检测。检测到后,只需通过 document.location=<login-page-url>.

将用户重定向到登录页面

另一种选择是在 "Authorization" HTTP header 中使用令牌而不是 SSO 来实现 backend-service 保护: https://auth0.com/blog/2014/01/07/angularjs-authentication-with-cookies-vs-token/