Spring Boot 2.0.0 + OAuth2

2024-02-01

Spring Boot 2 + Spring Security OAuth2 是否仍然支持@AuthorizationServer注解?通过阅读发行说明,有些内容尚未移植:

Oauth2 支持 https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.0.0-M5-Release-Notes#oauth-20-support

这是我的相关部分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"

现在,当我尝试将 client-id 和 client-secret 作为参数传递时,我的授权服务器 Oauth2 端点仅返回 401Basic Authentication to /oauth/token。传入用户名和密码会给出不同的代码路径。所以看起来 OAuth 过滤器并没有完全排列好。

我也发现了这个:Spring Boot 2 OAuth2 启动器更改 https://stackoverflow.com/questions/48641560/spring-boot-2-oauth2-starter-changes.

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

Thanks!


UPDATE

我想结束这个问题的循环。除了加密客户端机密之外。自 Spring OAuth 2.3.2 起,RedisTokenStore 问题也已得到解决:春季 OAuth 2.3.2 https://spring.io/blog/2018/04/12/spring-security-oauth-2-3-2-released


Spring Security 5 使用现代化的密码存储,请参阅OAuth2 自动配置 https://docs.spring.io/spring-security-oauth2-boot/docs/2.0.x/reference/html/boot-features-security-oauth2-authorization-server.html:

如果您使用自己的授权服务器配置通过实例配置有效客户端列表ClientDetailsServiceConfigurer如下所示,请注意,您在此处配置的密码受 Spring Security 5 附带的现代化密码存储的约束。

要解决您的问题,请参阅Spring安全参考 https://docs.spring.io/spring-security/site/docs/5.0.0.RELEASE/reference/htmlsingle/#troubleshooting:

故障排除

当存储的密码之一没有 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 迁移,您可以通过公开NoOpPasswordEncoder豆。例如,如果您使用 Java 配置,则可以创建如下所示的配置:

恢复到NoOpPasswordEncoder不被认为是安全的。您应该改为使用DelegatingPasswordEncoder支持安全密码编码。

@Bean
public static NoOpPasswordEncoder passwordEncoder() {
    return NoOpPasswordEncoder.getInstance();
}

如果您使用 XML 配置,您可以公开PasswordEncoder与身份证passwordEncoder:

<b:bean id="passwordEncoder"
   class="org.springframework.security.crypto.NoOpPasswordEncoder" factory-method="getInstance"/>

或者,您可以在所有密码前添加正确的 ID 并继续使用DelegatingPasswordEncoder。例如,如果您使用 BCrypt,您可以从以下位置迁移您的密码:

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

to

{bcrypt}$2a$10$dXJ3SW6G7P50lGmMkkmwe.20cQQubK3.HZWzG3YB1tlRy.fqvM/BG
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring Boot 2.0.0 + OAuth2 的相关文章

随机推荐

  • QGLWidget 在 Mac OS X Lion 下无法正常工作

    正如你所看到的 我不知道为什么它根本不起作用 When the program run it will look like this 我正在使用 macports 的 qt4 mac v4 8 2 看来该包是预编译的 这是来源 主要 cpp
  • 控制器中的 GGTS 重复方法名称/签名错误

    我正在使用基于 eclipse 4 3 1 64 位版本的最新 GGTS v3 4 在 Grails 2 3 2 上开发应用程序 我的类路径中的每个控制器都有一个错误 每个控制器类都有两个相同的错误 Groovy 类 package Som
  • django 模板中的逗号分隔列表

    If fruits是列表 apples oranges pears 有没有一种使用 django 模板标签快速生成 苹果 橙子和梨 的方法 I know it s not difficult to do this using a loop
  • 如何处理函数数组中的重复函数调用?

    我正在尝试按顺序执行以下函数 同步 异步 数组 避免callbackHell 实现函数runCallbacksInSequence 我需要实现自己的函数来了解回调的工作原理并避免使用 Async js 这是我到目前为止所拥有的 功能runC
  • 在 pandas 数据框替换功能中使用正则表达式匹配组

    我刚刚学习 python pandas 喜欢它的强大和简洁 在数据清理期间 我想使用正则表达式对数据框中的列进行替换 但我想重新插入匹配的部分 组 简单示例 姓氏 名字 gt 名字 姓氏 我尝试了类似以下的内容 实际情况更复杂 所以请原谅简
  • Hyperledger Fabric 了解 MSP

    我想清楚MSP的用途 所以我的问题是 当用户出于任何原因想要使用某个通道时 本地 MSP 会为其提供一个带有私钥的身份 在文档中说 MSP 有一个密钥库 并且在通道确认用户使用该通道 MSP 后 CA何时参与 None
  • 查询字符串是否有类似 hashchange 的事件?

    我一直在使用哈希值在页面之间传递数据 例如设置scrollTop 等 并且还使用了hashChange触发给定页面上的更改的事件 然而 哈希值具有我不一定感兴趣的默认行为 例如使页面跳转到给定的 有时是无关紧要的 位置 我觉得获取 设置查询
  • 游戏路径寻找

    所有类型的游戏中都使用哪些路径查找算法 无论如何 在角色移动的所有类型中 迪杰斯特拉 Dijkstra 曾经被使用过吗 我并不是真的想编写任何代码 只是做一些研究 不过如果你粘贴伪代码或其他东西 那就没问题了 我可以理解 Java 和 C
  • Spyder互动剧情:等待剧情关闭继续

    我使用 Spyder 在 Windows 上工作 使用 matplotlib 进行绘图 我的问题是我想要进行交互式绘图 或者有时绘制很多东西 并且我希望spyder等待我关闭图形以继续代码 与传统终端相同的方式 我试过 plt ion mp
  • Linux 中的堆栈内存管理

    我有几个与 Linux 堆栈大小限制相关的问题 我对 x86 64 系统最感兴趣 但如果存在平台差异 我也想了解它们 我的问题是 1 Linux如何动态增加堆栈的大小 我编写了一个带有递归函数 以使用堆栈空间 的测试程序 我可以在其中指定迭
  • 在 Django 中,如何覆盖“保存并继续”功能?

    我需要向 ModelAdmin 添加一些保存前和保存后逻辑 但仅当用户通过 保存并继续编辑 按钮而不是 保存 按钮提交表单时 我怎样才能做到这一点 就像重写普通的保存方法一样 您需要重写save model ModelAdmin 中的函数
  • 将所有相对 URL 替换为绝对 URL

    我看过一些答案 比如this one https stackoverflow com questions 31347340 convert all relative urls to absolute urls while maintaini
  • 将 textGrob 转换为 imageGrob/rasterGrob?

    如果这非常简单 我深表歉意 其实我希望会是这样 我正在尝试从文本动态创建图像 然后可以调整图像的大小并绘制 拉伸或挤压 以生成主题类型的图表 我开始使用图像 我使用生成的png and ggplot 并将它们绘制为annotation cu
  • 追加内的 for 循环不起作用

    下面是我的代码 table table cellspacing 0 cellpadding 0 border 0 width 100 append append function options ONE TWO THREE FOUR eac
  • SSIS:如何在数据流任务中运行存储过程

    我有一个执行此操作的数据流任务 从 OLE DB 源中 运行 SQL 命令来选择一些数据 查找不同的 SQL DB 源 检查数据是否已存在 根据查找匹配输出与查找不匹配输出 使用不同的输入参数运行存储过程 输入参数将基于 2 中的 可用查找
  • 在Mac OS X系统上快速创建大文件?

    为了创建 10 GB 临时文件 在 Linux 中你可以这样做 fallocate l 10G temp 10GB file 在 Windows 中 您可以执行以下操作 fsutil file createnew temp 10GB fil
  • Prolog 检查列表中的第一个元素是否不相等且列表中的第二个元素是否相等

    我想比较两个列表 第一个元素不应该相等 第二个元素应该相等 示例数据库 likes josh muse likes sam muse likes josh gnr likes sam radiohead 所以它应该为 same josh m
  • 当应用程序在后台时广播接收器

    我正在尝试编写一个应用程序 其中我根据使用 gcm 推送通知发送的消息对 UI 进行更改 并且我设法通过使用 BroadcastReceiver onReceive 函数来实现它 但它仅在应用程序位于前台时才有效 但如果它在后台或关闭 没有
  • decltype(void()) 中的 void() 是表达式还是函数类型?

    这是后续的this https stackoverflow com questions 39278200 is sizeofvoid a legal expression问题 更准确地说是评论this https stackoverflow
  • Spring Boot 2.0.0 + OAuth2

    Spring Boot 2 Spring Security OAuth2 是否仍然支持 AuthorizationServer注解 通过阅读发行说明 有些内容尚未移植 Oauth2 支持 https github com spring pr