首页 > 解决方案 > 如何使用 Spring Security 实现基本的 IAM oauth2 流程?

问题描述

我目前正在使用spring security oauth2进行开发。

目前,前端是 SPA,它被开发为与客户端重新渲染一起操作的 react。

我的 rest api 有 spring security starters 库。但是我不知道如何使用spring提供的oauth2 flow。

所以我的问题是:我可以使用 spring security 作为 IAM 来保护我的 web 和 api 吗?

Spring Security 是否有已知的 oauth2 授权以及如何使用它们?

标签: spring-bootspring-securityoauth-2.0single-page-applicationamazon-iam

解决方案


不要使用隐式授权

不建议使用隐式流(并且某些服务器完全禁止此流),因为在 HTTP 重定向中返回访问令牌而没有任何确认客户端已收到它的固有风险。

来源:https ://oauth.net/2/grant-types/implicit/

使用隐式授权,无需额外的授权代码交换步骤即可立即返回访问令牌。这个额外的步骤通常在您的后端执行。

网页 > 令牌 > Api

SPA 前端及其 Rest Api 是一种非常常见的方法,从简单的初创公司到大公司都在使用。总结的流程是:

  • 您的用户将启动 Web 应用程序。
  • 由于他们之前没有登录,您的 Web 应用程序将向他们显示登录屏幕(授权服务器提供的页面)。
  • 验证后,向用户显示同意书
  • 用户同意后,授权服务器会向您发送一个授权码。
  • Web 应用程序将用此代码交换令牌。
  • 取回此令牌后,Web 应用程序将其存储在客户端(浏览器)中,并在需要使用 API 时将其作为标头发送。
  • 您的私有 REST API 必须通过将其发送到授权服务器的一个端点来验证 Web 应用程序(标头)的令牌是否有效
  • 如果令牌有效,则允许您的 api rest 响应 Web 客户端。例如包含产品、员工、客户订单详细信息的一些更新等的 json

要使此流程起作用,您将需要:

  • 带有后端提示的网络水疗中心。后端是必需的,因为您无法在 apache 或 nginx 等静态解决方案中拥有正确的用户会话。
  • 身份验证和授权服务器:称为身份和访问管理 (IAM) 或某些第三方应用程序,它为您提供基本的 oauth2 端点来管理您的应用程序的适当安全性。
  • 你的 api:foo-api、bar-api、baz-api 等

春季安全

在最小的情况下:

  • 你将只有一个 web + 一个 rest api,未来不会再有(手机、物联网等)
  • 您没有身份验证/授权服务器
  • 您在一个工件中混合了功能性 api(员工、产品等)及其安全性(spring-security)
  • 您的网络中不需要用户会话
  • 你不需要注销功能

流量可以减少到:

  • 您的用户将启动 Web 应用程序。
  • 由于他们之前没有登录,您的 Web 应用程序将向他们显示登录屏幕(由spring-security提供的页面)。
  • 验证后,向用户显示同意书
  • 用户同意后,授权服务器会向您发送一个授权码。
  • Web 应用程序将用此代码交换令牌。由于您的 api 使用 Spring 安全性,因此涵盖了令牌生成。
  • 取回此令牌后,Web 应用程序将其存储在客户端(浏览器)中,并在需要使用 API 时将其作为标头发送。
  • 您的私有休息 api 必须通过将 Web 应用程序(标头)的令牌发送到授权服务器的一个端点来验证它是否有效,我认为 spring 安全链过滤器可以处理这个问题。
  • 如果令牌有效,则允许您的 api rest 响应 Web 客户端。例如包含产品、员工、客户订单详细信息的一些更新等的 json

带有弹簧安全性的oauth2

这里有一些带有spring security的令牌生成和受保护端点的示例。我将尝试上传一个可以使用的示例:

我是

如果你以后有更多的应用和复杂的场景,我建议你选择一些开源的iam,比如:

  • Glewlwyd,Keycloak,OAuth.io,ORY Hydra,SimpleLogin,SSQ 登录,

商业服务,例如:

  • Auth0,Curity Identity Server,FusionAuth,Okta,Red Hat Single Sign-On,cidaas。

或者尝试使用纯 spring-security 开发一个新的

讲座

一些带有更多 oauth2 详细信息的推荐答案:


推荐阅读