Spring Security 5 OAuth2客户端密码授予类型

2024-01-05

我有2个应用程序:

  1. Spring应用程序1是客户端和资源服务器。
  2. Spring应用程序2是授权服务器。

用户将能够登录应用程序 1 并访问其资源。 我想实现以下流程:

用户在登录表单中输入他的凭据 -> 应用程序 1 将使用用户凭据及其密码从应用程序 2 获取令牌clientId使用密码授予类型 -> 使用令牌访问应用程序 1 的资源。

问题是Spring Security 5是否支持客户端的密码授予类型?我在 Spring Security 5 实现中找到了所有其余授权类型,但没有找到密码。


Spring Security 5.1.x 不支持,请参阅Spring安全参考 https://docs.spring.io/spring-security/site/docs/5.1.2.RELEASE/reference/htmlsingle/#oauth2client:

6.6 OAuth 2.0 客户端

OAuth 2.0 客户端功能为 OAuth 2.0 授权框架中定义的客户端角色提供支持。

提供以下主要功能:

  • 授权码授予
  • 客户凭证授予
  • WebClientServlet 环境的扩展(用于发出受保护的资源请求)

HttpSecurity.oauth2Client()提供了许多用于自定义 OAuth 2.0 客户端的配置选项。

但是,您可以使用 Spring Security OAuth2,请参阅OAuth 2 开发人员指南 https://projects.spring.io/spring-security-oauth/docs/oauth2.html:

访问受保护的资源

作为一般规则,Web 应用程序不应使用密码授予,因此避免使用ResourceOwnerPasswordResourceDetails如果你可以赞成AuthorizationCodeResourceDetails。如果您迫切需要密码授予才能从 Java 客户端工作,请使用相同的机制来配置您的OAuth2RestTemplate并将凭据添加到 AccessTokenRequest (这是一个 Map 并且是临时的)而不是ResourceOwnerPasswordResourceDetails(在所有访问令牌之间共享)。

或者您可以更新到 Spring Security 5.2.x,请参阅Spring安全参考 https://docs.spring.io/spring-security/site/docs/5.2.0.RELEASE/reference/htmlsingle/#oauth2client:

11.2 OAuth 2.0 客户端

OAuth 2.0 客户端功能为 OAuth 2.0 授权框架中定义的客户端角色提供支持。

从高层次来看,可用的核心功能包括:

授权资助支持

  • 授权码
  • 刷新令牌
  • 客户凭证
  • 资源所有者密码凭证
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring Security 5 OAuth2客户端密码授予类型 的相关文章

随机推荐

  • 如何查看 MultipartForm 请求的内容?

    我正在使用 Apache HTTPClient 4 我正在做非常正常的多部分工作 如下所示 val entity new MultipartEntity HttpMultipartMode BROWSER COMPATIBLE entity
  • 如何仅在会话级别启用休眠查询缓存?

    如果我有一个查询在单个线程中被多次调用 并且我只想为该线程 或为该会话缓存该查询 及其结果 因为我每个线程使用一个会话 该怎么办 我这样做 注意 我的二级缓存已打开 但主要用于 session get 但我不想将它用于我的查询缓存 因为我只
  • 指定asp.net core静态文件夹的默认文件名

    目前 我在一个文件夹中生成了一个生成的 index html js 和其他静态文件 并且我将该文件夹标记为静态文件夹 通过在 Startup cs 的配置方法中添加以下内容 app UseDefaultFiles app UseStatic
  • 批量文件上传整个文件夹到FTP

    我正在尝试将整个文件夹上传到 ftp 但它只上传一个文件 可能是什么问题 Open Run窗口 cmd ftp s C ftpfile bat 这是我的批处理代码代码 open FTP address USERNAME PASSWORD b
  • 如何重新加载 UIViewController

    我想重新加载选项卡控制器 UIViewController 中包含的所有视图 搜索后我发现我必须应用 setNeedsDisplay 方法 但我无法找到应该在哪里应用它 也欢迎任何其他替代方案 BOOL application UIAppl
  • 脚本全名和路径 $0 调用时不可见

    我有一个脚本 task sh 其内容如下 bin bash CUR DIR pwd SCRIPTPATH CUR DIR dirname 0 当我用 bash task sh 调用它时 它按预期工作 但是当用 task sh 调用它时 lo
  • Powershell 和 UTF-8

    我有一个 html 文件测试 html用atom创建 其中包含 Test 编码 utf 8 当我使用 Powershell 控制台阅读它时 我使用的是法语 Windows Get Content Raw test html 我得到这个 Te
  • Java中的内存流

    我正在寻找 Java 中的内存流实现 实施情况 应该大致模仿 NET内存流 http msdn microsoft com en us library system io memorystream aspx执行 基本上我想上课MemoryS
  • 通过代码配置Ipython后端使用retina显示模式

    我使用代码来配置 Jupyter 笔记本 因为我有一个包含大量笔记本的存储库 并且希望保持所有笔记本的样式一致性 而不必在每个笔记本的开头编写冗长的设置 这样 我所做的就是拥有一种配置 CSS 的方法 一种用于设置 Matplotlib 另
  • 如何使用 API 在 YouTube 社区选项卡上上传帖子?

    我搜索了一些相关内容 但找不到 如何使用 YouTube API 在 YouTube 社区选项卡上上传帖子 v3 不可以吗 遗憾的是 我在 Google 论坛中找到了更多有关此问题的信息 他们说不要发布开发人员类型的问题 我也在这里寻找有关
  • 覆盖 React Framer Motion 中的转换延迟

    我创建motion div组件 其中包含initial animate and whileTap特性
  • map.setMyLocationEnabled(true);不管用

    我刚刚开始开发一个 android 项目并正在使用 Google Map API 我可以在我的应用程序上获取地图 但是当我尝试使用以下命令启用当前位置时map setMyLocationEnabled true 应用程序说不幸的是应用程序已
  • DELETE FROM ... 报告“.”处或附近的语法错误

    我试图从数据库中仅删除一项数据 但是 当我编写命令时 我不断收到一些语法错误 您能告诉我错误在哪里吗 这是我尝试过的命令 DELETE FROM database userprofile WHERE user username some E
  • 我正在尝试编写一个返回多个值的宏

    这条线上出现错误 Finalrow Cells Row Count 1 End X1UP Row Error is 对象所需的运行时错误 424 下面是代码 Sub MyVlookup Dim r As Long C As Long Col
  • 在MATLAB MEX库中使用boost,与MATLAB的版本不同

    我们正在创建许多使用我们的通信库的 MATLAB MEX 文件 这个通信库大量使用了Boost 现在 MATLAB 也在内部使用 boost 这意味着在标准设置中 我们不能使用与 MATLAB 附带的版本不同的 boost 版本 否则就会发
  • Excel中如何将长表格转换为宽表格?

    一张图片胜过千言万语 假设在一张纸中我有下表 使用这些信息 我想以编程方式在另一张纸中生成这样的表格 有点将长表格分解为宽表格 你怎样才能做到这一点 使用VBA Range G1 K99 Clear For Each xx In Range
  • MapActivity 中的 SherlockActionBar

    我在整个应用程序中广泛使用 Sherlock Action Bar 但我有一个继承自 MapActivity 的活动 因此我无法使其继承自 SherlockActivity 有什么方法可以利用地图中的 Sherlock 操作栏来自定义它吗
  • 在 SQL Server 中将标识列重置为零?

    如何在 SQL Server 中将表的 Identity 列重置为零 Edit 我们如何使用 LINQ to SQL 来做到这一点 DBCC CHECKIDENT MyTable RESEED NewValue 您还可以执行截断表 但是 当
  • += 事件运算符

    public void Bar Foo foo new Foo foo MyEvent foo MyEvent foo FireEvent void foo MyEvent object sender EventArgs e Foo sen
  • Spring Security 5 OAuth2客户端密码授予类型

    我有2个应用程序 Spring应用程序1是客户端和资源服务器 Spring应用程序2是授权服务器 用户将能够登录应用程序 1 并访问其资源 我想实现以下流程 用户在登录表单中输入他的凭据 gt 应用程序 1 将使用用户凭据及其密码从应用程序