在后端验证Apple StoreKit2应用内购买收据jws表示(理想情况下是节点,但一切都可以)

本教程将介绍在后端验证Apple StoreKit2应用内购买收据jws表示(理想情况下是节点,但一切都可以)的处理方法,这篇教程是从别的地方看到的,然后加了一些国外程序员的疑问与解答,希望能对你有所帮助,好了,下面开始学习吧。

在后端验证Apple StoreKit2应用内购买收据jws表示(理想情况下是节点,但一切都可以) 教程 第1张

问题描述

怎么在Node的后端验证来自StoreKit2的应用内购买JWS表示?

解码有效负载非常简单,但是我在任何地方都找不到苹果用来签署这些JWS/JWTs的公钥。在我使用JWT的任何其他时候,您只需使用节点jsonwebtoken库并传入签名者公钥或共享密钥(配置的或从JWK获取的)。

我可以使用node-josej.JWS.createVerify().verify(jwsString, {allowEmbeddedKey: true}).then(r => obj = r)轻松解码JWS,它给出了如下对象:

 {
  protected: [ 'alg', 'x5c' ],
  header: {
 alg: 'ES256',
 x5c: [
'MIIEMDueU3...',
'MII..., 
'MIICQzCCAcmgAwIBAgIILcX8iNLFS5UwCgYIKoZIzj0EAwMwZzEbMBkGA1UEAwwSQXBwbGUgUm9vdCBDQSAtIEczMSYwJAYDVQQLDB1BcHBsZSBDZXJ0aWZpY2F0...' ]
  },
  payload: <Buffer 7b 22 74 72 61 6e 73 61 63 74 69 6f 6e 49 64 22 3a 22 31 30 30 30 30 30 30 38 38 36 39 31 32 38 39 30 22 2c 22 6f 72 69 67 69 6e 61 6c 54 72 61 6e 73 ... 420 more bytes>,
  signature: <Buffer f8 85 65 79 a1 dc 74 dd 90 80 0a a4 08 85 30 e7 22 80 4c 20 66 09 0b 84 fc f4 e5 57 53 da d5 6f 13 c6 8f 56 e8 29 67 5c 95 a6 27 33 47 1e fe e9 6e 41 ... 14 more bytes>,
  key: JWKBaseKeyObject {
 keystore: JWKStore {},
 length: 256,
 kty: 'EC',
 kid: 'Prod ECC Mac App Store and iTunes Store Receipt Signing',
 use: '',
 alg: ''
  }
}

而且JSON很容易解析有效负载并获得我想要的数据。但是,怎么使用x5c字段中的证书链验证其真实性

谢谢!

推荐答案

最终解决了这个问题。原来我们需要硬编码的&quot;证书来进行检查。

Apple在their website上拥有所需的证书。您已经下载了根证书(因为它是对整个链进行签名的证书),但是您也可以获得中间证书。

下载后将其转换为.pem

 $ openssl x509 -inform der -in apple_root.cer -out apple_root.pem

然后您需要做的就是对照JWS中的代码进行验证:

if (openssl_x509_verify($jws_root_cert, $downloaded_apple_root_cert) == 1){
 //valid
}

希望这对其他人有帮助!

好了关于在后端验证Apple StoreKit2应用内购买收据jws表示(理想情况下是节点,但一切都可以)的教程就到这里就结束了,希望趣模板源码网找到的这篇技术文章能帮助到大家,更多技术教程可以在站内搜索。