猿问

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

我需要为使用 Apple Mapkitjs 创建一个 JWT。我在 .p8 文件中有一个密钥。我的后端是在 java 中。我正在尝试使用 auth0 来执行此操作。但它说我必须为 ES256 算法使用密钥提供程序或密钥。我尝试了以下但出现异常“找不到 PKCS8”

KeyStore store = KeyStore.getInstance("PKCS8");

我对 Java 世界还很陌生。有人能告诉我如何从 .p8 文件创建密钥吗


慕尼黑的夜晚无繁华
浏览 141回答 2
2回答

呼啦一阵风

我认为你应该使用PKCS8EncodedKeySpec

阿晨1998

  //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);
随时随地看视频慕课网APP

相关分类

Java
我要回答