如何在 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 中设计两个单独的授权/身份验证配置?的主要内容,如果未能解决你的问题,请参考以下文章