使用 SSO:Ajax 请求
Working with SSO: Ajax request
我有一个 Web 应用程序和 API 服务器,该 Web 应用程序总是通过 AJAX 使用 API,少数情况除外。
当我为两者启用 SSO 时,我遇到了众所周知的问题 - 如何处理 AJAX 中的重定向。
(更多细节:Azure 要求用户只能通过其登录页面登录 AD - 因此理想情况下,当访问网页或 api 端点时,他们应该被重定向到 azure 登录页面。由于 HTTP302 重定向不适用于 XmlHTTP,当通过 AJAX)
访问 API 时,用户将不会被重定向到身份验证页面
我有几个选项可以解决这个问题:
当 Web 应用程序通过身份验证时重定向到预定义的 api 端点(例如:'api/login'),这将负责 api 身份验证,一旦完成后,将其重定向回 Web 应用程序。所以用户将被重定向到:
web -> azure login -> web -> api -> azure login (auto login) -> api ->
web
在 iframe(或图像)中加载 api 端点并等待加载完成事件
- 仅对 Web 应用程序进行身份验证 - 从 sso 上下文中删除 api 并找到其他方法来识别和验证 API 端的 Web 请求(令牌、cookie)
请帮我选择一个正确的模式。
AJAX 自动跟随重定向:
- How to prevent ajax requests to follow redirects using jQuery
- Detecting a redirect in jQuery $.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/
我有一个 Web 应用程序和 API 服务器,该 Web 应用程序总是通过 AJAX 使用 API,少数情况除外。
当我为两者启用 SSO 时,我遇到了众所周知的问题 - 如何处理 AJAX 中的重定向。
(更多细节:Azure 要求用户只能通过其登录页面登录 AD - 因此理想情况下,当访问网页或 api 端点时,他们应该被重定向到 azure 登录页面。由于 HTTP302 重定向不适用于 XmlHTTP,当通过 AJAX)
访问 API 时,用户将不会被重定向到身份验证页面我有几个选项可以解决这个问题:
当 Web 应用程序通过身份验证时重定向到预定义的 api 端点(例如:'api/login'),这将负责 api 身份验证,一旦完成后,将其重定向回 Web 应用程序。所以用户将被重定向到:
web -> azure login -> web -> api -> azure login (auto login) -> api -> web
在 iframe(或图像)中加载 api 端点并等待加载完成事件
- 仅对 Web 应用程序进行身份验证 - 从 sso 上下文中删除 api 并找到其他方法来识别和验证 API 端的 Web 请求(令牌、cookie)
请帮我选择一个正确的模式。
AJAX 自动跟随重定向:
- How to prevent ajax requests to follow redirects using jQuery
- Detecting a redirect in jQuery $.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/