1

在单独的服务器上验证 Windows 8 应用内购买收据时,我对 Microsoft 的推荐做法感到有些困惑。

文档页面显示了验证收据时的方法。我发现令人困惑的是获取和存储用于验证收据的证书。在某些时候,在检索验证中使用的 SSL 证书时,文档会说明以下内容:

// Retrieve the certificate from the official site.
// NOTE: For sake of performance, you would want to cache this certificate locally.
//       Otherwise, every single call will incur the delay of certificate retrieval.

这个缓存建议让我感到困惑。证书是从使用来自收据本身的参数构建的 URL 中检索的,看起来像这样:

https://go.microsoft.com/fwlink/?LinkId=246509&cid={0},

其中{0}代表直接从收据中获取的证书 ID。但如果我应该缓存它,那么任何后续收据验证都会忽略新收据中所述的证书 ID。这使我认为Windows 8 上的所有收据都必须根据相同的证书进行验证,具有相同的、永不更改的 ID(似乎是b809e47cd0110a4db043b3f73e83acd917fe1336)。这个假设正确吗?我是否可以在第一次请求后安全地缓存证书,然后忽略收据中的所有后续证书 ID?

4

1 回答 1

2

实际上,您必须使用其 ID 作为缓存键来缓存每个证书。每次您遇到新的证书 ID 时,都必须将其添加到缓存中。

例如,您可以构建磁盘缓存。在这种情况下,certificateId 将用作 FileName: - 检查本地缓存目录中是否存在与证书 ID 匹配的文件 - 如果存在则从本地磁盘上的文件中加载证书 - 如果不存在则下载它,然后将其保存到本地缓存目录

显然,您可以使用 AppFabric 缓存或内置 Asp.Net 缓存功能(或类似技术)做更复杂的事情。

于 2013-10-04T15:10:46.753 回答