login-rsa.js 798 B

123456789101112131415161718192021222324252627
  1. import JSEncrypt from 'jsencrypt'
  2. import { get } from './request.js'
  3. /**
  4. * 对齐 web-admin `buildWebEncryptedLoginBody`:
  5. * 拉公钥后加密 { username, password, ts }。
  6. * @returns {Promise<{ encryptedLogin: string }>}
  7. */
  8. export async function buildEncryptedLoginBody(username, password) {
  9. const data = await get('/web/auth/login-rsa-public-key')
  10. const publicKeyPem = data && data.publicKeyPem
  11. if (!publicKeyPem) {
  12. throw new Error('获取登录公钥失败')
  13. }
  14. const crypt = new JSEncrypt()
  15. crypt.setPublicKey(publicKeyPem)
  16. const payload = JSON.stringify({
  17. username,
  18. password,
  19. ts: Date.now()
  20. })
  21. const encryptedLogin = crypt.encrypt(payload)
  22. if (!encryptedLogin) {
  23. throw new Error('登录加密失败,请重试')
  24. }
  25. return { encryptedLogin }
  26. }