【问题标题】:How to authorize Angular5 app against SpringBoot backend using CAS如何使用 CAS 针对 Spring Boot 后端授权 Angular 5 应用程序
【发布时间】:2019-03-27 11:35:04
【问题描述】:

我最近一直在编写一个包含以下组件的 WebApp:

后端:带有 SpringSecurity 的 SpringBoot API,可针对第 3 方 CAS 服务器进行授权。

前端: Angular5 应用程序,它基本上查询 API 以获取信息。

问题:我其实有两个问题:

  • 如何同步前后端的 CAS 认证?
  • 当后端将前端重定向到登录页面时,如何避免 CORS 问题?

目前,如果我尝试直接访问后端中的资源,如果我已注销并且一切正常,它会将我重定向到 CAS 登录页面。但是,如果我从 Angular 端访问资源,我会遇到

CAS 登录重定向遇到跨域读取阻塞 (CORB) 阻止跨域响应。

对于第二个问题,我尝试了我在互联网上找到的所有内容,但没有取得多大成功。我已将 @CrossOrigin 添加到我的控制器中,如果我停用安全性,我不会遇到 CORS 问题,但在重定向到第 3 方登录时找不到如何避免它。

如果需要更多信息,我很乐意提供:)

提前致谢!

【问题讨论】:

    标签: angular spring-boot authentication spring-security cors


    【解决方案1】:

    我是一所主要大学的顾问,现在有几个 spring boot / Angular 应用程序,我们通过将 Angular 应用程序捆绑到后端应用程序的静态资源中解决了这个问题,因此 Angular 应用程序是由嵌入式网络服务器提供服务。

    这样,后端的 CAS 过滤器也可以保护对 Angular 应用的访问。

    我们唯一需要添加的是 Angular 中的 Http 拦截器,它可以捕获 Http 401 错误,如果 Angular 应用程序在 CAS 令牌过期后进行服务调用,可能会发生这种错误。拦截器重定向到 Spring Boot 应用程序中的路由,该路由又重定向到 CAS 服务器。

    【讨论】:

    • 是的,我读过 SpringBoot 为 Angular index.html 提供服务,这样一切都受到后端的保护,但我选择了它作为最后的选择。但是如果没有更好的解决方案出现,我会完全这样做并将其设置为答案。谢谢! :)
    • 我试过你所说的,但有些东西我不太明白:如果我不使用 CAS 保护 Angular 应用程序,当它尝试查询后端时,它会在后端尝试重定向时遇到 CORS到登录页面。如果我保护 Angular 应用程序(基本上是通过要求在 SecurityCONfig 中对“/*”进行身份验证,那么它会正确重定向到登录而不会遇到 CORS。我对此感到非常惊讶,因为所有请求现在都来自同一台服务器。
    • 这个解决方案也大大减慢了开发速度,每次发生变化时,我都必须 mvn clean install 整个东西并部署到 tomcat。在这方面有什么建议吗?
    • 不知道你为什么会遇到其他问题,但是对于 UI 开发,我启动了 spring boot 应用程序,登录到应用程序(这样我的浏览器就有了 CAS 令牌),保留它浏览器选项卡打开,然后再次运行 Angular 部分,它是开发服务器(Angular 应用程序根目录中的“npm start”),这使得应用程序的开发副本在端口 4200 上可用。这需要您设置Angular 的 .proxy 配置将您的服务请求从端口 4200 转发到 Spring Boot 正在服务的任何端口。然后你可以修改 Angular 应用,它会自动重新加载。
    猜你喜欢
    • 2020-05-27
    • 1970-01-01
    • 2018-02-27
    • 2018-08-30
    • 1970-01-01
    • 2018-09-27
    • 1970-01-01
    • 2021-05-14
    • 2019-11-17
    相关资源
    最近更新 更多