微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

我正在开发一个应用程序,该应用程序使用 Angular 作为前端并且 Jersey 与 Spring SAML Security 集成以进行 SSO 身份验证。

我尝试从 Angular (http://localhost:4200) 调用应用程序,该应用程序将调用对 Jersey 项目的 API 调用,该调用将返回一个 URL(与 Jersey 服务器相关的 URL)以点击服务器以显示 IDP 登录页面登录到 IDP 后,它将我路由回服务器,从这里我想将响应重定向到 Angular 以显示主屏幕。

在 Angular 组件中使用,它将使用 (https://localhost/saml/login) 来击中 Jersey

window.location.href =  samlObject.url;

登录完成后,我登陆 https://localhost/loginComplete,必须路由到 http://localhost:4200/home

请提出任何可能的解决方案。

解决方法

  1. 当您访问您的站点时 - GET 调用 http://localhost:4200 -> 本地网络服务器以 angular 的 index.html 响应,然后捆绑的 js 执行并决定显示什么。使用您的 Auth 机制捆绑 angular 的 js 代码实现身份验证丢失,根据您在那里编写的回退计划,它重定向到 IDP(在此期间,您向服务器询问 IDP 的 url)。 (所有这些过程都发生在浏览器中。)
  2. 点击身份验证 - GET 调用 IDP 的登录信息(现在您要离开 Angular 应用程序并显示 IDP 的前端)。发布您的凭据并登录(IDP 的前端调用 IDP 的后端并登录)。 (所有这些都发生在您的浏览器中)然后
  3. (这里我猜你注册了一个由你的后端拥有的 post auth 重定向 URL。)这会对你的后端进行 GET 调用。如果您的休息控制器有响应,那么它将显示在您的浏览器中。

现在...

谁真正登录了?用户

谁代表您的用户?前端 -> 角度

后台登录了吗?否

后端是否代表任何人?否

每个用户的后端。任何授权的 api 调用都意味着后端将临时代表该用户(在 auth 中指定的内容)。当 API 调用结束时,后端停止运行。

纠正你的流程。您需要在登录后重定向到您的前端。当您向 IDP 注册您的应用程序时,重定向 url 必须是您前端的路由。这个 url 可以是一个在你的 angular 应用程序中有一个路由的组件。类似于 http://localhost:4200/login

对于 OAuth SAML 流程,我们会收到一个临时的 - 在前端仅使用一次 authcode。 我们将它提供给后端并要求将其转换为访问令牌、id 令牌、刷新令牌等。然后这取决于你,你可以查看 id 令牌(解析 JWT)并将新的用户信息重新添加到 JWT。您可以通过将其作为对传递 authcode 的 api 调用的响应发送回 angular。

但是……最近几年发生了很多变化。

现在 SPA 被认为是一个应用程序,但不安全(笑)

所以有一个最佳实践指南:https://datatracker.ietf.org/doc/html/draft-ietf-oauth-security-topics-13


简短回答:从 IDP 重定向到您的 Angular 应用程序,而不是您的后端


学习更大的 OAuth 2.0 集总是一个好主意。这将涵盖 SAML 流程 + 许多其他内容。有了它,您也可以了解其他系统中的 SAML 流实现。这很痛苦,但你被社区覆盖了。 https://github.com/manfredsteyer/angular-oauth2-oidc 确实是 angular 的救星。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。