040-安全开发-JavaEE应用&SpringBoot框架&JWT身份鉴权&打包部署JAR&WAR

03-01 1120阅读

040-安全开发-JavaEE应用&SpringBoot框架&JWT身份鉴权&打包部署JAR&WAR

040-安全开发-JavaEE应用&SpringBoot框架&JWT身份鉴权&打包部署JAR&WAR

040-安全开发-JavaEE应用&SpringBoot框架&JWT身份鉴权&打包部署JAR&WAR

#知识点:

1、JavaEE-SpringBoot-身份鉴权-JWT技术

2、JavaEE-SpringBoot-打包部署-JAR&WAR

演示案例:

➢SpringBoot-身份鉴权-JWT技术

➢SpringBoot-打包部署-JAR&WAR

040-安全开发-JavaEE应用&SpringBoot框架&JWT身份鉴权&打包部署JAR&WAR

#SpringBoot-身份鉴权-JWT技术

JWT(JSON Web Token)是由服务端用加密算法对信息签名来保证其完整性和不可伪造;

Token里可以包含所有必要信息,这样服务端就无需保存任何关于用户或会话的信息;

JWT用于身份认证、会话维持等。由三部分组成,header、payload与signature。

Header、Payload 和 Signature 是 JSON Web Token(JWT)的三个主要组成部分。

  1. Header(头部): JWT 的头部通常包含两部分信息:声明类型(typ)和使用的签名算法(alg)。这些信息以 JSON 格式存在,然后进行 Base64 编码,形成 JWT 的第一个部分。头部用于描述关于该 JWT 的元数据信息。

    {
      "alg": "HS256",
      "typ": "JWT"
    }
    
  2. Payload(负载): JWT 的负载包含有关 JWT 主题(subject)及其它声明的信息。与头部一样,负载也是以 JSON 格式存在,然后进行 Base64 编码,形成 JWT 的第二个部分。

    {
      "sub": "1234567890",
      "name": "John Doe",
      "iat": 1516239022
    }
    
  3. Signature(签名): JWT 的签名是由头部、负载以及一个密钥生成的,用于验证 JWT 的真实性和完整性。签名是由指定的签名算法对经过 Base64 编码的头部和负载组合而成的字符串进行签名生成的。

    例如,使用 HMAC SHA-256 算法生成签名:

    HMACSHA256(
      base64UrlEncode(header) + "." +
      base64UrlEncode(payload),
      secret
    )
    

最终,JWT 是由这三个部分组成的字符串,形如 **header.payload.signature**。JWT 通常用于在网络上安全地传输信息,例如在身份验证过程中传递令牌。

1、创建项目引入依赖

040-安全开发-JavaEE应用&SpringBoot框架&JWT身份鉴权&打包部署JAR&WAR

040-安全开发-JavaEE应用&SpringBoot框架&JWT身份鉴权&打包部署JAR&WAR

com.auth0
java-jwt
3.4.0

040-安全开发-JavaEE应用&SpringBoot框架&JWT身份鉴权&打包部署JAR&WAR

2、创建JWT并配置JWT

对应目录下创建JwtController.java

// 模拟用户的JWT身份创建,数据的JWT加密
    @PostMapping("/jwtcreate")
    @ResponseBody
    public static String create(Integer id, String user, String pass) {
        /**/ 创建JWT令牌
        String jwttoken = JWT.create()
                // 设置创建的Header部分
                //.withHeader()
                // 设置创建的Payload部分
                .withClaim("userid", id)
                .withClaim("username", user)
                .withClaim("password", pass)
                // 设置时效(JWT过期时间)
                //.withExpiresAt()
                // 创建设置的Signature部分,指定算法和密钥
                .sign(Algorithm.HMAC256("xiaodisec"));**
        //打印创建好的jwt
        System.out.println(jwttoken);
        return jwttoken;
    }

3、解析JWT

//构建解密注册

JWTVerifier jwt = JWT.require(Algorithm.HMAC256(“xiaodisec”)).build();

//解密注册数据

DecodedJWT verify = jwt.verify(jwtdata);

//提取解密数据

Integer userid = verify.getClaim(“userid”).asInt();

// 模拟JWT身份的检测,JWT数据解密
    @PostMapping("/jwtcheck")
    @ResponseBody
    public static String jwtcheck(String jwtdata) {
        // 构建JWT解密注册
        **JWTVerifier jwt = JWT.require(Algorithm.HMAC256("xiaodisec")).build();**
        // 解密注册数据
        **DecodedJWT verify = jwt.verify(jwtdata);**
        // 提取注册解密数据Payload部分
        **Integer userid = verify.getClaim("userid").asInt();
        String username = verify.getClaim("username").asString();
        String password = verify.getClaim("password").asString();**
        System.out.println(userid + username + password);
        return "admin page";
        // 如果需要根据解密的数据执行不同的逻辑,可以使用以下代码进行判断
        // if (username.equals("admin")) {
        //     return "admin";
        // } else {
        //     return "gay?";
        // }
        // 提取Header部分
        // verify.getHeader();
        // 提取Sign签名部分
        // verify.getSignature();
    }
}

4、配置前端提交数据访问客户端页面

  • 在resources→static→index.html创建如下的前端页面

    
        

    hello word!!!

    this is an HTML page

    id:
    user:
    pass:
    jwtdata:

    040-安全开发-JavaEE应用&SpringBoot框架&JWT身份鉴权&打包部署JAR&WAR

  • 对应输入id,用户名,密码,点击创建得到eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJwYXNzd29yZCI6IjEyMzQ1NiIsInVzZXJpZCI6MSwidXNlcm5hbWUiOiJhZG1pbiJ9.q__DmCYaffqXmQweBgITek-NmhsSAhgwExNA3lQspQk

  • 在官网进行解密

  • 在页面对应输入对应jwtdata,进行解密

  • 跳转至解密成功页面,回显admin page

    040-安全开发-JavaEE应用&SpringBoot框架&JWT身份鉴权&打包部署JAR&WAR

    040-安全开发-JavaEE应用&SpringBoot框架&JWT身份鉴权&打包部署JAR&WAR

    040-安全开发-JavaEE应用&SpringBoot框架&JWT身份鉴权&打包部署JAR&WAR

    040-安全开发-JavaEE应用&SpringBoot框架&JWT身份鉴权&打包部署JAR&WAR

    040-安全开发-JavaEE应用&SpringBoot框架&JWT身份鉴权&打包部署JAR&WAR

    5、安全问题

    040-安全开发-JavaEE应用&SpringBoot框架&JWT身份鉴权&打包部署JAR&WAR

    1. 只有jwt编码,在jwt官网进行修改用户参数信息,没有使用密匙加密

      1. 报错令牌无效

      040-安全开发-JavaEE应用&SpringBoot框架&JWT身份鉴权&打包部署JAR&WAR

      040-安全开发-JavaEE应用&SpringBoot框架&JWT身份鉴权&打包部署JAR&WAR

      040-安全开发-JavaEE应用&SpringBoot框架&JWT身份鉴权&打包部署JAR&WAR

    2. 输入密匙,再此修改用户信息

      1. 成功登入

    040-安全开发-JavaEE应用&SpringBoot框架&JWT身份鉴权&打包部署JAR&WAR

    040-安全开发-JavaEE应用&SpringBoot框架&JWT身份鉴权&打包部署JAR&WAR

    040-安全开发-JavaEE应用&SpringBoot框架&JWT身份鉴权&打包部署JAR&WAR

    1.对于密匙进行爆破

    040-安全开发-JavaEE应用&SpringBoot框架&JWT身份鉴权&打包部署JAR&WAR

    2.未验证签名

    040-安全开发-JavaEE应用&SpringBoot框架&JWT身份鉴权&打包部署JAR&WAR

    040-安全开发-JavaEE应用&SpringBoot框架&JWT身份鉴权&打包部署JAR&WAR

    参考:https://cloud.tencent.com/developer/article/2101634

    #SpringBoot-打包部署-JAR&WAR

    参考:https://mp.weixin.qq.com/s/HyqVt7EMFcuKXfiejtfleg

    SpringBoot项目打包在linux服务器中运行:

    ①jar类型项目

    jar类型项目使用SpringBoot打包插件打包时,会在打成的jar中内置tomcat的jar。

    所以使用jdk直接运行jar即可,jar项目中功能将代码放到其内置的tomcat中运行。

    • Jar打包

      • 报错解决:https://blog.csdn.net/wobenqingfeng/article/details/129914639

        https://blog.csdn.net/Mrzhuangr/article/details/124731024

        040-安全开发-JavaEE应用&SpringBoot框架&JWT身份鉴权&打包部署JAR&WAR

      • 将true修改为**false** 即可

        • : Maven 插件配置的根元素,其中包含了配置的具体内容。
        • : 指定了 Java 应用程序的主类。在这里,com.example.testjwt.TestJwtApplication 被指定为主类,表明这是应用程序的入口点。
        • : 用于控制插件的执行是否跳过。在这里,设置为 true,表示跳过执行。这可能是因为在某些情况下,你可能希望避免执行特定插件,例如在特定配置下或者在某些阶段跳过构建过程。

          040-安全开发-JavaEE应用&SpringBoot框架&JWT身份鉴权&打包部署JAR&WAR

        • 1、maven-clean-package

        • 2、java -jar xxxxxx.jar

          040-安全开发-JavaEE应用&SpringBoot框架&JWT身份鉴权&打包部署JAR&WAR

          040-安全开发-JavaEE应用&SpringBoot框架&JWT身份鉴权&打包部署JAR&WAR

          040-安全开发-JavaEE应用&SpringBoot框架&JWT身份鉴权&打包部署JAR&WAR

          ②war类型项目

          在打包时需要将内置的tomcat插件排除,配置servlet的依赖和修改pom.xml,

          然后将war文件放到tomcat安装目录webapps下,启动运行tomcat自动解析即可。

          • War打包

            • 1、pom.xml加入或修改:

              **war**

              040-安全开发-JavaEE应用&SpringBoot框架&JWT身份鉴权&打包部署JAR&WAR

            • 2、启动类里面加入配置:

              @SpringBootApplication
              // @SpringBootApplication 注解用于标识这是一个Spring Boot应用程序的主类,它会自动扫描并加载与主类同包或子包下的组件。
              public class TestJwtApplication **extends SpringBootServletInitializer** {
                  public static void main(String[] args) {
                      // SpringApplication.run() 用于启动Spring Boot应用程序。
                      SpringApplication.run(TestJwtApplication.class, args);
                  }
                  **@Override
                  protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
                      // configure() 方法用于配置Spring Boot应用程序的构建,主要用于支持WAR文件的部署。
                      return builder.sources(TestJwtApplication.class);
                  }**
              }
              
            • 3、maven-clean-package

              040-安全开发-JavaEE应用&SpringBoot框架&JWT身份鉴权&打包部署JAR&WAR

              • 遇到报错

                040-安全开发-JavaEE应用&SpringBoot框架&JWT身份鉴权&打包部署JAR&WAR

                040-安全开发-JavaEE应用&SpringBoot框架&JWT身份鉴权&打包部署JAR&WAR

              • 4、war放置tomcat的G:\develop\apache-tomcat-9.0.27\**webapps 文件夹**后启动

                • G:\develop\apache-tomcat-9.0.27\bin运行该文件夹下的tomcat的startup.bat启动程序

                  040-安全开发-JavaEE应用&SpringBoot框架&JWT身份鉴权&打包部署JAR&WAR

                  040-安全开发-JavaEE应用&SpringBoot框架&JWT身份鉴权&打包部署JAR&WAR

                  040-安全开发-JavaEE应用&SpringBoot框架&JWT身份鉴权&打包部署JAR&WAR

                  040-安全开发-JavaEE应用&SpringBoot框架&JWT身份鉴权&打包部署JAR&WAR

                  040-安全开发-JavaEE应用&SpringBoot框架&JWT身份鉴权&打包部署JAR&WAR

                  JAVAEE源码架构:

                  无源码下载泄漏风险

                  • 无下载路径,运行的程序是一个压缩包,不能通过访问下载路径去下载源码

                    040-安全开发-JavaEE应用&SpringBoot框架&JWT身份鉴权&打包部署JAR&WAR

                    040-安全开发-JavaEE应用&SpringBoot框架&JWT身份鉴权&打包部署JAR&WAR

                    源码泄漏也需反编译

                    • 如果得到打包好的源码,将打包的源码进行解压

                      040-安全开发-JavaEE应用&SpringBoot框架&JWT身份鉴权&打包部署JAR&WAR

                      • 直接使用idea打开文件夹,即可实现自动反编译,看到源码

                        040-安全开发-JavaEE应用&SpringBoot框架&JWT身份鉴权&打包部署JAR&WAR

                        040-安全开发-JavaEE应用&SpringBoot框架&JWT身份鉴权&打包部署JAR&WAR

VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]