也许这个问题似乎是基于意见的,但我在决定保护 RESTful API时遇到了困难。
首先,我的用例:
我的应用程序非常简单:前端是使用 React.js(用于浏览器客户端)编写的,它将使用 RESTful API 从数据库(或其他东西)获取数据。API 是使用Spring 框架构建的。
此 API 不是公共 API,它只有一个客户端(目前,以后将是移动应用程序)。
现在让我们来谈谈安全问题。显然,我想保护我的 API,我使用 Spring-security 作为这项工作的工具。在学习的最初几天,我只知道基本身份验证。但是,当我继续阅读更安全的选项时,我学到了一些新奇的术语:
- 基于令牌的身份验证,使用 JWT
- OAuth2
- OpendId 连接
当我阅读更多来自Auth0、Okta等的博客时,我把一切都搞砸了。这让我三思而后行,是否应该使用 OAuth 来保护 REST API(不公开)。此外,几乎所有关于 OAuth 的博客都以社交登录为例。这让我更加困惑,OAuth 是为了让第三方应用程序访问您的 API。就是这样,不适用于我的用例。
然后我从一些渠道和博客中询问了一些专家,一些人说基本身份验证对于安全性来说已经足够了(使用 https),我应该避免使用 OAuth 来满足这么小的要求。其他人则相反,称 Basic-Auth 存在安全漏洞。
让我们考虑一下 OAuth 对我来说是完美的,但在这种情况下,我的授权服务器将驻留在哪里?因为教程仅通过将代码保持在同一层来解释授权服务器。没有单独的项目或其他东西。
JWT 对我的用户案例也有一些负面评价:
- 它们不能被撤销,只会自行过期。不是没有安全感吗?
- 与会话令牌或 cookie 相比,它们的大小很大
- 验证的高计算成本
我真的需要更多关于这方面的建议,这已经花了我很多周的时间。
谢谢。