security-oauth2(自定义配置)

整体介绍

security-oauth2 提供了一套完善的token认证授权体系,同时也提供一些配置类,让我们继承,重写的手段,做自己想要的配置。token的存储方式有多种,本章内容只讲解JWT存储方式的配置

1. 利用java提供的keytool工具生成密钥 ( .jks 或者 .keystore 文件)

打开黑窗口,运行命令:keytool -genkeypair -alias 【别名】-keyalg 【加密算法】 -keypass 【私钥的密码】 -keystore 【密钥库的名称】.【密钥库的后缀】 -storepass 【密钥库口令】

完整案列:keytool -genkeypair -alias alias -keyalg RSA -keypass keypass -keystore test.keystore -storepass storepass

命令执行之后,会弹出如下窗口
在这里插入图片描述
最后输入y,敲回车结束窗口,随即会在黑窗口当前目录下产生一个名为"test.keystore"的文件,这个就是密钥,其中包含了私钥和公钥

继续执行命令(查看密钥):keytool -list -rfc --keystore test.keystore | openssl x509 -inform pem -pubkey
会看到如下内容:

-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAi4gx+aC53QDguQ0MWaBe
cRM62P8mEAQSQsp9wrn2Sfa+DQX3pUB2HxpnDYehSvkNCjn3cFrCIFf4r4szopAd
Ay6SNblETXD8td1nzNTRdC/uR4uzUo3JCvz1uYpu9hEfPmmvkC6YehnjIRP13HOh
WzdnW6qdGB15CDlvySjDxli1LX6xbKYXZ6NjC8J5Zb8xkjXOEiiOqpNwwtDlYL/R
1eSCvCJWiOQBGKl9/cjFW38B4us6l2m4L8dW6fzbFwC/lsAIFydvP0X/qdjN3htg
YivJP1MQVc9Nb8Q/Xs5drQcqZeZ5VLK7lzy8MkcjG2dA8XWswRmNIUxyAH7jSpzf
OQIDAQAB
-----END PUBLIC KEY-----
-----BEGIN CERTIFICATE-----
MIIDQzCCAiugAwIBAgIEcTS6tjANBgkqhkiG9w0BAQsFADBSMQswCQYDVQQGEwJj
bjELMAkGA1UECBMCc2gxCzAJBgNVBAcTAnNoMQ0wCwYDVQQKEwRoYW5kMQ0wCwYD
VQQLEwRoYW5kMQswCQYDVQQDEwJldjAeFw0xOTA1MzAwNzAzMTdaFw0xOTA4Mjgw
NzAzMTdaMFIxCzAJBgNVBAYTAmNuMQswCQYDVQQIEwJzaDELMAkGA1UEBxMCc2gx
DTALBgNVBAoTBGhhbmQxDTALBgNVBAsTBGhhbmQxCzAJBgNVBAMTAmV2MIIBIjAN
BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAi4gx+aC53QDguQ0MWaBecRM62P8m
EAQSQsp9wrn2Sfa+DQX3pUB2HxpnDYehSvkNCjn3cFrCIFf4r4szopAdAy6SNblE
TXD8td1nzNTRdC/uR4uzUo3JCvz1uYpu9hEfPmmvkC6YehnjIRP13HOhWzdnW6qd
GB15CDlvySjDxli1LX6xbKYXZ6NjC8J5Zb8xkjXOEiiOqpNwwtDlYL/R1eSCvCJW
iOQBGKl9/cjFW38B4us6l2m4L8dW6fzbFwC/lsAIFydvP0X/qdjN3htgYivJP1MQ
Vc9Nb8Q/Xs5drQcqZeZ5VLK7lzy8MkcjG2dA8XWswRmNIUxyAH7jSpzfOQIDAQAB
oyEwHzAdBgNVHQ4EFgQUarJgnmi/5Xk6lGlr0BXjZ1VPxpUwDQYJKoZIhvcNAQEL
BQADggEBABbn5ORbO+xAG1DNVOp8BKsdkoDkB9WdTRwtIvqkSWq55lF0Rhbs8NPM
A/CTUPIfHTEl8ACxTKBORLhtmY2O9wwxTX0iSVUgfPzBAoOldb9FfXhf6OJpgrbT
Qz8rNbXMgvdRppZ7RH6Uqmv74HBoueMKfAKOFqh3kVjnsumWZOvoFIJDcx9z9Uc8
hLoNUBTdvNL3RlpGJBc55vPHVs47RUqOX5iH33w+mnEM4Jg9bB3EGjCBi2yqeHog
y8JpqcJLrgtIugDH+pbDRd4RbYRzfEah0S7oHMTNbUmZBUK+c+reZgFCbHal+yup
gRannJ06ijk8Jcc2Xs20HFQ9FYuoclE=
-----END CERTIFICATE-----

上面内容中的 BEGIN PUBLIC KEY 至 END PUBLIC KEY的部分,就是密钥中的公钥 (公钥可以先粘贴复制出来,后需要用到)

将上一步骤中的"test.keystore"文件放在 maven的resources资源目录下;

token(令牌)存储方式有JWT存储,JDBC存储,内存存储,redis存储及其他存储方式

JWT( json web token)是一种用于双方之间传递安全信息的简洁的、URL安全的表述性声明规范,也是一种token。

JWT由三部分组成:
Header 头部:算法和存储类型信息
Payload 负载:身份信息或者自定义的信息
Signature 签名: RSA签名信息(前文中的密钥,也是通过RSA算法生成的)

使用JWT生成的token大致长这样:

eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJtc2ctMSI6Iumdk-S7lCIsIm1zZy0yIjoi6Z2T5aWzIiwidXNlcl9uYW1lIjoiZXYiLCJzY29wZSI6WyJyZWFkIl0sImV4cCI6MTU1OTM2NjA1OCwiYXV0aG9yaXRpZXMiOlsiUk9MRV9VU0VSIl0sImp0aSI6IjVhMDdjYmUyLTEzNDYtNDkwNi1hNDE3LWIxMGYyNWEzM2FjMSIsImNsaWVudF9pZCI6ImNsaWVudEVWIn0.g774D_ITXavxxHdeZ11X_RywCVAMTRrkMpEcCkMMZyk8BYrlHGmTb3ACIeAOWEIyNLXJe06c4vYZaEfrFobXwvFaaH8nZtOUyK_72HziVPfigstOI-ehFivUtL–BPvsERF39gH26yAY_tjWNFhqu8MYo2CvlZMEWGBTdnd5tK8hcq8_w85KjXoggVt-7KXYYnlLVeo-xJOvsEeNpaor0VzFIN61Dfbnj-nB0CaPxsxlT8WC_33AbXvtHnJVqPzQIA3lKRhRaGuRGExZx_BDhL531T2NMlP-NkzRxrausf5fSTegfa-bjrNZh9dg-Pxv3yzRyFIfDxkJ-BJMaQR7KQ

上面这个token,是一个json字符串通过RSA算加密得来的,而这个json字符串是可以通过 https://jwt.io 解析出来的在这里插入图片描述
解析后得到的json字符串大概长这样(下文会讲解这个json字符串是怎么来的):

{"msg-1":"靓仔","msg-2":"靓女","user_name":"ev","scope":["read"],"exp":1559377994,"authorities":["ROLE_USER"],"jti":"dccd734e-5c43-4018-bc62-addefb429c56","client_id":"clientEV"}

上面这个token以“.”分割成三部分:分别对应JWT的三个结构:

Header :eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9 --> 解码 --> 得到算法和存储类型信息
Payload : eyJtc2ctMSI6Iumdk-S7lCIsIm1zZy0yIjoi6Z2T5aWzIiwidXNlcl9uYW1lIjoiZXYiLCJzY29wZSI6WyJyZWFkIl0sImV4cCI6MTU1OTM2NjA1OCwiYXV0aG9yaXRpZXMiOlsiUk9MRV9VU0VSIl0sImp0aSI6IjVhMDdjYmUyLTEzNDYtNDkwNi1hNDE3LWIxMGYyNWEzM2FjMSIsImNsaWVudF9pZCI6ImNsaWVudEVWIn0 --> 解码 -->  得到上面这样的json字符串
Signature :g774D_ITXavxxHdeZ11X_RywCVAMTRrkMpEcCkMMZyk8BYrlHGmTb3ACIeAOWEIyNLXJe06c4vYZaEfrFobXwvFaaH8nZtOUyK_72HziVPfigstOI-ehFivUtL--BPvsERF39gH26yAY_tjWNFhqu8MYo2CvlZMEWGBTdnd5tK8hcq8_w85KjXoggVt-7KXYYnlLVeo-xJOvsEeNpaor0VzFIN61Dfbnj-nB0CaPxsxlT8WC_33AbXvtHnJVqPzQIA3lKRhRaGuRGExZx_BDhL531T2NMlP-NkzRxrausf5fSTegfa-bjrNZh9dg-Pxv3yzRyFIfDxkJ-BJMaQR7KQ --> 解码 --> 签名算法

2. 自定义配置

2.1 配置TokenStore

核心配置之一,代码块中有注释,这里只需要知道这里怎么配置的,配置起什么作用就行了,具体配置是何时被用到的,不是本章重点,会在本人博客的其它文章中详细说明

@Component
public class TokenStoreConfig {
   

    @Bean("keyProp")
    public KeyProperties keyProperties() {
   
        return new KeyProperties();
    }
    //前文中生成的 test.keystore 文件在resources资源文件夹下的路径
    private String location = "test.keystore";
    // 生成 test.keystore 文件时候所用的【密钥库口令】
    private String secret = "storepass";
     // 生成 test.keystore 文件时候所用的【别名】
    private String alias = "alias";
    // 生成 test.keystore 文件时候所用的【私钥的密码】
    private String password = "keypass";
    // 生成的秘钥中的 PUBLIC KEY 部分
    private String publicKey = "-----BEGIN PUBLIC KEY-----\n" +
            "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsn4FPljPEtJCDmXMEoEK\n" +
            "xLCMl5rmd8MUxFVBhwUZGSH71h1Zphaxm9EvSulJQm+FzcldJYTeIDcQYtEl1kbQ\n" +
            "4Fmq840Iy3JSLF1Z9WXpddIzB4PLkrJwFYAXZAR351jbYGqUbzWWjJEOGLP6Yvzb\n" +
            "BrN6DzEYamoSwGUl8R93h1oRUHR3tVqdbMcjmyllvY7N9Qgk9lAldm6CcgavMqbm\n" +
            "USp2X64CgAtdwDixWSO3eCucpXX6ocwaEnUB4XWTXl76OhilZ0WSXXHXOuDZGllj\n" +
            "7fhmL0Hyo4bfy3PuQ9BdCJqE54SIELGxrTvapgLqwWhngJlnHSAGqRMkNxCFmwCk\n" +
            "/wIDAQAB\n" +
            "-----END PUBLIC KEY-----";

    /**
     * TokenStore是一个接口,他有五个直接子类,分别是:
     * JwtTokenStore jwt方式存储
     * JdbcTokenStore 数据库方式存储
     * InMemoryTokenStore 内存方式存储
     * 这里指定了是以JWT方式存储
     */
    @Bean
    public TokenStore tokenStore(JwtAccessTokenConverter jwtAccessTokenConverter) {
   
        //JWT方式存储,需要JWT令牌转换器,下面jwtAccessTokenConverter()方法中自定义了一个JWT令牌转换器
        return new 
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
spring-security-oauth2-2.2.3.release.jar是一个用于实现基于OAuth 2.0协议的安全认证和授权的Java库。OAuth 2.0协议是一种用于授权的开放标准,它允许用户通过授权代理向第三方应用程序授权访问受保护的资源,而无需将用户的凭证(例如用户名和密码)透露给第三方。 spring-security-oauth2-2.2.3.release.jar提供了一套面向Spring应用程序的OAuth 2.0认证和授权解决方案。它可以轻松地将OAuth 2.0集成到现有的Spring应用程序中,并提供了一系列的API和类,使开发人员可以方便地实现OAuth 2.0认证和授权流程。 使用spring-security-oauth2-2.2.3.release.jar,开发人员可以通过配置自定义一些核心组件(例如TokenStore、AuthorizationServer和ResourceServer)来实现OAuth 2.0的四种授权类型:授权码模式、密码模式、客户端模式和简化模式。通过这些授权类型,开发人员可以实现不同的应用场景和需求。 此外,spring-security-oauth2-2.2.3.release.jar支持使用不同的存储机制来存储和管理OAuth 2.0令牌,例如内存存储、数据库存储和Redis存储。开发人员可以根据自己的需求选择并配置合适的存储机制。 总的来说,spring-security-oauth2-2.2.3.release.jar提供了一种简单、可扩展且安全的方式来实现OAuth 2.0认证和授权。无论您是开发面向Web、移动还是其他类型应用程序,该库都能帮助您轻松地实现与第三方应用程序的安全集成。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值