如何防止AngularJS路由尝试使用我的服务器端SSO重新进行身份验证?

时间:2015-01-12 23:28:34

标签: angularjs single-sign-on

我已经设置了一个AngularJS应用程序,该应用程序在模块上使用以下路由配置:

$stateProvider.
    state('home', {
        url: '/',
        templateUrl: 'public/modules/core/views/home.client.view.html'
    }).
    state('page2', {    
        url: '/test',
        templateUrl: 'public/modules/core/views/test.client.view.html'
    });

我的网络服务器上有SSO软件,迫使我登录,如果获得授权,将在请求标题上设置用户信息并转发给请求页面。因此,当第一次点击应用程序(http://---.-------.com)时,我登录并重定向到上面的主页。 Angular工作正常并加载正确的模板。但是,当单击指向/ test(要加载的第二个模板)的页面上的链接时,它会因某种原因尝试重新进行身份验证,并在浏览器控制台中获得跨域异常。

我认为AngularJS会在没有页面重新加载的情况下点击链接时加载第二个模板,这样服务器端SSO就不会重新触发。当我在最初的html文件中嵌入模板时,我能够毫无问题地加载模板,但我计划拥有许多模板,并希望将模板保存在自己的文件中。

有谁能看到我如何将模板保存在自己的文件中,但是阻止在每个AngularJS重新路由上触发SSO?

-----澄清:因此,在初次登录后,会提供一个cookie。也许我只是不明白如何让Angular ui-router使用该cookie,这应该是后续请求的一部分。这通常是怎么做的?

1 个答案:

答案 0 :(得分:0)

您的服务器配置很可能会出现问题,除非您有特殊的JS代码来处理请求(例如Angular请求拦截器)。我以与你相同的方式使用$stateProvider,我的工作效果很好。

一种可能性是您的服务器已配置为每次请求HTML页面时强制进行身份验证。签出很容易 - 登录后刷新当前页面。如果再次要求您登录,那就是问题所在。

解决方案取决于您的服务器技术。解决方法是将 test.client.view.html 重命名为 test.client.view。 js 并更新templateUrl,因为你的js加载看起来很好。

这是我最好的猜测,没有进一步的细节。希望它有所帮助。