spring security oauth2 password模式简单入门二(jwt对称以及非对称加密配置)

本文详细介绍了在SpringSecurity OAuth2中使用JWT进行认证的方法,包括对称加密和非对称加密两种方式。通过修改配置,实现了JWT的生成、验证及存储过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

spring security oauth2 改进 使用JWT认证   

接着上一篇spring security oauth2 入门,之后网上查阅了一些资料,准备对oauth2修改使用jwt的模式认证,使用jwt有两种认证方式1,对称加密方式。2,非对称加密方式,本文将逐一介绍

1,对称加密方式,此种方式很简单,因为配置资源服务器和认证服务器在同一个应用中,所以只要在认证服务器配置中稍作修改即可

认证服务器加此配置

//jwt转换器
@Bean
public JwtAccessTokenConverter accessTokenConverter() {
    JwtAccessTokenConverter converter = new JwtAccessTokenConverter();
    //加密秘钥
    converter.setSigningKey("123");
    return converter;
}

同时配置在认证服务器配置中配置token端点

@Override
    //配置授权以及令牌的访问端点和令牌服务
    public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
        //数据库存储
        endpoints.tokenStore(tokenStore())
                //token转换,使用jwt   加上此配置即可
                .accessTokenConverter(accessTokenConverter())
                .authenticationManager(authenticationManager)
                .allowedTokenEndpointRequestMethods(HttpMethod.GET, HttpMethod.GET);
    }

http://localhost:8111/oauth/token?username=user_1&password=123456&grant_type=password&scope=select&client_id=client_2&client_secret=123456

运行测试 成功

2,非对称加密方式

首先创建证书库,一个.jks文件用来认证用的,,在jks文件中可以提取公钥和私钥,此文件可以用jdk来生成

进入到jdk的bin目录,打开命令提示窗

输入以下命令

Keytool -genkeypair -alias ims.abc.com -keyalg RSA -keysize 2048 -keypass mypassword -sigalg SHA256withRSA -dname "CN=ims.abc.com,OU=SUIBIAN,O=SUIBIAN,L=beijing,C=CN" -validity 5475 -keystore C:\Users\zongw\ims.abc.com_keystore.jks -storetype JKS -storepass mypassword

alias 别名  可以随便取,之后要用到

keyalg证书类型

keysize密钥长度

keypass私钥密码

sigalg签名算法

dname证书域名    CN属性比较重要,如何申请证书的话必须是域名,此处自定义,其他属性可随意填写

validity证书有效天

keystore  JKS 文件

storetype  证书库类型

storepass 证书库密码

执行以上命令会在文件夹中生成jks文件

接下来,需要根据jks文件,获取到公钥信息,继续输入命令

keytool -list -rfc -keystore C:\Users\zongw\ims.abc.com_keystore.jks -storepass mypassword

红框中所示就是公钥信息,复制保存。接下来把生产好的文件放入到项目的resources中

public.txt是获取的公钥信息

接下来修改项目中的代码

注释掉对称加密的代码,加上非对称加密代码

//jwt 非对称加密
@Bean
public JwtAccessTokenConverter accessTokenConverter() {
    //私钥,jks文件路径,以及申请时的密码
    JwtAccessTokenConverter converter = new JwtAccessTokenConverter();
    KeyStoreKeyFactory keyStoreKeyFactory = new KeyStoreKeyFactory(new ClassPathResource("ims.abc.com_keystore.jks"), "mypassword".toCharArray());
    //此处传入的是创建jks文件时的别名-alias ims.abc.com
    converter.setKeyPair(keyStoreKeyFactory.getKeyPair("ims.abc.com"));
    //公钥(读取public.txt的公钥信息)
    Resource resource = new ClassPathResource("public.txt");
    String publicKey = null;
    try {
        publicKey = inputStream2String(resource.getInputStream());
    } catch (final IOException e) {
        throw new RuntimeException(e);
    }
    converter.setVerifierKey(publicKey);
    return converter;
}

String inputStream2String(InputStream is) throws IOException {
    BufferedReader in = new BufferedReader(new InputStreamReader(is));
    StringBuffer buffer = new StringBuffer();
    String line = "";
    while ((line = in.readLine()) != null) {
        buffer.append(line);
    }
    return buffer.toString();
}

 

其他地方不需要动,启动项目,用postman访问

得到token,并存储到数据库

浏览器访问

http://localhost:8000/abc?access_token=eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOlsiYWJjIl0sInVzZXJfbmFtZSI6InVzZXJfMSIsInNjb3BlIjpbInNlbGVjdCJdLCJleHAiOjE1NjgxNTI3NjYsImF1dGhvcml0aWVzIjpbIlVTRVIiXSwianRpIjoiMzUxZDA1YzctYmNiMC00MWE4LWExZTEtMDQ1YzVjMWY1Y2RkIiwiY2xpZW50X2lkIjoiY2xpZW50XzIifQ.jcmc_BxOoXMAukogzbHG5tqca3Lujvfj3Js7dQ6L4k5xiovS1SGBa5l3HXOm5hDZ-d05Z5OnV4NLty6CVSbUFBbMNoxqRmiItwbn9gBChsDcSq9uYLzsgsodJDvfXjrf0kw2hY0XbdaB-ZySMRKvC_NMZ-A54NTD7bfd7yTNkqyEtEeV0svmhIO0THUMF9Z42H4R6TmeiRjjtyQiz3dRpZK7zsQAcWODFegxPhSdXt73GbYWTCQ6DK1Ee5bxaA4oRGKRqMsiG_y7Uw7iZU4b60QkRKHFjTe9bGXISH0QWVfGdNXEjjhqjU6Mx4MBSLj7GGnie97g-v7HB1pTPG7NtQ

访问成功

 

 

至此jwt加密介绍完毕,因为此文是按照第一篇文章的续写,有不懂的小伙伴,可先看第一篇文章。

 

多介绍一条命令,此命令跟此文无关

keytool -certreq -keyalg RSA -alias ims.abc.com -keystore C:\Users\zongw\ims.abc.com_keystore.jks -storetype JKS -storepass mypassword -file C:\Users\zongw\ims.abc.com_certreq.csr

此命令是根据jks文件生产csr文件(也就是证书请求),可以用此文件来申请证书!

 

 

----------------------------------------------------------------

修改一下配置文件,可以使用https访问

 

key-store : classpath:ims.abc.com_keystore.jks
key-store-password : mypassword
keyStoreType : JKS
keyAlias : ims.abc.com

使用https访问

使用fildder抓取一下请求

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值