我有2个应用程序:
- Spring应用程序1是客户端和资源服务器。
- 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 授权框架中定义的客户端角色提供支持。
提供以下主要功能:
- 授权码授予
- 客户凭证授予
-
WebClient
Servlet 环境的扩展(用于发出受保护的资源请求)
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(使用前将#替换为@)