我正在开发一个 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/