1

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

4

1 回答 1

2

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

在您的情况下,从您的 angularjs 应用程序引发了一个简单的 HTTP 请求(http,your-website.com,80),然后将其重定向到安全的 HTTPS 请求(https,your-website.com,443)到身份验证器,结果证明成为“同源策略”问题,您会看到响应代码 0。

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

有关政策的详细信息,请访问同源政策

于 2013-08-29T12:44:23.750 回答