SpringSecurityOAuth和Jwt

2023-05-16

一.SpringSecurityOAuth简介

在这里插入图片描述
grant_type为授权模式password为密码模式

@EnableAuthorizationServer表示定义认证服务器

@EnableResourceServer表示定义资源服务器

在这里插入图片描述

二.Token处理

TokenStore用于定义Token存储

TokenEnhancer用于定制化Token,往里面添加信息

  • 基本Token参数配置

    • 过期时间,接受什么grant_type,怎么存都是可以配的,需要继承AuthorizationServerConfigurerAdapter(并实现configure方法)
    • 在参数为endpoints的configure方法中设置token包含什么信息
    • 在参数为clients的方法中设置token的存储(是inMemory还是到数据库中),接受什么grant_type,过期时间设置等等
  • 使用JWT替换默认的Token

    • JWT:Json Web Token令牌标准

      • 自包含:里面包含有意义的信息的,自定义,原始的Token是通过UUID生成的
      • 密签:首先发送的token中是不会包含密码这样关键信息的,其次token是可以经过指定密钥进行签名的(签名是防止被篡改)
      • 可扩展:包含的信息是可以自定义的,故可以进一步添加需要的信息
    • 配置

      • 需要配置JWTTokenStore的Bean(用于存取)

      • 需要配置JWTAccessTokenConverter的Bean(用于进行签名)

        @Bean
        public JwtAccessTokenConverter jwtAccessTokenConverter() {
            JwtAccessTokenConverter accessTokenConverter = new JwtAccessTokenConverter();
            accessTokenConverter.setSigningKey("");//设置密钥
            return accessTokenConverter;
        }
        
      • 配置JWTTokenEnhancer的Bean(用于向Token中添加对应的内容)

        • 自定义一个类SelfJwtTokenEnhancer实现TokenEnhancer

          public class SelfJwtTokenEnhancer implements TokenEnhancer{
              @Override
              public OAuth2AccessToken enhance(OAuth2AccessToken accessToken, OAuth2Authentication authentication){
                  //里面设置往Token中加的内容
                  Map<String, Object> info = new HashMap<>();
                  info.put("company","jackCompany")
                  //accessToken实际的类型是DefaultOAuth2AccessToken
                  ((DefaultOAuth2AccessToken)accessToken).setAdditionalInformation(info);//设置附加信息
                  return accessToken;
              }
          }
          
        • 定义JWTTokenEnhancer用于返回自定义的Enhancer

          @Bean
          public TokenEnhancer jwtTokenEnhancer() {
              return new SelfJwtTokenEnhancer();
          }
          
        • 添加到AuthorizationServerConfigurerAdapter实现的方法中

          public class SelfAuthorizationServerConfigurer extends AuthorizationServerConfigurerAdapter {
              @Autowired
              private UserDetailsService userDetailsService;
              @Autowired
              private AuthenticationManager authenticationManager;
              @Autowired
              private TokenStore tokenStore;
              @Autowired
              private JwtAccessTokenConverter jwtAccessTokenConverter;
              @Autowired
              private TokenEnhancer jwtTokenEnhancer;
              @Override
              public void configure(AuthenticationServerEndpointsConfigurer endpoints) throws Exception{
                  endpoints.tokenStore(tokenStore)
                      .authenticationManager(authenticationManager)
                      .userDetailService(userDetailsService)
                  TokenEnhancerChain tokenEnhancerChain = new TokenEnhancerChain();//生成一个增强器链
                  List<TokenEnhancer> enhancers = new ArrayList<>();
                  enhancers.add(jwtTokenEnhancer);
                  enhancers.add(jwtAccessTokenConverter);
                  tokenEnhancerChain.setEnhancers(enhancers);//在增强器链中添加增强器内容
                 	endpoints.tokenEnhancer(tokenEnhancerChain)
                      .accessTokenConverter(jwtAccessTokenConverter);
              }
          }
          
  • 扩展和解析JWT的信息

    • 可以在jsonwebtoken.io中输入token查看对应的payload(token包含的信息)

    • 如果直接在接口的参数中获得Authentication对象,可见其中的内容是没有添加的Enhancer中的内容的,只会有token自身携带的Authentication内容,所以我们需要自定义代码将添加的内容取出

    • 自定义解析JWT

      • 引入外部依赖

        <dependency>
        	<groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt</artifactId>
        </dependency>
        
      • 从请求中获取Token内容并解析

        @GetMapping("/me")
        public void getTokenInfo(HttpServletRequest request){
            String header = request.getHeader("Authentication");
            String token = StringUtils.substringAfter(header,"bearer ");//获取具体token信息
            Claims claims = Jwts.parser().setSignKey("设置的key").parseClaimJwt(token).getBody();//将token转成Claims对象
            String company = (String)claims.get("company");//通过get获得存入token的信息
            System.out.println(company);
        }
        
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SpringSecurityOAuth和Jwt 的相关文章

  • Auth0 - Django 和石墨烯

    我目前正在使用 Graphql 和 Django Graphene JWT 我使用 django 作为后端 所有请求均通过如下所示的令牌进行身份验证 我有一个为 graphql 创建身份验证令牌的模式 目前如下所示 class Mutati
  • 将 Zapier 自定义请求 Webhook 与 JSON Web 令牌结合使用

    我需要访问使用 JSON Web 令牌作为身份验证方法的 API 有没有一种好方法可以使用 python 代码步骤创建此令牌 然后将该令牌作为标头添加到自定义请求 Webhook 步骤中 我使用 API 进行身份验证的经验是使用简单的API
  • ASP .NET CORE 2.2 JWT 和声明网站身份验证

    我有一个 net core 2 2 api 它 在成功登录时 生成一个 JWT 令牌 其中包含一个声明身份 该身份传递经过身份验证的用户的用户名 权限和角色等信息 在我的 net core 2 2 中 Web 应用程序我有一个登录机制 可以
  • 获取 rfc7517 格式的 JWKS for Firebase

    我正在使用 Firebase 对我的应用程序中的用户进行身份验证 Firebase 生成一个 JWT 令牌 我需要在我的服务器上对其进行身份验证 我使用 tyk io 来做到这一点 Tyk 支持这些令牌 但要求公钥的数据源位于https w
  • 使用 django-rest-framework-simplejwt 注册后返回令牌

    我正在使用 django rest framework simplejwt 想知道注册用户后是否可以返回令牌 This https stackoverflow com questions 37622616 django rest frame
  • Firebase .NET 令牌验证

    我们正在开发一个使用 Firebase 进行某些数据存储的项目 我们的客户请求使用 C NET 实现服务器 我们在服务器上设置 REST 端点 以便客户端能够出于某些目的与其进行通信 例如 触发只能在服务器上运行的算法 Firebase 建
  • jwt:为什么我的令牌显示在 Chrome DevTools 中?

    我在 Express js 中有一个 API 可以创建博客文章并将其添加到我的数据库中 当我从 DevTools 内的 React 应用程序发出请求时 它将显示我的 JWT 我担心当我的网站上线时 人们可以看到我的令牌并从他们的网站发出添加
  • Cookie 是否可以保护令牌免受 XSS 攻击? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在为基于浏览器的 Javascript Web 应用程序构建基于 JWT JSON Web 令牌 的身份验证机制 使用无状态服务器
  • 使用 v2.0 端点的声明中缺少 UPN

    我已经设置了一个类似于 Microsoft 的以下示例的项目 其中我有一个本机应用程序请求使用 v2 0 端点访问 Web api https github com azureadquickstarts appmodelv2 nativec
  • 如何在Python中使用x和y坐标验证ES384 JWT签名

    我有一个 JWT 如下 Authorization Bearer eyJhbGciOiJFUzM4NCIsInR5cCI6IkpXVCIsImtpZCI6IjQ0ODIzZjNkLTBiMDEtNGE2Yy1hODBlLWI5ZDNlOGE
  • 如何在Python中使用JWK解码JWT令牌

    我正在开发一个应用程序 其中所有 API 都受 OAuth 保护 我已从客户端收到访问令牌 但无法解码和验证令牌 我有以下格式的 JWK keys kty RSA x5t S256 Some value e Some Value x5t S
  • 如何实施刷新令牌轮换?

    如果我正确理解了刷新令牌轮换 这意味着每次我们请求新的访问令牌时 我们也会获得一个新的刷新令牌 如果多次使用刷新令牌 我们会使某个用户之前使用的所有刷新令牌失效 并且用户必须再次执行身份验证过程 这是否意味着我们需要将所有刷新令牌 所有旧的
  • 从 Google Chat POST 请求验证 JWT

    我有一个 NodeJS 机器人使用 HTTPs 端点连接到 Google Chat 我正在使用快递来接收请求 我需要验证所有请求是否都来自 Google 并且希望使用 Google 随请求发送的不记名令牌来执行此操作 我的问题是我正在努力寻
  • AzureAD JWT 令牌受众声明前缀使 JWT 令牌无效

    我正在使用 adal node npm 包通过 AzureAD 进行身份验证 一切正常 我得到了一个令牌 但是 在检查 JWT 令牌中的 aud 声明时 我看到受众 GUID 的前缀为 spn 我认为当我尝试在现有的 Web API 上使用
  • 在 JWT Laravel 中使用授权标头时获取 token_not_provided

    I read 本教程 http blog nedex io create an api server for mobile apps using laravel 5 1 我设法使它完美地工作 唯一的问题是当我从 令牌 token here
  • 在 ASP.NET Core 中的 Swagger 中使用 JWT(授权:Bearer)

    我正在 ASP NET Core 1 0 中创建 REST api 我之前使用 Swagger 进行测试 但现在我为某些路由添加了 JWT 授权 和UseJwtBearerAuthentication 是否可以修改 Swagger 请求的标
  • Django REST JWT 刷新

    使用 JWT 实施 Django REST 和身份验证 对于 JWT 令牌 我们必须在过期之前刷新它 过期后 JWT 将不会提供新的令牌 对于我的移动设备 我需要每 10 分钟刷新一次令牌 JWT EXPIRATION DELTA 如果用户
  • 如何在没有 x5c 的情况下验证来自 jwks 的 JWT 签名

    我有一个 JWT 安全令牌 需要通过 jwks 端点进行验证 jwks 中的数据如下所示 keys kty RSA e AQAB use sig alg RS256 n kid 2132132 b1e6 47e7 a30f 1831942f
  • 如何从秘密字符串中制作 HMAC_SHA256 密钥以在 jose4j 中与 JWT 一起使用?

    我想生成 JWT 并使用 HMAC SHA256 对其进行签名 对于该任务我必须使用jose4j https bitbucket org b c jose4j wiki Home 我尝试根据秘密生成密钥 SecretKeySpec key
  • 没有 OAuth 的 Spring Security JWT

    最近我开始学习如何使用oauth 2 0 jwt配置spring boot 我有一个问题 是否可以使用spring boot security jwt避免oauth 2 0 是的 可以使用JWT无需使用标准化的功能OAuth 2 0 flo

随机推荐

  • module.exports、exports和export、export default的区别,import和require的区别

    在vue及其他模块化开发中 xff0c 经常会用到这些输出和引用的语句 xff0c 那么 xff0c 怎么在合适的时候用合适的语句呢 xff0c 怎么区分它们呢 xff1f 一 理论区别 首先 xff0c module exports和ex
  • Linux docker 安装

    先执行wget qO https get docker com sh 命令安装docker 执行该命令可能会出现wget命令找不到的问题 xff0c 那我们就先要执行yum install wget 命令安装wget 安装完后就可以使用wg
  • ITK和VTK比较

    概念比较安装步骤遇到的问题 概念比较 基本概念ITK xff08 Insight Segmentation and Registration Toolkit xff09 VTK xff08 visualization toolkit xff
  • 关于12864液晶屏汉字显示问题

    在我们学习或者开发12864显示屏 xff08 带字库 xff09 的过程中 xff0c 可能大家会遇到我这样的情况 如下 xff1a 第三行的 数学 两字显示不出来 xff1f 而第四行却可以 xff0c 为什么 xff1f 答案显而易见
  • IOS10-IOS13屏蔽系统更新描述文件|去除‘设置’①小红点教程

    大家都知道在iPhone系统更新的时候都会提示咱们进行更新 xff0c 但是有些小伙伴不想更新 xff0c 但是不更新有一个小红点1这样人很烦躁 xff0c 对于强迫症的人实在是忍不了 xff0c 今天我就给大家分享一个方法 xff0c 只
  • iOS13屏蔽系统自动更新,去除①红标,这个文件复活了!

    iPhone手机系统每一次发布新版本 xff0c 大家经常会接收到系统自动推送的升级提示 xff0c 经常会在大家不知情的情况下系统就在后台自动把系统升级包给自动下载下来了 xff0c 经常会弹出一个提示窗提醒升级 xff0c 这对于一些不
  • AC代码

    此处省略一万分AC代码 加油咯 xff01 xff01 xff01 代码还是尽量自己写 xff0c 看别人的博客不是不可以 xff0c 看别人的代码也不是不可以 xff0c 如果你不看比人的博客 xff0c 不看别人的代码 xff0c 不看
  • Oracle group by 扩展函数详解(grouping sets、rollup、cube)

    文章目录 1 概述2 分组函数2 1 group by xff1a 一起分组 xff08 1 xff09 2 2 grouping sets xff1a 单独分组 xff08 N xff09 2 3 rollup xff1a 累计累加 xf
  • Oracle 索引详解(index)

    文章目录 1 概述2 索引管理2 1 创建索引2 2 删除索引2 3 修改索引2 4 查询索引 3 索引类型3 1 B Tree 平衡树索引3 2 bitmap 位图索引3 3 反向键索引3 4 基于函数索引 4 扩展4 1 走不走索引的情
  • Windbg调试(使用方法)

    一 Windbg版本信息 Windbg分32位和64位版本 xff0c 32位程序应使用32位Windbg调试 xff0c 64位程序应64位Windbg调试 若想使用64位的Windbg分析32位的程序 使用如下命令进行CPU模式的切换
  • Hi3861开发环境搭建 ||避坑指南|| [适用于几乎所有以Hi3861为主控的开发板]

    Hi3861开发环境搭建 避坑指南 适用于几乎所有以Hi3861为主控的开发板 前言 xff1a 这几天为了搭建Hi3861的开发环境 xff0c 看了不少官方文档和视频 xff0c 但是依然折腾了很久才配置好编译 上传都能正常的环境 xf
  • 论文分享——Bottom-Up and Top-Down Attention for Image Captioning and Visual Question Answering

    文章目录 文章简介1 背景介绍研究背景概念介绍问题描述IC与VQA领域的主要挑战 2 相关研究CNN 43 RNN体系架构Attention mechanismBottom Up and Top Down AttentionBottom U
  • spring mvc 源码分析之父子容器问题

    spring mvc 源码分析 spring mvc 源码分析之父子容器问题 spring mvc 源码分析前言为什么要弄两个ioc容器 xff1f 一个不可以吗存在两个容器 父容器是spring ioc容器自容器是springmvc io
  • C++11特性

    C 43 43 11已经出来很久了 xff0c 网上也早有很多优秀的C 43 43 11新特性的总结文章 xff0c 在编写本博客之前 xff0c 博主在工作和学习中学到的关于C 43 43 11方面的知识 xff0c 也得益于很多其他网友
  • CentOS 7 Squid缓存代理服务器搭建——筑梦之路

    简介 xff1a Squid 是 Linux Unix 平台下最为流行的高性能免费应用层代理服务器 xff0c 它具有权限管理灵活 性能高和效率快的特点 代理服务器可以提供文件缓存 复制和地址过滤等服务 xff0c 充分利用有限的出口带宽
  • python列表的基础操作

    python列表的操作 列表是python最为基础的数据结构 xff0c 极为重要 这话怎么理解呢 xff1f 是最常用的 xff0c 想不到其他的 xff0c 就用列表是其他数据结构的基础 xff0c 可以继承列表然后定义属于自己的数据类
  • C++正则表达式(regex_match、regex_search与regex_replace)

    前言 正则表达式是在字符串处理中常用和重要的工具 xff0c 主要用于字符串的匹配 在C 中正则表达式的使用非常方便 xff0c 但到了C 43 43 中让我有点懵逼了 xff0c 花了些时间查阅了很多资料 xff0c 下面主要会写到C 4
  • Java爬虫详解

    这是 Java 爬虫系列文章的第一篇 第一篇是关于 Java 爬虫入门内容 在该篇中我们以采集开源情报网站中的ip数据为例 需要提取的内容如下图所示 Statistics AbuseIPDB nbsp nbsp nbsp 我们需要提取图中圈
  • ubuntu安装过程

    feat 新增功能 fix 修复 bug docs 文档相关的改动 style 对代码的格式化改动 xff0c 代码逻辑并未产生任何变化 test 新增或修改测试用例 refactor 重构代码或其他优化举措 chore 项目工程方面的改动
  • SpringSecurityOAuth和Jwt

    一 SpringSecurityOAuth简介 grant type为授权模式password为密码模式 64 EnableAuthorizationServer表示定义认证服务器 64 EnableResourceServer表示定义资源