spring-security-oauth2实现OAuth2.0服务

本文介绍了如何使用spring-security-oauth2框架实现OAuth2.0授权服务,讨论了授权服务和资源服务的概念,以及它们在不同应用场景下的部署方式。重点阐述了spring-security的endpoints在授权服务中的角色,以及资源服务中的OAuth2AuthenticationProcessingFilter在Token校验中的作用。详细配置示例可参考github上的spring-security-oauth demo。

关于OAuth的介绍查看我的另一篇文章OAuth的4种授权方式,spring-security-oauth2是实现OAuth2.0的框架,配置稍微有些繁琐,因此本文记录下大概的思路,加深印象。

OAuth 2.0中主要有Authorization Service授权服务和Resource Service资源服务,他们可以在同一个应用程序中,也可以在两个应用程序中,甚至多个资源服务共享一个授权服务。

spring-security提供了相应的endpoints来管理token的请求,/oauth/authorize端点负责授权服务,/oauth/token端点负责token的请求服务;资源服务中的过滤器OAuth2AuthenticationProcessingFilter 负责校验Token。

下面从总体上介绍授权服务和资源服务的主要配置,详细的配置在githubspring-security-oauth demo上。

授权服务配置


@Configuration
@EnableAuthorizationServer
public class AuthorizationServerConfig extends AuthorizationServerConfigurerAdapter {
   
   
    private static final String DEMO_RESOURCE_ID = "openapi";

    @Autowired
    private OrderAuthProperties orderAuthProperties;

    /**
     * 注意这里AuthenticationManager和UserAccountService
     * 是在SecurityConfiguration配置的,把俩个配置类关联了起来
     */
    @Autowired
    AuthenticationManager authenticationManager;
    @Autowired
    private UserAccountService userAccountService;

    @Autowired
    private AuthorizationCodeServices authorizationCodeServices;

    @Autowired
    RedisConnectionFactory redisConnectionFactory;

    @Autowired
    private OAuthClientDetailsService oAuthClientDetailsService;

    @Autowired
    private DataSource dataSource
`spring-security-oauth2` 和 `spring-security-oauth2-client` 是 Spring 框架中用于处理 OAuth 2.0 相关功能的不同模块,二者存在多方面的区别: ### 功能定位 - **`spring-security-oauth2`**:这是早期 Spring 提供的 OAuth 2.0 支持模块,它涵盖了 OAuth 2.0 服务端和客户端的完整实现,既可以用来构建 OAuth 2.0 认证服务器和资源服务器,也能实现客户端功能。不过该模块从 Spring Boot 2.0 开始不再进行主动维护。 - **`spring-security-oauth2-client`**:是 Spring SecurityOAuth 2.0 客户端提供的专门支持,专注于实现 OAuth 2.0 客户端功能,用于让应用程序能够作为客户端与外部的 OAuth 2.0 授权服务器进行交互,获取访问令牌等操作。 ### 依赖范围 - **`spring-security-oauth2`**:依赖范围较广,包含了构建整个 OAuth 2.0 生态系统的组件,如认证服务器所需的授权端点、令牌端点等的实现,以及资源服务器对令牌的验证等功能。 - **`spring-security-oauth2-client`**:依赖相对单一,主要关注客户端与授权服务器之间的交互流程,例如授权码模式、隐式模式、客户端凭证模式和密码模式(在 OAuth 2.1 中部分模式有调整)下的授权请求、令牌获取等操作。 ### 使用场景 - **`spring-security-oauth2`**:适用于需要自行搭建 OAuth 2.0 认证服务器和资源服务器的场景,例如企业内部需要构建一套完整的 OAuth 2.0 认证体系,对用户进行身份验证和授权管理。 - **`spring-security-oauth2-client`**:适用于应用程序需要作为客户端去访问其他第三方 OAuth 2.0 授权服务器的场景,比如一个 Web 应用需要集成 Google、GitHub 等第三方登录功能。 ### 配置方式 - **`spring-security-oauth2`**:配置相对复杂,需要手动配置大量的 Bean 和属性,例如配置授权服务器的令牌存储方式、客户端信息等。 ```java @Configuration @EnableAuthorizationServer public class AuthorizationServerConfig extends AuthorizationServerConfigurerAdapter { @Override public void configure(ClientDetailsServiceConfigurer clients) throws Exception { clients.inMemory() .withClient("client") .secret("{noop}secret") .authorizedGrantTypes("authorization_code", "refresh_token") .scopes("read", "write") .redirectUris("http://example.com"); } } ``` - **`spring-security-oauth2-client`**:配置较为简单,借助 Spring Boot 的自动配置特性,只需在配置文件中提供必要的客户端信息,如客户端 ID、客户端密钥、授权服务器的端点地址等,就能快速完成客户端的配置。 ```yaml spring: security: oauth2: client: registration: google: client-id: your-client-id client-secret: your-client-secret scope: openid, profile, email provider: google: authorization-uri: https://accounts.google.com/o/oauth2/v2/auth token-uri: https://www.googleapis.com/oauth2/v4/token ``` ### 版本维护 - **`spring-security-oauth2`**:已停止主动维护,官方推荐使用 Spring Security 5.x 及以上版本中提供的 OAuth 2.0 支持来替代。 - **`spring-security-oauth2-client`**:是 Spring Security 持续维护和更新的模块,与 Spring 的最新版本保持同步,能够及时支持 OAuth 2.0 的新特性和规范。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值