javascript - Angular JS 和 Spring security OpenId Integration 中的同源策略响应

标签 javascript angularjs spring-security openid same-origin-policy

我正在开发一个 angularjs 应用程序并尝试为该应用程序集成 Spring Security 3 - OpenId。

每次登录请求转到 OpenId 服务器并提供凭据时,我都会收到响应代码 0,而不是 openid 的返回 url。

这是代码片段,

scope.$on('event:loginRequest', function(event, openid) {
         if (scope.loginTry < 1) {
             scope.loginTry = 1;
         }

         var payload = $.param({openid_identifier: openid});

         var config = {
             headers: {'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'}
         }

         $http.post('j_spring_openid_security_check', payload, config).success(function(data, textStatus, jqXHR, dataType) {
                //alert('success');

         });
  });

请指导我应该怎么做才能从服务器获得正确的响应 url。为什么服务器总是返回响应状态 0(Same-origin-policy)

最佳答案

您正在向您的 openid 身份验证器(Google、Yahoo、MyOpenID、Facebook 等之一)发送一个简单的 HTTP 请求,返回时为您提供他们的页面以输入您的凭据或从您登录的帐户中进行选择(如果有多个登录的帐户)。一旦您输入凭据或选择要登录的帐户,该请求就会作为 HTTPS 请求重定向到 openid 身份验证器,该身份验证器将对您进行身份验证并返回给您唯一的 openid 返回 url。

在你的例子中,一个简单的 HTTP 请求(http,your-website.com,80)是从你的 angularjs 应用程序提出的,然后被重定向到一个安全的 HTTPS 请求(https,your-website.com,443)到身份验证器,结果证明是“同源策略”问题,您会看到响应代码 0。

要解决这个问题,您应该使用来自 angularjs 应用程序的 HTTPS post 请求(如果它允许的话),或者您应该更喜欢使用简单的 jsp 表单而不是 ng-form 所以现在你的 https post 请求将被重定向到 authenticators https 请求,你将收到你的返回 openid url。

有关政策的详细信息,请访问 same origin policy

关于javascript - Angular JS 和 Spring security OpenId Integration 中的同源策略响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18508857/

相关文章:

java - Spring Security 应用程序的用户类

java - Struts 2 Tiles Spring Security 3 无法加载 css、图像、脚本

javascript - Objective-C/Cocoa windowScriptObject 命令在加载的页面中不起作用

javascript - ethers.js 中的 Attach 方法有什么作用?

javascript - 在等待 Promise 时切换 AngularJS View

javascript - ng-repeat 渲染并自动滚动到底部

asp.net - OWIN Web API Windows 服务 - Windows 身份模拟

使用基本 String 对象使用 MD5 进行 Spring Security Salt 配置

javascript - 如何让 KendoUI Validator 忽略隐藏的表单元素?

javascript - 如何使用 Jquery 获取类并执行函数