如何使用 CAS 针对 Spring Boot 后端授权 Angular 5 应用程序
Posted
技术标签:
【中文标题】如何使用 CAS 针对 Spring Boot 后端授权 Angular 5 应用程序【英文标题】:How to authorize Angular5 app against SpringBoot backend using CAS 【发布时间】:2019-03-27 11:35:04 【问题描述】:我最近一直在编写一个包含以下组件的 WebApp:
后端:带有 SpringSecurity 的 SpringBoot API,可针对第 3 方 CAS 服务器进行授权。
前端: Angular5 应用程序,它基本上查询 API 以获取信息。
问题:我其实有两个问题:
如何同步前后端的 CAS 认证? 当后端将前端重定向到登录页面时,如何避免 CORS 问题?目前,如果我尝试直接访问后端中的资源,如果我已注销并且一切正常,它会将我重定向到 CAS 登录页面。但是,如果我从 Angular 端访问资源,我会遇到
CAS 登录重定向遇到跨域读取阻塞 (CORB) 阻止跨域响应。
对于第二个问题,我尝试了我在互联网上找到的所有内容,但没有取得多大成功。我已将 @CrossOrigin 添加到我的控制器中,如果我停用安全性,我不会遇到 CORS 问题,但在重定向到第 3 方登录时找不到如何避免它。
如果需要更多信息,我很乐意提供:)
提前致谢!
【问题讨论】:
【参考方案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 应用,它会自动重新加载。以上是关于如何使用 CAS 针对 Spring Boot 后端授权 Angular 5 应用程序的主要内容,如果未能解决你的问题,请参考以下文章
spring boot应用集成cas单点登录,post请求拿不到参数
CAS Maven Overlay和Spring Boot不能一起工作
CAS服务器认证成功后,如何使Spring安全将用户重定向到原始请求的页面