我有一个Java Spring驱动的REST API服务器连接Postgresql数据库和一个Java的Spring Web服务器,它使用JavaScript(现在是浏览器,但将来也是移动应用程序)从REST API提供内容到客户端.
我已经阅读了许多文章和主题如何保护REST API,但我还没有做出最终决定.我不想拥有基本授权,因为它没有意义,因为我需要在JavaScript中存储凭据,任何进入网页和开发者控制台的人都可以轻松访问和阅读.我不想向最终用户显示任何凭据,因此我无法将它们保留在客户端.
我已经阅读了很多关于JWT的内容并且差不多决定实现它,但我听说它有一些缺点,并且从那时起就不那么肯定,如果它是我想选择的选项.我知道还有oAuth 1.0或oAuth 2.0,但我不知道我是否想要这么复杂的东西.我还希望将散列的用户凭据存储在我自己的数据库中,以便不依赖于社交媒体或Google等任何其他凭据提供程序.
现在我在我的Web服务器上创建另一个层作为代理,希望它允许我使用Spring Security在这个代理级别上验证用户并使用某种类型或cookie或某些东西进行身份验证,但我不确定它是否是可行的方式,它增加了响应时间,增加了复杂性,需要我为这些端点编写控制器方法.我的架构现在如下:
客户端(浏览器) – >网络服务器 – > REST API服务器 – > D b
我还拒绝了所有外部连接,只允许localhost访问tomcat级别的REST API,因此我必须只在Web服务器上实现安全级别,允许在Web服务器和REST API之间进行免费信息传输,因为它无法访问无论如何.
Web服务器和REST API与Tomcat实例运行在同一服务器上.
我也不太确定这种架构是否允许我通过Web服务器验证移动应用客户端.
我非常感谢你在这件事上给我的任何建议.我在安全方面不是很有经验,所以我有点迷失了我应该做的事情.这种架构是否有任何意义,或者我是否应该直接从任何类型的客户端询问REST API,无论是来自不同IP的网页还是移动应用程序,只有安全的Rest API?如果我想保护我的网页的某些子页面或移动应用程序的某些部分应该是一个完全不同的层?
谢谢您的帮助.
这个TokenHandler如何工作?
TokenHandler将像一个网关服务器,即您的每个REST API请求将通过此服务器应用程序路由.因此,您将通过标头中的authToken解决移动和Web应用程序调用的混乱问题.此服务器应用程序的主要职责是接受令牌并对数据库进行验证,其中维护所有令牌详细信息.此DB将包含有关上次用于验证令牌时的时间戳的信息,以确定您的验证规则.
如何生成令牌?
令牌可以是任何随机的64位字母数字字符串,并且将在每次登录活动期间在DB中生成和更新.登录webservice在响应正文中返回此标记.
什么可以作为验证规则?
它可以取决于您的业务逻辑.我倾向于保持15分钟的活动会话窗口.意味着如果您访问Web服务,您将获得15分钟的活动窗口.如果您连续15分钟没有访问任何服务,那么从第16分钟开始,您将需要再次登录才能访问更多呼叫.这部分可以根据要求改变.
客户方如何处理这个问题?
客户端将存储此令牌并在每次请求调用时传递此令牌.令牌处理程序将验证并将其请求重定向到应用程序服务器.因此,您的一个令牌处理程序可用于服务器对多个应用程序服务器的身份验证.这可以通过应用程序端点标识来实现.
如果您有任何问题或建议,我想进一步讨论.