为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用 .p8 文件签署 json 网络令牌

如何使用 .p8 文件签署 json 网络令牌

慕尼黑的夜晚无繁华 2023-04-19 15:56:42
我需要为使用 Apple Mapkitjs 创建一个 JWT。我在 .p8 文件中有一个密钥。我的后端是在 java 中。我正在尝试使用 auth0 来执行此操作。但它说我必须为 ES256 算法使用密钥提供程序或密钥。我尝试了以下但出现异常“找不到 PKCS8”KeyStore store = KeyStore.getInstance("PKCS8");我对 Java 世界还很陌生。有人能告诉我如何从 .p8 文件创建密钥吗
查看完整描述

2 回答

?
呼啦一阵风

TA贡献1802条经验 获得超6个赞

我认为你应该使用PKCS8EncodedKeySpec


查看完整回答
反对 回复 2023-04-19
?
阿晨1998

TA贡献2037条经验 获得超6个赞

  //remember to remove two lines below in your .p8 key before run code

    //-----BEGIN PRIVATE KEY-----

    //-----END PRIVATE KEY-----

    //begin create a key from .p8 file

    byte[] p8der = Files.readAllBytes(new File("/tmp/AuthKey_KeyId.p8").toPath());

    PKCS8EncodedKeySpec priPKCS8 = new PKCS8EncodedKeySpec(new org.apache.commons.codec.binary.Base64().decode(p8der));

    PrivateKey appleKey = KeyFactory.getInstance("EC").generatePrivate(priPKCS8);

    //end create a key from .p8 file

    Map jwtHeader = new HashMap();

    jwtHeader.put("alg", "ES256");

    //addmore header

    JsonObject jwtPayload = new JsonObject();

    jwtPayload.addProperty("iss", "{{replace with your issuer ID}}");

    //addmore properties

    JsonArray scope = new JsonArray();

    scope.add("GET {{replace with your scope}}");

    jwtPayload.add("scope", scope);

    //begin signWithES256

    JwtBuilder jwtBuilder = Jwts.builder()

            .setHeader(jwtHeader)

            .setPayload(jwtPayload.toString())

            .signWith(

                    SignatureAlgorithm.ES256,

                    appleKey

            );

    String jws = jwtBuilder.compact();

    logger.info(jws);


查看完整回答
反对 回复 2023-04-19
  • 2 回答
  • 0 关注
  • 140 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信