本文介绍了在后端验证Apple StoreKit2应用内购买收据jws表示(理想情况下是节点,但一切都可以)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
如何在Node的后端验证来自StoreKit2的应用内购买JWS表示?
解码有效负载非常简单,但是我在任何地方都找不到苹果用来签署这些JWS/JWTs的公钥。在我使用JWT的任何其他时候,您只需使用节点jsonwebtoken
库并传入签名者公钥或共享密钥(配置的或从JWK获取的)。
我可以使用node-jose
j.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
字段中的证书链验证其真实性
谢谢!
推荐答案
最终解决了这个问题。原来我们需要硬编码的";证书来进行检查。
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表示(理想情况下是节点,但一切都可以)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!