繁体   English   中英

与服务用户或公共用户保护REST端点的安全

[英]Secure REST endpoints with service user or public user

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

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

换种方式使用用户名和密码意味着我将不得不打开登录REST端点并且不安全(我想这是很好的做法),但这只会使它变得更加怪异。

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

在网络上传递用户名和密码时,通常不认为这是一个好的解决方案,令牌也很方便。 令牌是人们用来保护其余端点的正常过程。 您的休息端点应拦截每个请求,并将其传递给auth提供程序并进行验证。 如果令牌有效,它将允许该请求,否则应拒绝该请求。

安全性是一个相当大的话题,除了令牌以外,您还拥有X.509证书来加密通过https等方式通过网络发送的数据。 我建议您看一下Spring安全性文档,因为这将是一个很好的起点。 Spring Security为开发人员提供了很多挂钩,可以使用一些合适的默认值立即使用它们。 您可以使用JWT样式令牌,Oauth令牌和Spring Security也支持所有这些不同形式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM