Web应用安全架构

Blo*_*lex 5 java security rest spring tomcat

我有一个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或某些东西进行身份验证,但我不确定它是否是可行的方式,它增加了响应时间,增加了复杂性,需要我为这些端点编写控制器方法.我的架构现在如下:

客户端(浏览器) - > Webserver - > REST API服务器 - > db

我还拒绝了所有外部连接,只允许localhost访问tomcat级别的REST API,因此我必须只在Web服务器上实现安全级别,允许在Web服务器和REST API之间进行免费信息传输,因为它无法访问无论如何.

Web服务器和REST API与Tomcat实例运行在同一服务器上.

我也不太确定这种架构是否允许我通过Web服务器验证移动应用客户端.

我非常感谢你在这件事上给我的任何建议.我在安全方面不是很有经验,所以我有点迷失了我应该做的事情.这种架构是否有任何意义,或者我是否应该直接从任何类型的客户端询问REST API,无论是来自不同IP的网页还是移动应用程序,只有安全的Rest API?如果我想保护我的网页的某些子页面或移动应用程序的某些部分应该是一个完全不同的层?

谢谢您的帮助.

Roh*_*adu 2

您已经使用过 OAuth、JWT 令牌等。如果您不想使用它们,那么您可以创建您的own token based authentication system.(例如“ TokenHandler”)。

这个 TokenHandler 将如何工作?

TokenHandler 就像一个网关服务器,即您的每个 REST API 请求都将通过此服务器应用程序进行路由。因此,您将使用authToken in header. 该服务器应用程序的主要职责是接受令牌并根据维护所有令牌详细信息的数据库进行验证。该数据库将包含有关令牌上次用于验证时的时间戳的信息,以决定您的验证规则。

Token如何生成? 令牌可以是任何随机的 64 位字母数字字符串,并将在每次登录活动期间在数据库中生成和更新。登录 Web 服务在响应正文中返回此令牌。

验证规则可以是什么? 这可能取决于您的业务逻辑。我更喜欢将活动会话窗口保持在 15 分钟。意味着如果您访问网络服务,您将获得 15 分钟以上的活动窗口。如果您连续 15 分钟没有访问任何服务,那么从第 16 分钟开始,您将需要再次登录才能访问更多呼叫。这部分可以根据需要进行更改。

客户端将如何处理? 客户端将存储此令牌并在每次请求调用时传递此令牌。令牌处理程序将验证其请求并将其重定向到应用程序服务器。因此,您的一个令牌处理程序可用于对多个应用程序服务器进行身份验证。您可以通过应用程序端点标识符来实现这一点。

如果您有任何问题或建议,我愿意进一步讨论。