如何在没有弹簧安全的情况下使用 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的主要内容,如果未能解决你的问题,请参考以下文章