|
|
|
|
@ -14,7 +14,7 @@
|
|
|
|
|
inactive-action-icon="Sunny" @change="toggleDark" />
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<el-form v-if="!UseErweima" style="width: 400px;" ref="ruleFormRef" status-icon class="demo-ruleForm">
|
|
|
|
|
<el-form v-if="!UseErweima && !UseUkey" style="width: 400px;" ref="ruleFormRef" status-icon class="demo-ruleForm">
|
|
|
|
|
<el-form-item>
|
|
|
|
|
<span style="font-size: 22px;">登录您的账户</span>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
@ -38,7 +38,7 @@
|
|
|
|
|
<div style="height: 160px;"></div>
|
|
|
|
|
</el-form>
|
|
|
|
|
|
|
|
|
|
<el-form v-else style="width: 400px;" status-icon class="demo-ruleForm erweima">
|
|
|
|
|
<el-form v-if="UseErweima" style="width: 400px;" status-icon class="demo-ruleForm erweima">
|
|
|
|
|
<el-form-item>
|
|
|
|
|
<span style="font-size: 22px;">请扫描二维码登录</span>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
@ -54,7 +54,7 @@
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<div style="height: 160px;"></div>
|
|
|
|
|
</el-form>
|
|
|
|
|
<el-form style="width: 400px;" status-icon class="demo-ruleForm erweima">
|
|
|
|
|
<el-form v-if="UseUkey" id="form_xtx" name="form_xtx" style="width: 400px;" status-icon class="demo-ruleForm erweima">
|
|
|
|
|
<el-form-item>
|
|
|
|
|
<span style="font-size: 22px;">证书登录</span>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
@ -65,11 +65,14 @@
|
|
|
|
|
</el-select>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item>
|
|
|
|
|
<el-input v-model="pwd" type="password" autocomplete="off" placeholder="密码" size="large"
|
|
|
|
|
<el-input v-model="uke_pwd" type="password" autocomplete="off" placeholder="密码" size="large"
|
|
|
|
|
:prefix-icon="Lock" />
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item>
|
|
|
|
|
<el-button style="width: 100%;" @click="ukeyLogin()" size="large">登录</el-button>
|
|
|
|
|
<el-button style="width: 100%;" @click="ukeyLogin()" type="danger" size="large">登录</el-button>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item>
|
|
|
|
|
<el-button style="width: 100%;" @click="UseUkey=false;" size="large">返回账号密码</el-button>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<div style="height: 160px;"></div>
|
|
|
|
|
</el-form>
|
|
|
|
|
@ -84,7 +87,7 @@
|
|
|
|
|
|
|
|
|
|
<script setup>
|
|
|
|
|
import {
|
|
|
|
|
Login,addSignJob,XTSignCheckNotify
|
|
|
|
|
Login,addSignJob,XTSignCheckNotify,UkeyGetServeInfo,UkeyUserInfoLogin
|
|
|
|
|
} from "@/api/api.js";
|
|
|
|
|
import QRCode from 'qrcode'
|
|
|
|
|
import {
|
|
|
|
|
@ -105,8 +108,10 @@
|
|
|
|
|
useDark
|
|
|
|
|
} from "@vueuse/core";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const erweima_loading=ref(false)
|
|
|
|
|
const UseErweima=ref(false) //是否使用二维码
|
|
|
|
|
const UseUkey=ref(false) //是否使用Ukey
|
|
|
|
|
const isDark = useDark()
|
|
|
|
|
const toggleDark = () => useToggle(isDark)
|
|
|
|
|
|
|
|
|
|
@ -219,11 +224,12 @@
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//证书--------------------------------------------------------------
|
|
|
|
|
let LoginType=ref('');
|
|
|
|
|
|
|
|
|
|
let ZhengShuList = ref('');
|
|
|
|
|
let selectedZhengShuId = ref(''); //选中的id
|
|
|
|
|
let uke_pwd=ref('');
|
|
|
|
|
const useUkey= ()=>{
|
|
|
|
|
LoginType.value='ukey'
|
|
|
|
|
UseUkey.value=true
|
|
|
|
|
let list = xtxsync.SOF_GetUserList()
|
|
|
|
|
console.log('证书列表 SOF_GetVersion', list) //获取证书列表
|
|
|
|
|
const arr = list.split('&&&').slice(0, -1);
|
|
|
|
|
@ -234,8 +240,30 @@
|
|
|
|
|
value
|
|
|
|
|
};
|
|
|
|
|
});
|
|
|
|
|
UkeyGetServeInfoAction()
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
let serverInfo=ref('');
|
|
|
|
|
const UkeyGetServeInfoAction=()=>{
|
|
|
|
|
UkeyGetServeInfo().then(res=>{
|
|
|
|
|
if(res.status){
|
|
|
|
|
serverInfo.value=res.data.serve_info
|
|
|
|
|
if(serverInfo.value.random && serverInfo.value.signData && serverInfo.value.serverCert){
|
|
|
|
|
return true
|
|
|
|
|
}else{
|
|
|
|
|
return ElMessage.error('获取服务器信息失败')
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
const ukeyLogin=()=>{
|
|
|
|
|
if(selectedZhengShuId.value==''){
|
|
|
|
|
return ElMessage.error('请选择证书')
|
|
|
|
|
}
|
|
|
|
|
if(uke_pwd.value==''){
|
|
|
|
|
return ElMessage.error('请输入证书密码')
|
|
|
|
|
}
|
|
|
|
|
console.log(selectedZhengShuId.value);
|
|
|
|
|
//获取服务器随机数
|
|
|
|
|
let randomStr=xtxsync.GenerateRandom(16);
|
|
|
|
|
@ -243,6 +271,62 @@
|
|
|
|
|
//服务器对随机数签名
|
|
|
|
|
let randomStrSign=xtxsync.SignedData(selectedZhengShuId.value,randomStr);
|
|
|
|
|
console.log(randomStrSign);
|
|
|
|
|
|
|
|
|
|
//----自己获取的
|
|
|
|
|
//var strServerSignedData="MEUCIQCOxI79/PFbZiA+tz+PhejhBX8dQn+IvUhA3J/gxD3TygIgT8sPpdr2OqQPUkBUJ3TzF2UiJMu2/WQbAjbi3FBPMN4="
|
|
|
|
|
//var strServerRan = "4sXyN2iip6PeTj3n16iRsA=="
|
|
|
|
|
//var strServerCert ="MIIEazCCBBCgAwIBAgIKGhAAAAAAIA/MZDAKBggqgRzPVQGDdTBEMQswCQYDVQQGEwJDTjENMAsGA1UECgwEQkpDQTENMAsGA1UECwwEQkpDQTEXMBUGA1UEAwwOQmVpamluZyBTTTIgQ0EwHhcNMjMwNzAyMTYwMDAwWhcNMjYwNzAzMTU1OTU5WjCBgDELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAiIiMQswCQYDVQQHDAIiIjEPMA0GA1UECgwG5YWo5oC7MRIwEAYDVQQLDAnmtYvor5Xpg6gxGzAZBgNVBAMMEuWFqOaAu+a1i+ivleivgeS5pjEVMBMGA1UEKQwMMTExMTExMjIzMTIzMFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAEiSiGTJ/XbzT7W+SKm7cOp0KAK6S9ZXKHJqVGDefI4UK0+CaUJGJbjYN1HoSu82/M/VTHQg6VAi37iqXyrwLMqaOCAqswggKnMB8GA1UdIwQYMBaAFB/mz9SPxSIql0opihXnFsmSNMS2MB0GA1UdDgQWBBRYIKlLw6Mb3ggWoOsF8YLiF7q6WzAOBgNVHQ8BAf8EBAMCBsAwgaMGA1UdHwSBmzCBmDBgoF6gXKRaMFgxCzAJBgNVBAYTAkNOMQ0wCwYDVQQKDARCSkNBMQ0wCwYDVQQLDARCSkNBMRcwFQYDVQQDDA5CZWlqaW5nIFNNMiBDQTESMBAGA1UEAxMJY2EyMWNybDMwMDSgMqAwhi5odHRwOi8vdGVzdC5iamNhLm9yZy5jbjo4MDAzL2NybC9jYTIxY3JsMzAuY3JsMB4GCiqBHIbvMgIBAQEEEAwOSkoxMTExMTEyMjMxMjMwYAYIKwYBBQUHAQEEVDBSMCMGCCsGAQUFBzABhhdPQ1NQOi8vb2NzcC5iamNhLm9yZy5jbjArBggrBgEFBQcwAoYfaHR0cDovL2NybC5iamNhLm9yZy5jbi9jYWlzc3VlcjBABgNVHSAEOTA3MDUGCSqBHIbvMgICATAoMCYGCCsGAQUFBwIBFhpodHRwOi8vd3d3LmJqY2Eub3JnLmNuL2NwczARBglghkgBhvhCAQEEBAMCAP8wHAYKKoEchu8yAgEBCAQODAwxMTExMTEyMjMxMjMwHgYKKoEchu8yAgECAgQQDA5KSjExMTExMTIyMzEyMzAfBgoqgRyG7zICAQEOBBEMDzk5ODAwMDEwMDkyNDQ0OTAeBgoqgRyG7zICAQEEBBAMDkpKMTExMTExMjIzMTIzMCcGCiqBHIbvMgIBARcEGQwXMUAyMTUwMDlKSjAxMTExMTEyMjMxMjMwGgYIKoEc0BQEAQQEDgwMMTExMTExMjIzMTIzMBQGCiqBHIbvMgIBAR4EBgwEMTA1MDAKBggqgRzPVQGDdQNJADBGAiEAieGsHBwvSeYSrGlK8OCO73lk2B8xP1Hu2OpuHp8AswICIQC7T5jjMXpNMdYA6zZRO1mU61to9uW4UmRjnIgg6GX6GA=="
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//服务器随机数 4sXyN2iip6PeTj3n16iRsA==
|
|
|
|
|
//签名后的 值 MEUCIQCOxI79/PFbZiA+tz+PhejhBX8dQn+IvUhA3J/gxD3TygIgT8sPpdr2OqQPUkBUJ3TzF2UiJMu2/WQbAjbi3FBPMN4=
|
|
|
|
|
//服务器证书 MIIEazCCBBCgAwIBAgIKGhAAAAAAIA/MZDAKBggqgRzPVQGDdTBEMQswCQYDVQQGEwJDTjENMAsGA1UECgwEQkpDQTENMAsGA1UECwwEQkpDQTEXMBUGA1UEAwwOQmVpamluZyBTTTIgQ0EwHhcNMjMwNzAyMTYwMDAwWhcNMjYwNzAzMTU1OTU5WjCBgDELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAiIiMQswCQYDVQQHDAIiIjEPMA0GA1UECgwG5YWo5oC7MRIwEAYDVQQLDAnmtYvor5Xpg6gxGzAZBgNVBAMMEuWFqOaAu+a1i+ivleivgeS5pjEVMBMGA1UEKQwMMTExMTExMjIzMTIzMFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAEiSiGTJ/XbzT7W+SKm7cOp0KAK6S9ZXKHJqVGDefI4UK0+CaUJGJbjYN1HoSu82/M/VTHQg6VAi37iqXyrwLMqaOCAqswggKnMB8GA1UdIwQYMBaAFB/mz9SPxSIql0opihXnFsmSNMS2MB0GA1UdDgQWBBRYIKlLw6Mb3ggWoOsF8YLiF7q6WzAOBgNVHQ8BAf8EBAMCBsAwgaMGA1UdHwSBmzCBmDBgoF6gXKRaMFgxCzAJBgNVBAYTAkNOMQ0wCwYDVQQKDARCSkNBMQ0wCwYDVQQLDARCSkNBMRcwFQYDVQQDDA5CZWlqaW5nIFNNMiBDQTESMBAGA1UEAxMJY2EyMWNybDMwMDSgMqAwhi5odHRwOi8vdGVzdC5iamNhLm9yZy5jbjo4MDAzL2NybC9jYTIxY3JsMzAuY3JsMB4GCiqBHIbvMgIBAQEEEAwOSkoxMTExMTEyMjMxMjMwYAYIKwYBBQUHAQEEVDBSMCMGCCsGAQUFBzABhhdPQ1NQOi8vb2NzcC5iamNhLm9yZy5jbjArBggrBgEFBQcwAoYfaHR0cDovL2NybC5iamNhLm9yZy5jbi9jYWlzc3VlcjBABgNVHSAEOTA3MDUGCSqBHIbvMgICATAoMCYGCCsGAQUFBwIBFhpodHRwOi8vd3d3LmJqY2Eub3JnLmNuL2NwczARBglghkgBhvhCAQEEBAMCAP8wHAYKKoEchu8yAgEBCAQODAwxMTExMTEyMjMxMjMwHgYKKoEchu8yAgECAgQQDA5KSjExMTExMTIyMzEyMzAfBgoqgRyG7zICAQEOBBEMDzk5ODAwMDEwMDkyNDQ0OTAeBgoqgRyG7zICAQEEBBAMDkpKMTExMTExMjIzMTIzMCcGCiqBHIbvMgIBARcEGQwXMUAyMTUwMDlKSjAxMTExMTEyMjMxMjMwGgYIKoEc0BQEAQQEDgwMMTExMTExMjIzMTIzMBQGCiqBHIbvMgIBAR4EBgwEMTA1MDAKBggqgRzPVQGDdQNJADBGAiEAieGsHBwvSeYSrGlK8OCO73lk2B8xP1Hu2OpuHp8AswICIQC7T5jjMXpNMdYA6zZRO1mU61to9uW4UmRjnIgg6GX6GA==
|
|
|
|
|
|
|
|
|
|
var strServerSignedData=serverInfo.value.signData
|
|
|
|
|
var strServerRan =serverInfo.value.random
|
|
|
|
|
var strServerCert =serverInfo.value.serverCert
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var bRet = xtxLogin("form_xtx", selectedZhengShuId.value, uke_pwd.value,strServerCert,strServerRan,strServerSignedData);
|
|
|
|
|
console.log(bRet)
|
|
|
|
|
if (bRet) {
|
|
|
|
|
//如果前端教研成功
|
|
|
|
|
|
|
|
|
|
console.log('前端校验成功')
|
|
|
|
|
UkeyUserInfoLoginAction()
|
|
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
console.log('ukey登录失败')
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
|
const UkeyUserInfoLoginAction=()=>{
|
|
|
|
|
|
|
|
|
|
var UserCert= document.getElementsByName('UserCert')
|
|
|
|
|
var UserSignedData= document.getElementsByName('UserSignedData')
|
|
|
|
|
var ukey_userid=xtxsync.GetCertEntity(UserCert[0].value)//获取证书唯一标识
|
|
|
|
|
var data={
|
|
|
|
|
ukey_userid:ukey_userid,
|
|
|
|
|
cliCert:UserCert[0].value ,
|
|
|
|
|
sign:UserSignedData[0].value,
|
|
|
|
|
oridata:serverInfo.value.random,
|
|
|
|
|
}
|
|
|
|
|
UkeyUserInfoLogin(data).then(res=>{
|
|
|
|
|
if(res.status){
|
|
|
|
|
sessionStorage.setItem('token', res.data.token);
|
|
|
|
|
sessionStorage.setItem('refreshToken', res.data.refresh_token);
|
|
|
|
|
// sessionStorage.setItem('tk', JSON.stringify(res.data.tk));
|
|
|
|
|
var token = sessionStorage.getItem('token');
|
|
|
|
|
if (token == res.data.token) {
|
|
|
|
|
window.location.href = "./#/dashboard"
|
|
|
|
|
}
|
|
|
|
|
}else{
|
|
|
|
|
return ElMessage.error(res.msg)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|