在不使用 Spring Security OAuth 的情况下实现 oauth2 授权服务器

Posted

技术标签:

【中文标题】在不使用 Spring Security OAuth 的情况下实现 oauth2 授权服务器【英文标题】:Implement oauth2 authorization server without using Spring Security OAuth 【发布时间】:2020-11-03 16:24:31 【问题描述】:

我的要求是使用 spring boot 实现 oauth 2。

这是为了将动态客户端注册(客户端ID,客户端密码......)存储在数据库中,而不是存储在内存中。

我看到的第一个选项是使用 spring-security-oauth2。但根据文档 https://spring.io/projects/spring-security-oauth. 它说 Spring Security OAuth 已被弃用,最新的 OAuth 2.0 支持由 Spring Security 提供。

不推荐使用 Spring Security OAuth 我不会将它用于我当前的实现。

现在我现在的选择是从 Spring Security 中使用它。 Bu 根据文档https://github.com/spring-projects/spring-security/wiki/OAuth-2.0-Migration-Guide,它说 Spring Security 不提供授权服务器支持。

现在我很困惑,要么使用已弃用的 Spring Security OAuth,要么等待 Spring Security 提供授权服务器支持。我想听听专家的建议。有没有没有 Spring Security OAuth 的教程来实现它?

【问题讨论】:

【参考方案1】:

有一个新项目创建一个Spring Security新的授权服务器:https://github.com/spring-projects-experimental/spring-authorization-server 但是距离完成还有很长的路要走。

我收集到,因为您只打算使用“客户端凭据”授权,您可以使用已弃用的授权服务器,我将它用于小型内部应用程序,适用于简单的用例,而且它非常可定制。 例如项目:https://github.com/wlesniak/effective-oauth2-with-spring-security-and-spring-boot/tree/master/module_4

您的另一个选择,特别是如果您想使用 OpenID 连接和最新的 Oauth 功能,将是一个 3rd 方身份验证服务器,例如:keycloak 它是开源的,由 Red Hat 开发,是所有花里胡哨的优秀产品,并且具有良好的弹簧支撑,易于配置。

【讨论】:

以上是关于在不使用 Spring Security OAuth 的情况下实现 oauth2 授权服务器的主要内容,如果未能解决你的问题,请参考以下文章

如何在不重启 Spring Boot 的情况下使用 Spring Security 添加新用户

您可以在不使其无状态的情况下将 Spring Security 与 REST 服务一起使用吗?

为啥用户在不调用 save() 的情况下使用 Spring Security 和 Grails 进行更新?

在没有 servlet api 的 webflux 项目中使用 OAuth2 和 Spring Security OAuth2 和 reactor netty

在不使用 Spring Security OAuth 的情况下实现 oauth2 授权服务器

如何在不使用 @EnableWebMvcSecurity 的情况下在 spring security / thymeleaf 中自动生成 csrf 令牌