spring-boot - 保护桌面应用程序客户端的 SpringBoot API
问题描述
我有一个基于 SpringBoot 微服务的后端 API,它使用 Zuul 作为 JavaFX 桌面应用程序之间的网关代理。现在没有安全措施,但我希望使用 Spring Security 来保护后端,但是,我似乎遇到的每个教程似乎都是基于 web 应用程序的,我还没有看到任何针对我的特定用例的东西. 我对 Spring Security 了解不多,但想知道我是否可以用它来实现我的目标,如果可以,我应该寻找哪些模块或示例。
目标:
为我的 API 提供一种方法来知道请求来自桌面应用程序本身,我认为这方面的技术术语是为桌面应用程序分配一个客户端 ID,然后让 Zuul 服务器验证客户端 ID 是否与桌面应用程序无关在接受请求之前。这应该是所有请求的情况
只允许通过 Zuul 代理的 API 流量,所有对 Zuul 网关后面的微服务的下游请求只有来自 Zuul 服务器本身时才应该被接受。
允许登录和注册为新用户的请求,除了 1 中讨论的桌面客户端 ID 之外没有任何类型的安全性。
当用户在登录时提供成功的用户名/密码时,他们会返回一个 JWT,然后将其存储在 JavaFX 应用程序中并用于对后端的所有其他请求。
将令牌配置为在特定时间范围后过期,比如 90 分钟,并提供一种方法来自动刷新过期令牌,只要用户帐户仍然有效。为此,我不希望用户必须重新登录,我只希望它在幕后检查以确保他们的帐户仍然有效,然后在需要时发出新令牌。
具有基于用户的角色,因此某些功能、方法、端点等只能由具有有效角色的用户访问。在 GUI 中,这些功能将被隐藏或禁用,但我仍然希望在服务器端有一层安全保护,以防止有人能够修改应用程序时进行不必要的访问。
解决方案
我只是写下你每个目标的答案:
- 在来自桌面应用程序的每个请求中传递客户端 ID 没有意义,相反,您可以在身份验证调用期间传递客户端 ID 和机密,就像我们在 Oauth 2.0 框架中一样。Rest https 调用应该从客户端进行,因此为了避免请求被篡改,您还可以在客户端应用程序和 Zuul API 网关之间进行双向 SSL,它确保调用仅来自桌面客户端。
- 是的,Zuul api 网关应该是你的应用程序的单一入口点,你的内部微服务不应该公开。
- 对于用户注册,可以使用client Id和secret来实现Client认证
- 正确,您还可以在后端创建仅 http cookie,其中仅包含您的 jwt 令牌。
- 令牌刷新可以在zuul api网关实现,如果会话处于活动状态,则调用刷新令牌端点以获取新的访问令牌。
- 在服务器端,在 zuul 代理中,您可以验证传入的不记名令牌到期以及签名验证,也可以使用通用声明。现在在微服务级别,spring security 可以用于特定方法的基于角色的访问控制。
推荐阅读
- python - 如何使用 tkinter 按钮更改变量的值?
- redis - REDIS 中的递归搜索
- spring-boot - 将 udp 数据包多播到不同节点上的所有 kubernetes pod
- excel - 使用 Microsoft Excel 应用条件
- android - 如何在android中将字符串值转换为JSONArray
- python - 根据 playerid 和 Series 键从列表中的字典中删除重复项
- python - wkhtmltopdf 配置路径
- actions-on-google - 发送媒体响应时,有没有办法使用 Google Actions 和 Actions SDK 作为履行工具来捕获和处理“下一个”和“上一个”?
- react-native - 密钥哈希与 facebook react-native 应用程序中存储的任何密钥哈希不匹配
- android - 两个模拟器之间的套接字连接