Angular JS 和 Spring 安全 OpenId 集成中的同源策略响应

Posted

技术标签:

【中文标题】Angular JS 和 Spring 安全 OpenId 集成中的同源策略响应【英文标题】:Same origin policy response in Angular JS and Spring security OpenId Integration 【发布时间】:2013-09-01 18:19:39 【问题描述】:

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

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

这里是代码sn-p,

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)

【问题讨论】:

【参考方案1】:

您正在向您的 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。

政策详情请访问same origin policy

【讨论】:

以上是关于Angular JS 和 Spring 安全 OpenId 集成中的同源策略响应的主要内容,如果未能解决你的问题,请参考以下文章

SpringBoot入门系列:Spring Security 和 Angular JS

Grails、Spring Security 和 Angular JS - 如何保护 URL?

发布请求不适用于 Spring 安全性和 Angular 5

java Spring和Angular的安全级别,使用JHipster

如何使用 Rest 和 Spring 安全性通过 ldap 登录 Angular?

在 Jersey 和 Spring SAML 安全 SSO 验证之后路由到 Angular 组件