spring - Spring Security 5 OAuth2 客户端密码授予类型
问题描述
我有 2 个应用程序:
- Spring Application 1 是客户端和资源服务器。
- Spring Application 2 是授权服务器。
用户将能够登录应用程序 1 并访问其资源。我想实现以下流程:
用户在登录表单中输入他的凭据 -> 应用程序 1 将使用用户凭据及其clientId
密码授权类型从应用程序 2 获取令牌 -> 使用令牌访问应用程序 1 的资源。
问题是 Spring Security 5 是否支持客户端的密码授予类型?我在 Spring Security 5 实现中找到了所有休息授权类型,但没有找到密码。
解决方案
Spring Security 5.1.x 不支持它,请参阅Spring Security 参考:
6.6 OAuth 2.0 客户端
OAuth 2.0 客户端功能为 OAuth 2.0 授权框架中定义的客户端角色提供支持。
提供以下主要功能:
- 授权码授予
- 客户凭证授予
WebClient
Servlet 环境的扩展(用于发出受保护的资源请求)
HttpSecurity.oauth2Client()
提供了许多用于自定义 OAuth 2.0 客户端的配置选项。
但是,您可以使用 Spring Security OAuth2,请参阅OAuth 2 开发人员指南:
访问受保护的资源
作为一般规则,Web 应用程序不应该使用密码授权,因此
ResourceOwnerPasswordResourceDetails
如果可以,请避免使用AuthorizationCodeResourceDetails
. 如果您非常需要密码授权才能从 Java 客户端工作,那么使用相同的机制来配置您OAuth2RestTemplate
的凭据并将凭据添加到 AccessTokenRequest(它是一个 Map 并且是短暂的)而不是ResourceOwnerPasswordResourceDetails
(在所有访问令牌之间共享)。
或者您可以更新到 Spring Security 5.2.x,请参阅Spring Security Reference:
11.2 OAuth 2.0 客户端
OAuth 2.0 客户端功能为 OAuth 2.0 授权框架中定义的客户端角色提供支持。
概括地说,可用的核心功能包括:
授权补助支持
- 授权码
- 刷新令牌
- 客户凭证
- 资源所有者密码凭证
推荐阅读
- wpf - 使用 VS 在 XAML 中无法识别控制模板
- tensorflow - 感知损失函数没有给出任何梯度张量流
- php - 通过 PHP 的 IOS 13 标头
- angular - 以角度绑定数据。声明模型,其中包含另一个模型的列表
- javascript - 为什么 filereader.onload 没有第一次执行?
- deep-learning - Pytorch:网络根本不学习+权重太低
- node.js - 我可以从获取请求中绘制 D3 图吗?
- javascript - 如何突出显示字符串中每个句子的第一个单词?
- c# - 为什么 TryPopRange 可能会出现异常?并发栈
- javascript - Socket.io:事件侦听器中的 Socket.emit 工作非常奇怪