如何在没有弹簧安全的情况下使用 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 key
和http basic auth
有什么区别?因为http basic auth
也在header中设置了一些东西,只是设置了用户名和密码。
上述解决方案是在没有 Spring Security 的情况下保护 API。您的两个应用程序是否部署在同一台机器上?如果是,那么您可以将您的前端 Web 应用程序配置为侦听 433/80 端口。并且后端应用程序在不同的端口上。此外,您可以为该后端应用程序配置 http 连接器以仅侦听特定地址,例如“localhost”。检查此链接 - serverfault.com/questions/218666/…
是的,它们部署在同一台机器上,但抱歉我不明白你说的。我的问题是:当这两种方法用于保护restful api
时,api key
和http basic auth
有什么区别?因为api key
和http basic auth
在http 标头中都设置了值? api key
是否比 http basic auth
更安全?以上是关于如何在没有弹簧安全的情况下使用 api 密钥保护 rest api的主要内容,如果未能解决你的问题,请参考以下文章