HarmonyOS鸿蒙Next中ArkTS实现JWT

HarmonyOS鸿蒙Next中ArkTS实现JWT 有arkts 实现jwt的代码案例吗?

3 回复

可以使用三方库:[@ohos/jsonwebtoken](https://gitcode.com/openharmony-sig/ohos_jsonwebtoken)

更多关于HarmonyOS鸿蒙Next中ArkTS实现JWT的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,ArkTS可通过第三方库实现JWT。使用@ohos/jwt库进行编码和解码,支持HS256等算法。生成token需指定payload和密钥,验证时解析并校验签名有效性。注意依赖库版本兼容性。

以下是ArkTS实现JWT的简单代码示例,包含生成和验证JWT的功能:

import crypto from '@ohos.security.crypto';
import util from '@ohos.util';

// 生成JWT
function generateJWT(payload: object, secret: string): string {
  const header = {
    alg: 'HS256',
    typ: 'JWT'
  };
  
  const headerBase64 = util.base64Encode(JSON.stringify(header));
  const payloadBase64 = util.base64Encode(JSON.stringify(payload));
  const signatureInput = `${headerBase64}.${payloadBase64}`;
  
  // 使用HMAC-SHA256生成签名
  const mac = crypto.createMac('SHA256');
  mac.init({ key: secret });
  mac.update(signatureInput);
  const signature = util.base64Encode(mac.doFinal());
  
  return `${headerBase64}.${payloadBase64}.${signature}`;
}

// 验证JWT
function verifyJWT(token: string, secret: string): boolean {
  const parts = token.split('.');
  if (parts.length !== 3) return false;
  
  const [headerBase64, payloadBase64, signature] = parts;
  const signatureInput = `${headerBase64}.${payloadBase64}`;
  
  // 重新计算签名进行验证
  const mac = crypto.createMac('SHA256');
  mac.init({ key: secret });
  mac.update(signatureInput);
  const expectedSignature = util.base64Encode(mac.doFinal());
  
  return signature === expectedSignature;
}

// 使用示例
const payload = { userId: 123, exp: Date.now() + 3600 };
const secret = 'your-secret-key';
const token = generateJWT(payload, secret);
console.log('Generated JWT:', token);

const isValid = verifyJWT(token, secret);
console.log('Token valid:', isValid);

注意:实际使用时需要处理base64编码的URL安全格式,并添加必要的错误处理机制。

回到顶部