diff --git a/.env b/.env index 4894efd..d4c866d 100644 --- a/.env +++ b/.env @@ -16,9 +16,14 @@ VITE_API_URL = /api # ADMIN 服务地址 VITE_ADMIN_PROXY_PATH = http://scj-v3.zhxy.link/ -# 前端加密密钥 +# 前端加密密钥(AES,未启用 SM2 时使用) VITE_PWD_ENC_KEY='pigxpigxpigxpigx' +# 登录使用 SM2 加密密码:设为 true 时密码用 SM2 公钥加密,需后端配置 security.sm2-private-key +VITE_LOGIN_SM2_ENABLE=true +# SM2 公钥(十六进制,04 开头 130 字符),与后端私钥成对 +VITE_SM2_PUBLIC_KEY=04de67d5234bb13b5bbe524a71d1e48ac302014be3c3c6ba74b33bb5a125717b0e8873ad3971a6082138e0556a7ec334d460458c6c46753b65acc93ec1b99bb8fd + # OAUTH2 密码模式客户端信息 VITE_OAUTH2_PASSWORD_CLIENT='pig:pig' diff --git a/src/api/admin/audit.ts b/src/api/admin/audit.ts index e42519d..554a61e 100644 --- a/src/api/admin/audit.ts +++ b/src/api/admin/audit.ts @@ -1,11 +1,12 @@ import request from '/@/utils/request'; export function fetchList(query?: Object) { - return request({ - url: '/admin/audit/page', - method: 'get', - params: query, - }); + // return request({ + // url: '/admin/audit/page', + // method: 'get', + // params: query, + // }); + return null } export function getObj(id?: string) { diff --git a/src/api/login/index.ts b/src/api/login/index.ts index f1df6f4..167f009 100644 --- a/src/api/login/index.ts +++ b/src/api/login/index.ts @@ -2,7 +2,7 @@ import request from '/@/utils/request'; import { Session } from '/@/utils/storage'; import { validateNull } from '/@/utils/validate'; import { useUserInfo } from '/@/stores/userInfo'; -import other from '/@/utils/other'; +import other, { sm2Encrypt } from '/@/utils/other'; /** * https://www.ietf.org/rfc/rfc6749.txt @@ -10,6 +10,11 @@ import other from '/@/utils/other'; */ const FORM_CONTENT_TYPE = 'application/x-www-form-urlencoded'; +/** 登录是否使用 SM2 加密密码(需后端配置 SM2 私钥并支持 Enc-Flag: sm2) */ +const LOGIN_SM2_ENABLE = import.meta.env.VITE_LOGIN_SM2_ENABLE === 'true'; +/** SM2 公钥(十六进制,与后端私钥成对),用于前端加密密码 */ +const SM2_PUBLIC_KEY = import.meta.env.VITE_SM2_PUBLIC_KEY || ''; + // 登录方式 export enum LoginTypeEnum { PASSWORD, @@ -47,8 +52,15 @@ export enum SocialLoginEnum { export const login = (data: any) => { const basicAuth = 'Basic ' + window.btoa(import.meta.env.VITE_OAUTH2_PASSWORD_CLIENT); Session.set('basicAuth', basicAuth); - // 密码加密 - const encPassword = other.encryption(data.password, import.meta.env.VITE_PWD_ENC_KEY); + let encPassword: string; + let encFlag: string; + if (LOGIN_SM2_ENABLE && SM2_PUBLIC_KEY) { + encPassword = sm2Encrypt(data.password, SM2_PUBLIC_KEY); + encFlag = 'sm2'; + } else { + encPassword = other.encryption(data.password, import.meta.env.VITE_PWD_ENC_KEY); + encFlag = 'false'; + } const { username, randomStr, code, grant_type, scope } = data; return request({ url: '/auth/oauth2/token', @@ -59,7 +71,7 @@ export const login = (data: any) => { skipToken: true, Authorization: basicAuth, 'Content-Type': FORM_CONTENT_TYPE, - "Enc-Flag": "false", + 'Enc-Flag': encFlag, }, }); }; diff --git a/src/components/tools/commondict.vue b/src/components/tools/commondict.vue index a5abb9c..ff623d1 100644 --- a/src/components/tools/commondict.vue +++ b/src/components/tools/commondict.vue @@ -17,7 +17,7 @@