我有2个应用程序:
用户将能够登录应用程序1并访问其资源。我想实现以下流程:
用户以登录形式输入其凭据->应用程序1将使用用户凭据及其clientId密码授予类型从应用程序2获取令牌->使用令牌访问应用程序1的资源。
clientId
问题是Spring Security 5是否支持客户端的密码授予类型?我在Spring Security 5实现中找到了所有的剩余授权类型,但没有找到密码。
Spring Security 5.1.x不支持它,请参阅Spring Security Reference:
6.6 OAuth 2.0客户端 OAuth 2.0客户端功能提供了对OAuth 2.0授权框架中定义的客户端角色的支持。 提供以下主要功能: 授权码授予 客户证书授予 WebClient Servlet环境的扩展(用于发出受保护的资源请求) HttpSecurity.oauth2Client() 提供了许多用于自定义OAuth 2.0客户端的配置选项。
6.6 OAuth 2.0客户端
OAuth 2.0客户端功能提供了对OAuth 2.0授权框架中定义的客户端角色的支持。
提供以下主要功能:
WebClient
HttpSecurity.oauth2Client() 提供了许多用于自定义OAuth 2.0客户端的配置选项。
HttpSecurity.oauth2Client()
但是,您可以使用Spring Security OAuth2,请参阅《OAuth 2开发人员指南》:
访问受保护的资源 通常,Web应用程序不应使用密码授予,因此,ResourceOwnerPasswordResourceDetails如果可以支持,请避免使用AuthorizationCodeResourceDetails。如果您迫切需要密码授予才能从Java客户端工作,请使用相同的机制配置您OAuth2RestTemplate的凭证并将凭证添加到AccessTokenRequest(这是一个Map并短暂使用),而不是ResourceOwnerPasswordResourceDetails(在所有访问令牌之间共享)。
访问受保护的资源
通常,Web应用程序不应使用密码授予,因此,ResourceOwnerPasswordResourceDetails如果可以支持,请避免使用AuthorizationCodeResourceDetails。如果您迫切需要密码授予才能从Java客户端工作,请使用相同的机制配置您OAuth2RestTemplate的凭证并将凭证添加到AccessTokenRequest(这是一个Map并短暂使用),而不是ResourceOwnerPasswordResourceDetails(在所有访问令牌之间共享)。
ResourceOwnerPasswordResourceDetails
AuthorizationCodeResourceDetails
OAuth2RestTemplate
或者您可以更新到Spring Security 5.2.x,请参阅Spring Security Reference:
11.2 OAuth 2.0客户端 OAuth 2.0客户端功能提供了对OAuth 2.0授权框架中定义的客户端角色的支持。 在较高级别,可用的核心功能包括: 授权赠款支持 授权码 刷新令牌 客户凭证 资源所有者密码凭证
11.2 OAuth 2.0客户端
在较高级别,可用的核心功能包括:
授权赠款支持