如何在 Spring Boot 中设计两个单独的授权/身份验证配置?

Posted

技术标签:

【中文标题】如何在 Spring Boot 中设计两个单独的授权/身份验证配置?【英文标题】:How to design two seperate authorization/authentication configurations in spring boot? 【发布时间】:2022-01-05 17:10:38 【问题描述】:

我想用这个设计实现spring boot应用的认证和授权:

第一组端点 ("/api/**) 将通过请求标头传递 api-secret-key 来获得授权。应该允许所有人进行身份验证。

第二组 (/admin/**) 将通过点击 /login 端点进行身份验证,传递用户名和密码,我将在其中自定义 UserDetailService。如果认证成功,则返回token,用于其他端点的授权。

我有实现的想法:

两个 WebSecurityConfiguration 两个过滤器

我经常失败,我认为问题在于我解决问题的方法。 这是已经实现代码的initial问题,但我希望有人提出不同的方法

【问题讨论】:

this answer你的问题吗? 【参考方案1】:

我认为更简单的解决方案可能是首先匹配路径前缀(使用 ant/path 模式),然后为该路径定义一个身份验证标准。

这与通常的示例非常相似(参见示例用法https://docs.spring.io/spring-security/site/docs/current/api/org/springframework/security/config/annotation/web/builders/HttpSecurity.html)。

api 端点的所有用户的“api-secret-key”是否相同?如果是这样,您可以创建一个共享的“用户”来满足这个要求(这是 spring 默认所做的),尽管这通常不安全。如果不是,那么验证“api-secret-key”的标准是什么?

您不需要多个过滤器链来检查这些条件(请参阅过滤器链文档https://docs.spring.io/spring-security/reference/servlet/architecture.html)。

【讨论】:

以上是关于如何在 Spring Boot 中设计两个单独的授权/身份验证配置?的主要内容,如果未能解决你的问题,请参考以下文章

通过环境变量在 Spring Boot 中设置日志记录级别

在 Spring Boot 微服务的 JWT 令牌生成中设置两个主题

如何在 Spring Boot 中设置过滤器链?

在 Spring 中设计积分系统

Spring 如何在 Spring Boot 中设置数据源

在spring boot微服务中设置JWT令牌生成中的两个主题