首页 > 其他分享 >日常记录-GoogleASuth 认证

日常记录-GoogleASuth 认证

时间:2024-07-20 08:57:39浏览次数:10  
标签:return String GoogleASuth param 认证 日常 new import com

 

1. 依赖
<!--googleauth-->
<dependency>
        <groupId>com.warrenstrange</groupId>
        <artifactId>googleauth</artifactId>
        <version>1.4.0</version>
</dependency>
<dependency>
        <groupId>com.google.zxing</groupId>
        <artifactId>javase</artifactId>
        <version>3.2.1</version>
</dependency>

2.工具类
import com.google.zxing.BarcodeFormat;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.WriterException;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.warrenstrange.googleauth.*;
import sun.misc.BASE64Encoder;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;

/**
 * GoogleAuth 工具类
 */
public class GoogleAuthUtil {

    /**
     * 生成GoogleAuth_key
     *
     * @return coogleAuth_key
     */
    public static String createGoogleAuthKey() {
        GoogleAuthenticator gAuth = new GoogleAuthenticator();
        GoogleAuthenticatorKey credentials = gAuth.createCredentials();
        return credentials.getKey();
    }

    /**
     * 令牌验证
     *
     * @param googleAuthKey GoogleAuth_key
     * @param secretCode    验证码
     */

    public static void auth(String googleAuthKey, String secretCode) {
        GoogleAuthenticator gAuth = new GoogleAuthenticator();
        boolean authorize = gAuth.authorize(googleAuthKey, Integer.parseInt(secretCode));
        if (!authorize) {
            throw new IllegalArgumentException("googleAuth authentication failed!");
        }
    }

    /**
     * 生成二维码
     *
     * @param account   账户信息(展示在Google Authenticator App中的)
     * @param secretKey 密钥
     * @param title     标题 (展示在Google Authenticator App中的)
     **/
    public static String createBase64QRCode(String account, String secretKey, String title) {
        try {
            BitMatrix matrix = new MultiFormatWriter().encode(concatenationScanQRCodeString(account, secretKey, title), BarcodeFormat.QR_CODE, 104, 104);
            BufferedImage bufferedImage = MatrixToImageWriter.toBufferedImage(matrix);
            ByteArrayOutputStream bof = new ByteArrayOutputStream();
            ImageIO.write(bufferedImage, "png", bof);
            String base64 = imageToBase64(bof.toByteArray());
            return base64;
        } catch (WriterException e) {
            throw new IllegalArgumentException("create QR code failed!");
        } catch (UnsupportedEncodingException e) {
            throw new IllegalArgumentException("create QR code failed!");
        } catch (IOException e) {
            throw new IllegalArgumentException("create QR code failed!");
        }
    }

    /**
     * 生成绑定二维码(字符串)
     *
     * @param account   账户信息(展示在Google Authenticator App中的)
     * @param secretKey 密钥
     * @param title     标题 (展示在Google Authenticator App中的)
     * @return 绑定二维码字符串
     */
    public static String concatenationScanQRCodeString(String account, String secretKey, String title) {
        String url = "otpauth://totp/%s?secret=%s&issuer=%s";
        return String.format(url, title + "%3A" + account, secretKey, title);
    }

    /**
     * 将图片文件转换成base64字符串,参数为该图片的路径
     *
     * @param dataBytes
     * @return java.lang.String
     */
    private static String imageToBase64(byte[] dataBytes) {
        // 对字节数组Base64编码
        BASE64Encoder encoder = new BASE64Encoder();
        if (dataBytes != null) {
            return "data:image/jpeg;base64," + encoder.encode(dataBytes);// 返回Base64编码过的字节数组字符串
        }
        return null;
    }

    //测试用例
    public static void main(String args[]) {
        //生成一次密钥即可
        //String savedSecret = GoogleAuthUtil.createGoogleAuthKey();
        //System.out.println("秘钥:" + savedSecret);
        //校验
   /*     Boolean auth = GoogleAuthUtil.authSecretCode("6KJKN3WZYUVWV55W", 557180);
        System.out.println(auth);*/

        String base64QRCode = createBase64QRCode("sstest05", "MEC4Z57GW57VU67Q", "sssss");
        System.err.println(base64QRCode);
    }
}

 

标签:return,String,GoogleASuth,param,认证,日常,new,import,com
From: https://blog.csdn.net/CSDN20230104/article/details/140531780

相关文章

  • swagger 日常使用记录
    swagger相关依赖:    <!--swagger-->    <dependency>      <groupId>io.springfox</groupId>      <artifactId>springfox-swagger2</artifactId>      <version>2.9.2</version>    </......
  • 全网最详细保姆式讲解-汽车电子测试和认证标准科普解析(二)
    这些是汽车电子设备的常见电磁兼容性(EMC)和环境测试标准。以下是每个标准的简要说明:RE,CE(CISPR25,GB18655)RE(RadiatedEmission,辐射发射):测量设备辐射的电磁能量,防止其干扰其他电子设备。CE(ConductedEmission,传导发射):测量设备通过导线传导的电磁能量,防止其干扰......
  • 日常工作中需要避免的9个React坏习惯
    日常工作中需要避免的9个React坏习惯前言React是前端开发领域中最受欢迎的JavaScript库之一,但有时候在编写React应用程序时,可能陷入一些不佳的习惯和错误做法。这些不佳的习惯可能导致性能下降、代码难以维护,以及其他问题。在本文中,我们将探讨日常工作中应该避免的9个坏React......
  • IDEA社区版搭建Spring工程(05-集成Shiro认证)
    官方文档WhatisApacheShiro?ApacheShiroisapowerfulandeasytouseJavasecurityframeworkthatoffersdevelopersanintuitiveyetcomprehensivesolutiontoauthentication,authorization,cryptography,andsessionmanagement.Inpracticalterms,itach......
  • 参加DevSecOps认证培训 ,掌握安全高效的软件开发
    在当今快速发展的数字化时代,软件安全已成为企业关注的焦点。DevSecOps,这一融合了开发(Dev)、安全(Sec)和运维(Ops)的创新实践,正引领着软件开发的新潮流。现在,我们为您带来了一门全面的DevSecOps认证课程,旨在帮助您和您的团队在保障安全的同时,提升软件开发的效率和质量。一、DevSecOp......
  • JavaScript手机号实名认证接口如何集成 验证手机号与持有人是否一致
    手机号实名认证接口是一种用于验证手机号码是否存在的实名登记服务,能够核验三大运营商(中国移动、中国电信、中国联通)手机号码的实名认证状态,通常被应用于网站、电商平台注册、支付平台注册等场景中,以便于核验用户身份的真伪,以此来保障用户身份信息与财产不受损失!随着市场......
  • GESP编程能力等级认证C++编程真题解析 | 2024年3月五级
    学习C++从娃娃抓起!记录下CCF-GESP备考学习过程中的题目,记录每一个瞬间。附上汇总贴:GESP编程能力等级认证C++编程真题解析|汇总单选题第1题唯一分解定理描述的内容是()?A.任意整数都可以分解为素数的乘积B.每个合数都可以唯一分解为一系列素数的乘积C.两个不同的......
  • 安全可信 | 通过多项评估认证!天翼云与业界伙伴共谋云上安全发展!
    近日,由全球数字经济大会组委会主办,中国信息通信研究院(以下简称中国信通院)与中国通信标准化协会联合承办的2024全球数字经济大会云和软件安全论坛暨第二届SecGo云和软件安全大会在北京召开。本届论坛聚焦云和软件安全最新发展趋势,以“链接云端,可信而安”为主题,为产业界提供丰富多......
  • ClickHouse集成LDAP实现简单的用户认证
    1.这里我的ldap安装的是docker版的docker安装的化就yum就好了sudoyuminstalldocker-cedocker-ce-clicontainerd.iodocker-buildx-plugindocker-compose-pluginsudosystemctlstartdocker使用下面的命令验证sudodockerrunhello-worlddockerpullosixia/open......
  • 【第3章】Spring Cloud之Nacos服务端权限认证
    文章目录前言一、默认控制台登录页二、鉴权1.相关参数2.服务端开启鉴权2.1开启鉴权2.2自定义密钥3.开启服务身份识别功能4.开启Token缓存功能三、效果四、用户列表总结前言上一章我们访问了控制台,这里为了安全我们开启Nacos的权限认证。一、默认控制台登录......