我正在编写一个移动应用程序,该应用程序通过REST传达到远程Java服务。我已经通过HTTPS保护保护了我(Springboot)Web服务(由于数据的性质,需要安全),但我的问题是我使用哪种用户/密码来保护HTTPS调用。
我在HTTPS标头中使用的用户名和密码是否应该是客户(移动应用程序)和Java服务知道的服务帐户,还是应该是公共用户的用户名和密码?最简单的选择是仅使用服务帐户,但这意味着移动应用程序将内置其中的这些详细信息并公开分发(尽管以编译形式)。
使用用户的用户名和密码使用,这意味着我必须让登录REST端点打开和不安全(我猜这很好),但这只是使它变得更加麻烦。
<</p>好问题,我认为您使用基于令牌的身份验证和授权方案。首先,您应该有一个登录页面,其中客户端通过提供用户名和密码来登录,该密码通过调用一些远程登录服务来验证,该远程登录服务维护其自己的用户商店,或者如果有的话,可以在组织中使用现有的登录服务。成功身份验证后,身份验证服务应为客户提供有效的令牌,然后不时地刷新。发送请求时,移动或Web客户端应将令牌传递到下游微服务,并且该令牌应在Authorization
HTTP标头内发送。
在网络围绕网络传递时,将用户名和密码通常不被视为一个好的解决方案,而这也是令牌也很方便的地方。令牌是人们用来保护休息端点的正常过程。您的休息端点应拦截每个请求,将令牌传递给Auth提供商并验证。如果令牌有效,它将允许请求,否则应拒绝它。
安全性是一个更大的主题,除了代币以外,您还拥有X.509证书,可以加密通过https
上的电线发送的数据,等等。我建议您查看春季安全文档,因为这将是一个很好的起点。Spring Security为开发人员提供了许多挂钩,可以在开箱即用的情况下使用一些明智的默认设置使用。您可以使用JWT样式令牌,Oauth代币和Spring Security也支持所有这些不同的形式。