当前位置: 首页 > article >正文

Spring Security OAuth2 自定义(增强)token信息

前言

Spring Security OAuth2提供了默认的token生成方式,但是有时候我们需要token携带一些我们自定义的信息,例如用户名、id等,这就需要我们自定义token信息

自定义token主要流程

1、自定义TokenEnhancer

2、将自定义的TokenEnhancer加入到TokenEnhancerChain中

3、将TokenEnhancerChain设置到AuthorizationServerEndpointsConfigurer 端点配置中,endpoints.tokenEnhancer(tokenEnhancerChain)

自定义TokenEnhancer

TokenEnhancer 是 Spring Security OAuth2 中的一个接口,用于在 OAuth2 的令牌(Token)生成或解析过程中进行增强操作。

具体来说,TokenEnhancer 可以在 OAuth2 的令牌中添加额外的信息,例如用户信息、权限信息等。这个过程通常是在令牌的生成阶段进行的,但是也可以在令牌的解析阶段进行。

TokenEnhancer 的实现类需要实现 enhance 方法,该方法接受一个 OAuth2AccessToken 对象和一个 TokenEnhancerChain 对象,并返回一个增强后的 OAuth2AccessToken 对象。在这个过程中,可以实现各种增强操作,例如添加额外的信息、加密、签名等。

示例:

/**
 * 自定义token信息
 */
public class CustomTokenEnhancer implements TokenEnhancer {


    @Override
    public OAuth2AccessToken enhance(OAuth2AccessToken accessToken, OAuth2Authentication authentication) {
        Object principal = authentication.getUserAuthentication().getPrincipal();
        //使用map来添加信息
        Map<String, Object> additionalInfo = new HashMap<>();
        if (principal instanceof PhoneUserDetails){
            PhoneUserDetails userDetails = (PhoneUserDetails) principal;
            additionalInfo.put("userId",userDetails.getUserId());
            additionalInfo.put("userName",userDetails.getUsername());
        }
        //将新增信息map设置进token
        ((DefaultOAuth2AccessToken) accessToken).setAdditionalInformation(additionalInfo);
        return accessToken;
    }


}

配置类配置

AuthorizationServerConfigurerAdapter配置类配置

    @Override
    public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {

        // TokenEnhancerChain为token增强链,可以添加多个token增强器
        TokenEnhancerChain tokenEnhancerChain = new TokenEnhancerChain();
        List<TokenEnhancer> delegates = new ArrayList<>();
        delegates.add(tokenEnhancer());
        tokenEnhancerChain.setTokenEnhancers(delegates);
        endpoints.tokenEnhancer(tokenEnhancerChain);
    }

    @Bean
    public TokenEnhancer tokenEnhancer() {
        return new CustomTokenEnhancer();
    }
}

http://www.kler.cn/a/158142.html

相关文章:

  • AR技术详解
  • 为XiunoBBS4.0开启redis缓存且支持密码验证
  • 生产实践:基于K8S的私有化部署解决方案
  • “谢湖大樱桃”区域公用品牌形象正式发布
  • leetcode算法之栈
  • YOLOv3 快速上手:Windows 10上的训练环境搭建
  • RHCSA学习笔记(RHEL8) - Part1.RH124
  • 12、SQL注入——SQL报错注入
  • IDEA中,Archetype的作用
  • 【开源】基于JAVA的厦门旅游电子商务预订系统
  • 23史上最全版---SQL注入详解
  • Vue3中props传参(多种数据类型传参方式)
  • 使用python+poco+夜神模拟器进行自动化测试实例
  • 全球葡萄酒行业对社会的积极和消极影响
  • 【Git】Git撤销操作
  • oracle 19c rac 安装手册
  • Golang线程池与协程池
  • 全国网络与信息安全管理员职工职业技能竞赛线下培训—简单的流量分析
  • 欢迎回到 C++ - 现代 C++(心得-壹)
  • Atcoder Beginner Contest 331 A~F