java - 使用服务用户或公共(public)用户保护 REST 端点

标签 java rest web-services security spring-boot

我正在编写一个移动应用程序,通过 REST 与远程 Java 服务进行通信。我已经使用 https 保护来保护我的 (SpringBoot) Web 服务(由于数据的性质,它需要安全),但我的问题是我使用哪个用户/密码来保护 https 调用。

我在 https header 中使用的用户名和密码应该是客户端(移动应用程序)和 Java 服务知道的服务帐户,还是公共(public)用户的用户名和密码?最简单的选择就是使用服务帐户,但这意味着移动应用程序将内置这些详细信息并公开分发(尽管以编译的形式)。

采用另一种方式并使用用户的用户名和密码意味着我必须打开登录 REST 端点且不安全(我猜这很好),但这只会让事情变得稍微复杂一些。

最佳答案

好问题,我认为您会使用基于 token 的身份验证和授权方案。首先,您应该有一个登录页面,客户端通过提供用户名和密码进行登录,该用户名和密码通过调用某些远程登录服务进行身份验证,该服务维护自己的用户存储,或者可以使用组织中现有的用户存储(如果有)。身份验证成功后,身份验证服务应向客户端提供有效的 token ,然后不时刷新该 token 。发送请求时,移动或 Web 客户端应将 token 传递给下游微服务,并且该 token 应在 Authorization HTTP header 内发送。

在网络上传递用户名和密码时暴露用户名和密码通常不被认为是一个好的解决方案,而这也是 token 变得方便的地方。 token 是人们用来保护休息端点的正常过程。您的休息端点应该拦截来自它的每个请求,将 token 传递给身份验证提供者并验证这一点。如果 token 有效,它将允许该请求,否则应拒绝该请求。

安全性是一个相当大的主题,除了 token 之外,您还拥有 X.509 证书来加密通过 https 等网络发送的数据。建议你看看spring security documentation因为这将是一个很好的起点。 Spring Security 为开发人员提供了很多钩子(Hook),可以通过一些合理的默认值开箱即用。您可以使用 JWT 样式 token 、Oauth token ,并且 Spring Security 也支持所有这些不同的形式。

关于java - 使用服务用户或公共(public)用户保护 REST 端点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47920614/

相关文章:

java - Web 服务调用返回 "Fault string, and possibly fault code, not set"

java - apache.commons.fileupload 抛出 MalformedStreamException

javascript - 如何使用 Spring MVC 将 Java Map 放入 Optgroup 选项中?

java - Eclipse 中的 Gradle 项目依赖关系与 Buildship

django Rest框架无法POST数据

php - 即使在成功操作后 Apigility 也会返回错误

mysql - Node.js 安全

c# - 如何从纬度和经度获得最近的重要人口中心?

c# - 类库中的 ASP.Net ASMX Web 服务(最佳实践)

java - 简单的 MPG 逻辑