Spring Security Oauth2 令牌增加额外信息

在实现了 Oauth2 后,我想要在令牌增加中额外信息,那么该怎么做?

下面是我的做法,首先实现 org.springframework.security.oauth2.provider.token.TokenEnhancer 接口:

package com.fengxuechao.examples.auth.config;import org.springframework.security.oauth2.common.DefaultOAuth2AccessToken;
import org.springframework.security.oauth2.common.OAuth2AccessToken;
import org.springframework.security.oauth2.provider.OAuth2Authentication;
import org.springframework.security.oauth2.provider.token.TokenEnhancer;import java.util.HashMap;
import java.util.Map;import static org.apache.commons.lang3.RandomStringUtils.randomAlphabetic;/*** token 额外信息** @author fengxuechao* @version 0.1* @date 2019/5/16*/
public class CustomTokenEnhancer implements TokenEnhancer {@Overridepublic OAuth2AccessToken enhance(OAuth2AccessToken accessToken, OAuth2Authentication authentication) {Map<String, Object> additionalInfo = new HashMap<String, Object>();additionalInfo.put("organization", authentication.getName() + randomAlphabetic(4));((DefaultOAuth2AccessToken) accessToken).setAdditionalInformation(additionalInfo);return accessToken;}
}

然后在 AuthorizationServerConfigurerAdapter 认证服务代码中配置:

public class AuthorizationServerConfigInJwt extends AuthorizationServerConfigurerAdapter {@Overridepublic void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {// token 携带额外信息TokenEnhancerChain tokenEnhancerChain = new TokenEnhancerChain();tokenEnhancerChain.setTokenEnhancers(Arrays.asList(tokenEnhancer(), jwtTokenEnhancer()));endpoints.tokenStore(tokenStore()).tokenEnhancer(tokenEnhancerChain).userDetailsService(userDetailsService).authenticationManager(authenticationManager).setClientDetailsService(clientDetailsService);}/*** Token 额外信息** @return*/@Beanpublic TokenEnhancer tokenEnhancer() {return new CustomTokenEnhancer();}/*** jwt token:使用了非对称密钥对来签署令牌:* 1.生成 JKS Java KeyStore 文件:keytool -genkeypair -alias jwt_rsa -keyalg RSA -keypass 123456 -keystore jwt_rsa.jks -storepass 123456* 2.导出公钥:keytool -list -rfc --keystore jwt_rsa.jks | openssl x509 -inform pem -pubkey* 3.将 PUBLIC KEY 保存至 public.txt** @return*/@Beanpublic JwtAccessTokenConverter jwtTokenEnhancer() {JwtAccessTokenConverter converter = new JwtAccessTokenConverter();converter.setKeyPair(new KeyStoreKeyFactory(resource, keyStorePass.toCharArray()).getKeyPair(keyPairAlias));// 使用对称密钥来签署令牌// converter.setSigningKey("fengxuechao.littlefxc");return converter;}
}

或者 tokenServices.setTokenEnhancer(tokenEnhancer);

最后演示一下最终效果:

{"access_token": "4aae3856-bc33-4e4d-86bc-eb475fc45569","token_type": "bearer","refresh_token": "fe2ed35d-5c53-4610-abb7-c1053cba6803","expires_in": 119,"scope": "read","organization": "userAKqz"
}

jwt

{"access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX25hbWUiOiJ1c2VyIiwic2NvcGUiOlsicmVhZCJdLCJvcmdhbml6YXRpb24iOiJ1c2VyZWx2ayIsImV4cCI6MTU2MDQ4NDI0OCwiYXV0aG9yaXRpZXMiOlsiUk9MRV9VU0VSIl0sImp0aSI6IjliNTU2ZTBiLTZlZmQtNDkwZC05OGMwLWIzYzYwNjM2ZDczMCIsImNsaWVudF9pZCI6ImNsaWVudCJ9.oaqlviXcQPCLAZP8cV7v-WA75AoiodiG6d2WR9yqJhOFCg7LDsnCjk63J59sq434CZHRIOkCgMi2hVJHOc4MTIFce61Kk046G3-yK313CtMy5LWeVXdKbAHH0gcuoDO3OCJ7u7GzngPtA6bVfxjJFNJ6MmFxEnFPjB5dos9Bb8zYduE2ELMH2aTCS-67R_aQ0BCZaYo5NMH1_jqz9d1hI_kpBx3auR_d2Vh1eJiC_f9Z-rTmRvXdwQefhwgXZ1UCWjV0NuoCqFO3KicEhjGOkqXZ5eh0vGR5zKwKJfCys1lNgXjXVVntHYkXt96ymQ9477pCAWCONZsbkM7244500Q","token_type": "bearer","refresh_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX25hbWUiOiJ1c2VyIiwic2NvcGUiOlsicmVhZCJdLCJvcmdhbml6YXRpb24iOiJ1c2VyZWx2ayIsImF0aSI6IjliNTU2ZTBiLTZlZmQtNDkwZC05OGMwLWIzYzYwNjM2ZDczMCIsImV4cCI6MTU2MDQ4NzcyOCwiYXV0aG9yaXRpZXMiOlsiUk9MRV9VU0VSIl0sImp0aSI6IjJhNTUxOWJjLWUzYTAtNGJjOC1hNTRkLTlmMDNiMjYwNjZkNCIsImNsaWVudF9pZCI6ImNsaWVudCJ9.BgY6N0kzxVApFD-C7UVMDmczSoMY9tglnKzTkybfneoeAAs8ljftIwA5sPWua28Xhl-MNAQ9HL6Q6ou-EbgFlcHC2uPPbJ5silnPLPdTnvVko9l-8w-3WLPk96YbODdQemqFZHSrR1lPmXHB5sR7QjncxGxvuSYZEtPXxZz39lJbyQLSflXADqlk4ZV3BxS-M7d8FcTJEM1uTgwUBSns2N6AZnTkd2FnGskadaV2qhky5TznJjQqRETVS8xCiZCFYwCq5sAMHOj-_BrwlmCeoPfcy38ofbql-qVWfQJiAeU7yWLlAu_hd-zRIIbv-dqRmSF9T9rCxVPv84ptddO1Hw","expires_in": 119,"scope": "read","organization": "userelvk","jti": "9b556e0b-6efd-490d-98c0-b3c60636d730"
}

最终返回的 Token 信息中多了一个属性 organization,结果符合期望结果。

Spring Security Oauth2 令牌增加额外信息相关推荐

  1. Spring Security Oauth2 如何增加自定义授权模式

    在 oauth2 中已经默认有的授权模式中有4种: 授权码模式 隐式授权模式 密码模式 客户端模式 但是实际使用过程中万一我们要基于短信授权,或者基于token 直接授权该怎么办? 这里我们可以先看下 ...

  2. Spring Security OAuth2 实现多人登录互踢下线

    点击上方蓝色字体,选择"标星公众号" 优质文章,第一时间送达 ▊ 老赵推荐(戳下方标题) 阿里大牛程序员的Java问题排查工具单 我已经不用 try catch 处理异常了!太烦人 ...

  3. Spring Security Oauth2 token 续期

    本文参考以下文章.该文章作者有很多优秀文章,需要的小伙伴可以去看看. Spring Security系列(27)- Spring Security Oauth2之令牌过期和续签问题解决方案(1)_云烟 ...

  4. Spring Security OAuth2 Opaque 令牌的简单使用指南

    Spring Security OAuth2 Opaque 令牌的简单使用指南 概述 JWT 是一种以广泛接受的 JSON 格式安全传输敏感信息的方法.包含的信息可能是关于用户的,也可能是关于令牌本身 ...

  5. 从零开始超详细的Spring Security OAuth2.0实现分布式系统授权(注册中心+网关+认证授权服务(JWT令牌验证)+资源调用服务)

    文章目录 一.OAuth2.0 1.介绍 2.例子 3.执行流程 二.Spring Cloud Security OAuth2 1.环境介绍 2.认证流程 三.整合分布式项目 1.技术方案 2.项目结 ...

  6. Spring Security Oauth2 在资源服务器如何获取jwt中的额外信息

    在上一篇Spring Security Oauth2 中实现TokenEnhancer向jwt中添加额外信息中,笔者向大家介绍了如何向jwt中存额外信息(extraInfo) 接下来这篇blog,笔者 ...

  7. Spring Security OAuth2.0认证授权三:使用JWT令牌

    历史文章 [Spring Security OAuth2.0认证授权一:框架搭建和认证测试] [Spring Security OAuth2.0认证授权二:搭建资源服务] 前面两篇文章详细讲解了如何基 ...

  8. refreshtoken用mysql_「SpringCloud」 Spring Security OAuth2 Mysql管理在线Token

    原标题:「SpringCloud」 Spring Security OAuth2 Mysql管理在线Token 前言:Spring Cloud 分布式中的登录如何可视化的管理目前下发的令牌.使用情况. ...

  9. 基于 Spring Security OAuth2和 JWT 构建保护微服务系统

    我们希望自己的微服务能够在用户登录之后才可以访问,而单独给每个微服务单独做用户权限模块就显得很弱了,从复用角度来说是需要重构的,从功能角度来说,也是欠缺的.尤其是前后端完全分离之后,我们的用户信息不一 ...

  10. Spring Security OAuth2整合JWT

    文章目录 1. Spring Security 与 OAuth2 2. Spring Security OAuth2的配置和使用 ①:引入依赖 ②:配置 spring security ③:配置授权服 ...

最新文章

  1. event.keyCode用法及列表
  2. oracle 一致性读数量,ORACLE 一致性读原理记录
  3. Ubuntu下编译ffmpeg+openh264+x264
  4. C++ 在继承中虚函数、纯虚函数、普通函数,三者的区别
  5. UA MATH564 概率论I 求离散型随机变量的分布1
  6. 信息系统项目管理师历年论文题目
  7. mysql 5.7.17 64位_Windows(x86,64bit)升级MySQL 5.7.17免安装版的详细教程
  8. Introduction to replication 翻译
  9. 海洋zyapi.php,zyapi.php · 姬晓亮/海洋cms 海洋影视管理系统 - 免费开源PHP - Gitee.com...
  10. Android百分比布局支持和垂直TextView
  11. 程序员眼中的统计学(3)】概率计算:把握机会
  12. RTCM CRC-24校验计算
  13. 手把手教你使用LabVIEW OpenCV dnn实现物体识别(Object Detection)含源码
  14. IOM计算机组成原理,计算机组成原理-实验1静态随机存储器实验
  15. Wireshark抓取ping包
  16. 2015程序猴的总结:不破楼兰终不还!
  17. Python中的交叉分析pivot_table
  18. 考研期间复习时间记录
  19. Tech Talk 活动预告 | 基于Amazon KVS打造智能视觉产品
  20. c# php md5 32位加密,C#实现将32位MD5摘要串转换为128位二进制字符串的方法

热门文章

  1. WEB打印控件Lodop(V6.x)使用说明及样例
  2. 开源正在吞噬软件,开源RPA厚积薄发
  3. 人民币对美元汇率中间价报6.7343元 上调13个基点
  4. feature map理解
  5. 【学习日记】Dom基础
  6. FPGA—蜂鸣器播放《两只老虎》
  7. Redis Cluster内存爆满
  8. python 子域名爆破工具
  9. XCOM2中敌对生物设计分析(ADVENT篇)
  10. 树莓派利用OpenCV的图像跟踪、人脸识别等