我正在编写一个通过REST与远程Java服务通信的移动应用程序。我已经使用https保护保护我的(SpringBoot)Web服务(由于数据的性质,它需要是安全的)但我的问题是我使用哪个用户/密码来保护https呼叫。
我在https标头中使用的用户名和密码是否应该是客户端(移动应用)和Java服务知道的服务帐户,或者应该是公共用户的用户名和密码?最简单的选择就是使用服务帐户,但这意味着移动应用程序将内置这些细节并公开发布(尽管是以编译形式)。
走另一条路并使用用户的用户名和密码意味着我必须让登录REST端点打开并且不安全(我猜这很好),但它只是让它更加繁琐
答案 0 :(得分:0)
好问题,我想你会使用基于令牌的身份验证和授权方案。首先,您应该有一个登录页面,其中客户端通过提供用户名和密码登录,该用户名和密码通过调用一些远程登录服务进行身份验证,该服务维护自己的用户存储,或者可以使用组织中的现有用户(如果有)。验证成功后,auth服务应为客户端提供有效令牌,然后不时刷新。移动或Web客户端应在发送请求时将令牌传递到下游微服务,并且此令牌应在Authorization
HTTP头内发送。
在网络上传递用户名和密码时,通常不会将其视为一个好的解决方案,而且令牌也变得很方便。令牌是人们用来保护休息端点的正常程序。 Yous rest端点应该拦截每个请求,并将令牌传递给auth提供程序并验证。如果令牌有效,它将允许请求,否则它应该拒绝它。
安全性是一个非常大的主题,除了令牌之外,您还拥有X.509证书来加密通过https
等网络发送的数据。我建议你看一下春季安全documentation,因为这将是一个很好的起点。 Spring Security为开发人员提供了许多钩子,可以在开箱即用的情况下使用一些合理的默认值。您可以使用JWT样式令牌,Oauth令牌和弹簧安全性也支持所有这些不同的形式。