HarmonyOS 鸿蒙Next系统生成jwt签名程序问题

HarmonyOS 鸿蒙Next系统生成jwt签名程序问题 【设备信息】Mate60
【API版本】Api12
【DevEco Studio版本】5.0.5.300

在使用 codeGenie 生成代码中,有没有其他实现方案,麻烦帮忙看看是否系统有存在类似的 Api,生成的代码是无法调试的,存在报错

【问题相关代码】

import util from '@ohos.util';
import { BusinessError } from '@ohos.base';

export class JwtUtil {
  private static readonly ALGORITHM = 'HS256';
  private static readonly SECRET = 'xxxx';

  /**
   * 生成jwt
   *
   * @param payload jwt载荷
   * @returns jwt字符串
   */
  public static async generateJwt(payload: object): Promise<string> {
    let token: string = '';
    try {
      token =
        util.TextEncoder.encodeInto('{"alg":"' + JSON.stringify(JwtUtil.ALGORITHM) + '","typ":"' + JSON.stringify('JWT') +
          '"}');
      token = util.TextEncoder.encodeInto('.') + token + util.TextEncoder.encodeInto('.');
      token = token + util.TextEncoder.encodeInto(JSON.stringify(payload));
      let sign: string = await util.hmacSign(token, JwtUtil.SECRET, 'sha256');
      token = token + util.TextEncoder.encodeInto('.') + sign;
    } catch (error) {
      let e: BusinessError = error as BusinessError;
      console.error(`generateJwt error, ${e.code}, ${e.message}`);
    }
    return token;
  }
}

或者

static getSignature(token: string): Promise<string> {

  return new Promise((resolve, reject) {

  let verify = cryptoFramework.createSign('RSA2048|PRIMES_2');

  verify.

  let signer = util.Signer.createSigner('RSA2048|PRIMES_2');

  let signOptions = {
    "algName": "SHA256withRSA",
    "specifiedDigestAlgorithm": "SHA256"
  }

  signer.sign(token, signOptions).then((signResult) => {
    resolve(signResult.signature);
}).catch((err: BusinessError) => {
  console.error(`sign error, ${err.code}, ${err.message}`);
  reject(err);
});

});

更多关于HarmonyOS 鸿蒙Next系统生成jwt签名程序问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

在鸿蒙端完成RSA SHA256算法的签名的话 参考链接: https://gitee.com/openharmony-sig/ohos_jsonwebtoken

更多关于HarmonyOS 鸿蒙Next系统生成jwt签名程序问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next系统中生成JWT签名,可以使用@ohos.security.jwt模块。该模块提供了JWT的创建、签名和验证功能。首先,确保在module.json5中声明权限:

"requestPermissions": [
  {
    "name": "ohos.permission.ACCESS_SIGNATURE_CERTIFICATE"
  }
]

使用jwt.create方法生成JWT,并设置headerpayload

import jwt from '@ohos.security.jwt';

let header = {
  alg: 'HS256',
  typ: 'JWT'
};

let payload = {
  sub: '1234567890',
  name: 'John Doe',
  iat: Math.floor(Date.now() / 1000)
};

let token = jwt.create(header, payload);

使用jwt.sign方法对生成的JWT进行签名,支持HS256、RS256等算法:

let secretKey = 'your-secret-key';
let signedToken = jwt.sign(token, secretKey, 'HS256');

生成的signedToken即为签名的JWT。如果需要验证JWT,可以使用jwt.verify方法:

let isValid = jwt.verify(signedToken, secretKey, 'HS256');

如果验证成功,isValidtrue,否则为false。通过这种方式,可以在鸿蒙Next系统中生成和验证JWT签名。

回到顶部