当前位置: 首页 > 知识库问答 >
问题:

Spring Boot 2.0.0+OAuth2

马弘益
2023-03-14

Spring Boot2+Sping Security OAuth2是否仍然支持@AuthorizationServer注释?从阅读发布说明来看,有些东西还没有移植过来:

Oauth2支持

以下是我的build.grade的相关部分:

身份验证服务器

// security
compile "org.springframework.boot:spring-boot-starter-security:${springBootVersion}"
// oauth
// https://mvnrepository.com/artifact/org.springframework.security.oauth/spring-security-oauth2
compile "org.springframework.security.oauth:spring-security-oauth2:2.2.1.RELEASE"
// support for Oauth2 user token services not yet migrated into Spring Boot 2.0
compile "org.springframework.security.oauth.boot:spring-security-oauth2-autoconfigure:2.0.1.BUILD-SNAPSHOT"

是否有配置更新,或者是否需要一组不同的gradle依赖项来将授权服务器恢复到以前的状态?

谢谢!

更新

共有1个答案

冷浩瀚
2023-03-14

Spring Security 5使用了现代化的密码存储,请参阅OAuth2 AutoConfig:

如果您使用自己的授权服务器配置通过ClientDetailsServiceConfiguer实例配置有效客户端列表(如下所示),请注意,您在这里配置的密码受Spring Security5附带的现代化密码存储的限制。

要解决您的问题,请参阅Spring Security参考:

故障排除

如“密码存储格式”一节所述,当存储的密码之一没有id时,会发生以下错误。

java.lang.IllegalArgumentException: There is no PasswordEncoder mapped for the id "null"
     at org.springframework.security.crypto.password.DelegatingPasswordEncoder$UnmappedIdPasswordEncoder.matches(DelegatingPasswordEncoder.java:233)
     at org.springframework.security.crypto.password.DelegatingPasswordEncoder.matches(DelegatingPasswordEncoder.java:196)

解决该错误的最简单方法是切换到显式提供用于编码密码的passwordencoder。解决此问题的最简单方法是找出密码当前的存储方式,并显式提供正确的passwordencoder。如果您是从Spring Security 4.2.x进行迁移,则可以通过公开NoopPasswordEncoderbean来恢复到以前的行为。例如,如果您使用的是Java配置,那么您可以创建一个如下所示的配置:

@Bean
public static NoOpPasswordEncoder passwordEncoder() {
    return NoOpPasswordEncoder.getInstance();
}
xml prettyprint-override"><b:bean id="passwordEncoder"
   class="org.springframework.security.crypto.NoOpPasswordEncoder" factory-method="getInstance"/>

或者,您可以用正确的id为所有密码加上前缀,然后继续使用delegatingpasswordencoder。例如,如果您正在使用BCrypt,您将从以下内容迁移密码:

$2a$10$dXJ3SW6G7P50lGmMkkmwe.20cQQubK3.HZWzG3YB1tlRy.fqvM/BG

{bcrypt}$2a$10$dXJ3SW6G7P50lGmMkkmwe.20cQQubK3.HZWzG3YB1tlRy.fqvM/BG
 类似资料:
  • 问题内容: 如果我想为一个客户端保护REST服务器,春季安全OAuth2的最低设置是什么?我不想使用任何不必要的设置或实现任何不必要的bean。也许对于spring- security + OAuth2已经有一个“简单”的教程/示例了?(尽管我试图避免对此抱太大希望) 我当前的工作设置(从sparklr上下文中使用copy + past + wtf)感觉太过: 我已经实现了authenticati

  • 问题内容: 我遇到一种情况,我想自己创建一个访问令牌(因此不能通过通常的过程)。我想出了这样的东西: 唯一的问题是我不确定如何创建OAuth2Authentication(在我的代码中带有xxx的部分)。我有用户和客户信息,我知道我想授予该令牌的单位。 问题答案: 在这里,根据使用的流程,您的用例可能会略有不同。这适用于密码授予流程。有一些自定义类,如令牌存储,令牌增强器等。但这实际上只是为满足我

  • 问题内容: 如何以编程方式向Google进行身份验证?现在不推荐使用ClientLogin(https://developers.google.com/accounts/docs/AuthForInstalledApps),我们如何使用OAuth2对Google执行编程身份验证? 使用ClientLogin,我们可以 使用电子邮件和密码参数在https://www.google.com/accou

  • 问题内容: 我有有一个应用程序上的 添加应用程序后,会将我重定向到授权服务器,并在登录到该授权服务器后允许访问。我也想提供API访问权限,所以我希望应用程序能够通过Authorization- Header传递一个访问令牌来访问我的资源。 我通过与注意一起使用的身份验证筛选器进行了调试,未选中Authorization-Header值。 之后,我尝试创建自定义过滤器并将此过滤器添加到安全配置中 但

  • 问题内容: 我正在尝试使用JWT实施spring AuthorizationServer。我能够生成JWT令牌并登录,直到将BCrypt添加到混合中为止。现在,当我尝试登录时,我从API获得“错误的凭据”。 OAuth2Configuration.java WebSecurityConfig.java SeedData.java 谢谢你的帮助。 问题答案: 我需要进行以下更改才能使其正常工作。如果

  • 问题内容: 我从Spring OAuth2开始。我想将用户名和密码以application / json格式发送到POST正文中的/ oauth / token端点。 那可能吗? 你能给我个建议吗? 问题答案: 解决方案(不确定是否正确,但表明它正在工作): 资源服务器配置: 过滤: 请求包装器: 授权服务器配置(对/ oauth / token端点禁用基本身份验证:

  • 问题内容: 我正在尝试了解和实现新的REST服务器与现有的客户端应用程序之间的客户端凭证流。我已经像这样设置了spring-security OAuth2 。从到目前为止的理解来看,我的服务器现在应该支持以下请求: 但我明白了 由引起的是这里(弹簧安全码): 看来,我需要首先 针对服务器 进行 身份验证 。但这 不是我想做的 。我希望我的两个服务器使用共享密钥相互通信。OAuth提供者服务器应应请

  • 问题内容: 在使用Play Framework调用OAuth2 :: retrieveAccessToken()之后,我正在执行简单的重定向。我将有趣的字符附加到了我从未放过的URL上,因此最终结果如下所示: http://本地主机:9000 /#_ = _ #_ = _来自哪里?这是路由文件中的路由定义: GET / Application.index 这是处理Facebook身份验证的控制器的