首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用Skadnetwork/Apple验证回发

如何用Skadnetwork/Apple验证回发
EN

Stack Overflow用户
提问于 2020-10-23 08:27:21
回答 1查看 678关注 0票数 2

我有问题,以核实回发与Skadnetwork/苹果,根据文档苹果正在发出。

我有两个问题(至少我认为只有两个问题)。

  1. \u2063 -我使用PHP从POST中获取所有信息,然后创建字符串以供以后验证。遗憾的是,我不确定\u2063是否应该简单地存在于字符串中,还是应该以某种编码/解码的方式存在。
  2. 苹果的公钥-它应该如何使用。文档中以某种解码/编码方式看到的版本。Docs说解码基地64,然后根据它创建X.509标准公钥。

有没有人有一个有用的例子?现在我完全迷路了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-03 16:00:12

我正在使用NodeJS,它非常简单。我拿走了苹果的公钥,用-----BEGIN PUBLIC KEY-----\n\n-----END PUBLIC KEY-----包了起来。

代码语言:javascript
复制
-----BEGIN PUBLIC KEY-----
<APPLE_PUBLIC_KEY_BASE_64 (copy paste from Apple's guide)>
-----END PUBLIC KEY-----

也可以使用NodeJs密码模块加载公钥:

代码语言:javascript
复制
const key = Buffer.from(`<APPLE_PUBLIC_KEY_BASE_64 (copy paste from Apple's guide)>`, 'base64');
const publicKey = crypto.createPublicKey({
  key,
  format: 'der',
  type: 'spki',
});

然后,我将使用\u2063分隔符验证所需的回发部分连接起来。

代码语言:javascript
复制
// ad network version 2.0/2.1
const message = [
  version,
  adNetworkId,
  campaignId,
  appId,
  transactionId,
  redownload,
].join('\u2063');

然后,我使用NodeJS密码模块验证签名:

代码语言:javascript
复制
const verify = crypto.createVerify('sha256');
verify.update(message);
verify.verify(publicKey, signature, 'base64'); // this returns a boolean

对于来自奇异-SKAdNetwork-应用程序 ECDSA包装器类的这里,也可以使用类似的方式来完成这一任务。

代码语言:javascript
复制
SEPERATOR = u"\u2063"

postback = {
    "version": "2.1",
    "ad-network-id": "com.example",
    "campaign-id": 42,
    "transaction-id": "6aafb7a5-0170-41b5-bbe4-fe71dedf1e28",
    "app-id": 525463029,
    "attribution-signature": "MEUCID6rbq3qt4GvFaAaynh5/LAcvn1d8CQTRhrZhLIxLKntAiEAo7IrvoMw6u2qDg6Tr5vIsEHXjlLkPlCOL0ojJcEh3Qw=",
    "redownload": True,
    "source-app-id": 1234567891,
    "conversion-value": 20
}

pub_key = """
-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWdp8GPcGqmhgzEFj9Z2nSpQVddayaPe4FMzqM9wib1+aHaaIzoHoLN9zW4K8y4SPykE3YVK3sVqW6Af0lfx3gg==
-----END PUBLIC KEY-----
"""

message = (
    postback["version"]
    + SEPERATOR
    + postback["ad-network-id"]
    + SEPERATOR
    + str(postback["campaign-id "])
    + SEPERATOR
    + str(postback["app-id "])
    + SEPERATOR
    + postback["transaction-id"]
    + SEPERATOR
    + str(postback["redownload"]).lower()
    + SEPERATOR
    + str(postback["source-app-id"])
)

ecdsa = ECDSA(pub_key)
signature = postback["attribution-signature"]
ecdsa.verify(message, signature) # this returns a boolean

我希望这能帮上忙。我对PHP :/没有任何经验

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64496534

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档