Newer
Older
safe_production_front / public / smGateway / authen.js
dutingting on 27 Nov 9 KB sm网关集成
import { ElMessage } from 'element-plus'
import JIT_GW_ExtInterface from '/public/smGateway/pnxclient.js'

/* eslint-disable */
var JIT_AUTHEN = (function () {
  // initParam:PNX初始化参数,数据可从网关系统:认证管理->Key类型管理中导出
  var initParam =
    '<?xml version="1.0" encoding="utf-8"?>' +
    '<authinfo><liblist>' +
    '<lib type="CSP" version="1.0" dllname="" ><algid val="SHA1" sm2_hashalg="sm3"/></lib>' + //软证书
    '<lib type="SKF" version="1.1" dllname="U0tGQVBJMjAwNzkuZGxs" ><algid val="SHA1" sm2_hashalg="sm3"/></lib>' + //SKFAPI20079.dll			海泰20079
    '</liblist><checkkeytimes><item times="1" ></item></checkkeytimes></authinfo>'

  //请求随机数地址
  var randomUrl = `${window.localStorage.getItem('baseURL')}/jitGWRandom`
  //请求p7认证地址
  var P7certAuthUrl = `${window.localStorage.getItem('baseURL')}/jitGWAuthP7`
  //请求p1认证地址
  // var P1certAuthUrl = "http://127.0.0.1:8082/jitGWAuthP1";
  var P1certAuthUrl = `${window.localStorage.getItem('baseURL')}/jitGWAuthP1`

  return {
    InitParam: initParam,
    //请求生成随机数
    random: function () {
      var randomResult = ''
      $.ajax({
        url: randomUrl,
        type: 'post',
        async: false,
        data: '',
        success: function (data) {
          randomResult = data
        },
        error: function () {},
        datatype: 'json'
      })
      return randomResult
    },

    //请求p7认证方法
    P7certAuth: function (random, signed_data) {
      var authResult = ''
      $.ajax({
        url: P7certAuthUrl,
        type: 'post',
        async: false,
        data: { random: random, signed_data: signed_data },
        success: function (data) {
          authResult = data
        },
        error: function () {},
        datatype: 'json'
      })
      return authResult
    },

    //请求p1认证
    P1certAuth: function (random, signed_data, certBase64, hashAlg) {
      var authResult = ''
      $.ajax({
        url: P1certAuthUrl,
        type: 'post',
        async: false,
        data: {
          random: random,
          signed_data: signed_data,
          certBase64: certBase64,
          hashAlg: hashAlg
        },
        success: function (data) {
          authResult = data
        },
        error: function () {},
        datatype: 'json'
      })
      return authResult
    },

    //p7方式签名数据处理
    AuthP7Sign: function (random) {
      // 调用网关工具脚本中的detachSignStr(P7)进行签名,并返回签名结果
      var sign_Result = ''
      try {
        //用于判断插件是否可用(可选)
        JIT_GW_ExtInterface.GetVersion();
      } catch (e) {
        alert("未安装控件,请进行安装控件");
      }
      try {
        //清理过滤条件(可选)
        JIT_GW_ExtInterface.ClearFilter()
        // 初始化KEY信息
        JIT_GW_ExtInterface.Initialize('', initParam)
        // 控制证书为一个时,不弹出证书选择框(可选)
        JIT_GW_ExtInterface.SetChooseSingleCert(1)
        // 添加过滤条件,颁发者过滤、同DN时SM2优先级设置等(可选)
        //同DN情况下优先使用sm2证书
        // JIT_GW_ExtInterface.AddFilter(11,"2");
        //强制弹PIN码(可选)
        //JIT_GW_ExtInterface.SetForcePinDialog(0);
      } catch (e) {
        // alert('调用方法失败:' + JIT_GW_ExtInterface.GetLastErrorMessage())
        ElMessage.warning('调用方法失败:' + JIT_GW_ExtInterface.GetLastErrorMessage())
      }
      try {
        // 原文做P7签名
        sign_Result = JIT_GW_ExtInterface.P7SignString(random, true, true)
      } catch (e) {
        // alert('生成签名信息失败:' + JIT_GW_ExtInterface.GetLastErrorMessage())
        ElMessage.warning('生成签名信息失败:' + JIT_GW_ExtInterface.GetLastErrorMessage())
      }
      if (JIT_GW_ExtInterface.GetLastError() != 0) {
        if (
          JIT_GW_ExtInterface.GetLastError() == 3758096386 ||
          JIT_GW_ExtInterface.GetLastError() == 2148532334 ||
          JIT_GW_ExtInterface.GetLastError() == 3758096385
        ) {
          // alert('用户取消操作')
          ElMessage.info('用户取消操作')
      } else if (
          JIT_GW_ExtInterface.GetLastError() == -536870815 ||
          JIT_GW_ExtInterface.GetLastError() == 3758096481
        ) {
          alert('没有找到有效的证书,如果使用的是KEY,请确认已经插入key')
          // ElMessage.warning('没有找到有效的证书,如果使用的是KEY,请确认已经插入key')
        } else {
          alert(JIT_GW_ExtInterface.GetLastErrorMessage())
        }
      }
      // 释放签名对象
      JIT_GW_ExtInterface.Finalize()
      // 返回签名结果
      return sign_Result
    },

    //p7带证书下拉框方式的签名数据处理
    AuthP7Sign_certSelect: function (authContent, certsn) {
      var sign_Result = ''
      try {
        // 用于判断插件是否可用(可选)
        JIT_GW_ExtInterface.GetVersion()
      } catch (e) {
        alert('未安装控件,请进行安装控件')
        window.location.href = '/PNXClient.exe'
      }
      try {
        //清理过滤条件(可选)
        JIT_GW_ExtInterface.ClearFilter()
        // 初始化KEY信息
        JIT_GW_ExtInterface.Initialize('', initParam)
        //下拉框参考Cert_Select方法
        // 根据SN过滤唯一证书
        JIT_GW_ExtInterface.AddFilter(1, certsn)
        // 设置单证书不弹出对话框
        JIT_GW_ExtInterface.SetChooseSingleCert(1)
        //强制弹PIN码(可选)
        JIT_GW_ExtInterface.SetForcePinDialog(0)
      } catch (e) {
        alert('调用方法失败:' + JIT_GW_ExtInterface.GetLastErrorMessage())
      }
      try {
        // 原文做P7签名
        sign_Result = JIT_GW_ExtInterface.P7SignString(authContent, true, true)
      } catch (e) {
        alert('生成签名信息失败:' + JIT_GW_ExtInterface.GetLastErrorMessage())
      }
      if (JIT_GW_ExtInterface.GetLastError() != 0) {
        if (
          JIT_GW_ExtInterface.GetLastError() == 3758096386 ||
          JIT_GW_ExtInterface.GetLastError() == 2148532334 ||
          JIT_GW_ExtInterface.GetLastError() == 3758096385
        ) {
          alert('用户取消操作')
        } else if (
          JIT_GW_ExtInterface.GetLastError() == -536870815 ||
          JIT_GW_ExtInterface.GetLastError() == 3758096481
        ) {
          alert('没有找到有效的证书,如果使用的是KEY,请确认已经插入key')
        } else {
          alert(JIT_GW_ExtInterface.GetLastErrorMessage())
        }
      }
      // 释放签名对象
      JIT_GW_ExtInterface.Finalize()
      // 返回签名结果对象
      return sign_Result
    },

    //p1带证书下拉框方式的签名数据处理
    AuthP1Sign_certSelect: function (random, certsn, pin) {
      var sign_ResultObj = ''
      try {
        // 用于判断插件是否可用(可选)
        JIT_GW_ExtInterface.GetVersion()
      } catch (e) {
        alert('未安装控件,请进行安装控件')
        window.location.href = '/PNXClient.exe'
      }
      try {
        //清理过滤条件(可选)
        JIT_GW_ExtInterface.ClearFilter()
        // 初始化KEY信息
        JIT_GW_ExtInterface.Initialize('', initParam)
      } catch (e) {
        alert('调用方法失败:' + JIT_GW_ExtInterface.GetLastErrorMessage())
      }
      //下拉框展示部分参考p1Select方法
      try {
        // 原文做P1签名
        var signobj = JIT_GW_ExtInterface.P1SignWithPin(certsn, pin, random)
        sign_ResultObj = JSON.parse(signobj)
        if (sign_ResultObj.result != 0) {
          if (sign_ResultObj.remainretrycount < 0) {
            var errorMessage = JIT_GW_ExtInterface.GetLastErrorMessage()
            alert(errorMessage)
          } else {
            alert(
              '输入的pin码不正确,还剩余' +
                sign_ResultObj.remainretrycount +
                '次重试次数'
            )
          }
        }
      } catch (e) {
        alert('生成签名信息失败:' + JIT_GW_ExtInterface.GetLastErrorMessage())
      }
      if (JIT_GW_ExtInterface.GetLastError() != 0) {
        if (
          JIT_GW_ExtInterface.GetLastError() == 3758096386 ||
          JIT_GW_ExtInterface.GetLastError() == 2148532334 ||
          JIT_GW_ExtInterface.GetLastError() == 3758096385
        ) {
          alert('用户取消操作')
        } else if (
          JIT_GW_ExtInterface.GetLastError() == -536870815 ||
          JIT_GW_ExtInterface.GetLastError() == 3758096481
        ) {
          alert('没有找到有效的证书,如果使用的是KEY,请确认已经插入key')
        } else {
          alert(JIT_GW_ExtInterface.GetLastErrorMessage())
        }
      }
      // 释放签名对象
      JIT_GW_ExtInterface.Finalize()
      // 返回签名结果对象
      return sign_ResultObj
    },

    //获取证书列表
    getCertList: function () {
      // 初始化KEY信息
      JIT_GW_ExtInterface.Initialize('', initParam)
      // 添加过滤条件,颁发者过滤、同DN时SM2优先级设置等(可选)
      //同DN情况下优先使用sm2证书
      // JIT_GW_ExtInterface.AddFilter(11,"2");
      // 获取证书列表
      var cert = JIT_GW_ExtInterface.GetCertList()
      var arr = cert.split('\r\n')
      var options = []
      for (var i = 0; i < arr.length; i++) {
        var option = {}
        var ele = arr[i]
        var n = ele.lastIndexOf(' ')
        var dn = ele.substr(0, n)
        var sn = ele.substr(n + 1)
        option.sn = sn
        option.dn = dn
        options.push(option)
      }
      // 释放签名对象
      JIT_GW_ExtInterface.Finalize()
      return options
    }
  }
})()

export default JIT_AUTHEN