如何在没有弹簧安全的情况下使用 api 密钥保护 rest api

Posted

技术标签:

【中文标题】如何在没有弹簧安全的情况下使用 api 密钥保护 rest api【英文标题】:how to secure rest api with api keys without spring security 【发布时间】:2019-08-06 01:08:40 【问题描述】:

我有一个 rest api MyRestApi.war 这是一个 spring boot 和 spring mvc 项目。

还有另一个 web 项目 A.war 是一个普通的 spring 项目。 它的前端如javascript和后端如java code需要 致电MyRestApi。用户需要登录A.war才能使用。

我不需要对MyRestApi做权限控制,只有登录A.war的用户才能通过A.war的前端和后端访问MyRestApi

有一些解决方案,例如API key, jwt, OAuth.

我想尝试这三种方法,然后选择一种。

但是当我搜索api key authentication 之类的内容时,他们都使用spring security 来做到这一点。

那么如何在没有 spring 安全性的情况下使用 api 密钥保护 MyRestApi

【问题讨论】:

请参考这个问题:How to secure REST API with Spring Boot and Spring Security? 【参考方案1】:

如果您不想使用 Spring Security,可以编写自己的过滤器。此过滤器将拦截所有 URL。 在此过滤器中,您可以检查标头中的 API 密钥并进行验证。 如果验证通过,则让链继续,否则向用户/应用程序抛出一些有意义的错误。

【讨论】:

api key 设置在请求标头中,例如标头名称为API-Key,标头值为123,然后在过滤器中获取此标头值并通过此标头名称进行检查,对吗?如果正确,api keyhttp basic auth 有什么区别?因为http basic auth也在header中设置了一些东西,只是设置了用户名和密码。 上述解决方案是在没有 Spring Security 的情况下保护 API。您的两个应用程序是否部署在同一台机器上?如果是,那么您可以将您的前端 Web 应用程序配置为侦听 433/80 端口。并且后端应用程序在不同的端口上。此外,您可以为该后端应用程序配置 http 连接器以仅侦听特定地址,例如“localhost”。检查此链接 - serverfault.com/questions/218666/… 是的,它们部署在同一台机器上,但抱歉我不明白你说的。我的问题是:当这两种方法用于保护restful api 时,api keyhttp basic auth 有什么区别?因为api keyhttp basic auth 在http 标头中都设置了值? api key 是否比 http basic auth 更安全?

以上是关于如何在没有弹簧安全的情况下使用 api 密钥保护 rest api的主要内容,如果未能解决你的问题,请参考以下文章

在不丢失可配置端点的情况下覆盖弹簧安全执行器

如何在无需登录的情况下保护 API

如何在不存储凭据的情况下连接到KeyVault?

在没有提供 API 密钥的情况下访问 Laravel 中的数据库有多安全?

有没有办法保护前端页面上的 API 密钥?

如何保护 API 密钥? [复制]