【发布时间】:2021-02-05 16:53:06
【问题描述】:
我正在尝试在 Go 中验证来自 Apple 的 JWT,我需要他们的公钥作为 Go 的 rsa.PublicKey 来执行此操作。我从以下指定的端点检索了他们的密钥:
https://developer.apple.com/documentation/sign_in_with_apple/fetch_apple_s_public_key_for_verifying_token_signature
得到以下结果:
{
"keys": [
{
"kty": "RSA",
"kid": "86D88Kf",
"use": "sig",
"alg": "RS256",
"n": "iGaLqP6y-SJCCBq5Hv6pGDbG_SQ11MNjH7rWHcCFYz4hGwHC4lcSurTlV8u3avoVNM8jXevG1Iu1SY11qInqUvjJur--hghr1b56OPJu6H1iKulSxGjEIyDP6c5BdE1uwprYyr4IO9th8fOwCPygjLFrh44XEGbDIFeImwvBAGOhmMB2AD1n1KviyNsH0bEB7phQtiLk-ILjv1bORSRl8AK677-1T8isGfHKXGZ_ZGtStDe7Lu0Ihp8zoUt59kx2o9uWpROkzF56ypresiIl4WprClRCjz8x6cPZXU2qNWhu71TQvUFwvIvbkE1oYaJMb0jcOTmBRZA2QuYw-zHLwQ",
"e": "AQAB"
},
{
"kty": "RSA",
"kid": "eXaunmL",
"use": "sig",
"alg": "RS256",
"n": "4dGQ7bQK8LgILOdLsYzfZjkEAoQeVC_aqyc8GC6RX7dq_KvRAQAWPvkam8VQv4GK5T4ogklEKEvj5ISBamdDNq1n52TpxQwI2EqxSk7I9fKPKhRt4F8-2yETlYvye-2s6NeWJim0KBtOVrk0gWvEDgd6WOqJl_yt5WBISvILNyVg1qAAM8JeX6dRPosahRVDjA52G2X-Tip84wqwyRpUlq2ybzcLh3zyhCitBOebiRWDQfG26EH9lTlJhll-p_Dg8vAXxJLIJ4SNLcqgFeZe4OfHLgdzMvxXZJnPp_VgmkcpUdRotazKZumj6dBPcXI_XID4Z4Z3OM1KrZPJNdUhxw",
"e": "AQAB"
}
]
}
我尝试了x509.ParsePKCS1PublicKey(...) 函数,方法是解析单个键和使用asn1.Marshall(...) 函数返回的整个JSON。我在尝试解析 der 时出错。
然后我注意到密钥包含"n" 和"e" 字符串对,并且定义为here,所以我尝试直接创建公钥。但是,rsa.PublicKey 中的N 和E 分别是*big.Int 和int。
我似乎找不到"n" 和"e" 的编码,所以我无法准确地将这些值转换为rsa.PublicKey。我试过base64,但是没用。
谁能告诉我如何将 Apple 的公钥转换为合适的rsa.PublicKey?
【问题讨论】: