首页 > 解决方案 > 保护桌面应用程序客户端的 SpringBoot API

问题描述

我有一个基于 SpringBoot 微服务的后端 API,它使用 Zuul 作为 JavaFX 桌面应用程序之间的网关代理。现在没有安全措施,但我希望使用 Spring Security 来保护后端,但是,我似乎遇到的每个教程似乎都是基于 web 应用程序的,我还没有看到任何针对我的特定用例的东西. 我对 Spring Security 了解不多,但想知道我是否可以用它来实现我的目标,如果可以,我应该寻找哪些模块或示例。

目标:

  1. 为我的 API 提供一种方法来知道请求来自桌面应用程序本身,我认为这方面的技术术语是为桌面应用程序分配一个客户端 ID,然后让 Zuul 服务器验证客户端 ID 是否与桌面应用程序无关在接受请求之前。这应该是所有请求的情况

  2. 只允许通过 Zuul 代理的 API 流量,所有对 Zuul 网关后面的微服务的下游请求只有来自 Zuul 服务器本身时才应该被接受。

  3. 允许登录和注册为新用户的请求,除了 1 中讨论的桌面客户端 ID 之外没有任何类型的安全性。

  4. 当用户在登录时提供成功的用户名/密码时,他们会返回一个 JWT,然后将其存储在 JavaFX 应用程序中并用于对后端的所有其他请求。

  5. 将令牌配置为在特定时间范围后过期,比如 90 分钟,并提供一种方法来自动刷新过期令牌,只要用户帐户仍然有效。为此,我不希望用户必须重新登录,我只希望它在幕后检查以确保他们的帐户仍然有效,然后在需要时发出新令牌。

  6. 具有基于用户的角色,因此某些功能、方法、端点等只能由具有有效角色的用户访问。在 GUI 中,这些功能将被隐藏或禁用,但我仍然希望在服务器端有一层安全保护,以防止有人能够修改应用程序时进行不必要的访问。

标签: spring-bootjavafxspring-securityoauthmicroservices

解决方案


我只是写下你每个目标的答案:

  1. 在来自桌面应用程序的每个请求中传递客户端 ID 没有意义,相反,您可以在身份验证调用期间传递客户端 ID 和机密,就像我们在 Oauth 2.0 框架中一样。Rest https 调用应该从客户端进行,因此为了避免请求被篡改,您还可以在客户端应用程序和 Zuul API 网关之间进行双向 SSL,它确保调用仅来自桌面客户端。
  2. 是的,Zuul api 网关应该是你的应用程序的单一入口点,你的内部微服务不应该公开。
  3. 对于用户注册,可以使用client Id和secret来实现Client认证
  4. 正确,您还可以在后端创建仅 http cookie,其中仅包含您的 jwt 令牌。
  5. 令牌刷新可以在zuul api网关实现,如果会话处于活动状态,则调用刷新令牌端点以获取新的访问令牌。
  6. 在服务器端,在 zuul 代理中,您可以验证传入的不记名令牌到期以及签名验证,也可以使用通用声明。现在在微服务级别,spring security 可以用于特定方法的基于角色的访问控制。

推荐阅读