【发布时间】:2019-06-14 16:30:42
【问题描述】:
我需要为Store Connect API 生成 JWT 令牌。我正在尝试使用 jwt ruby gem ruby-jwt。这是我的令牌生成代码,
payload = {
'iss': my_issuer_id_from_db,
'exp': generated_unix_timestamp, #Time.now + 20min
'aud': 'hard_coded_string_from_doc'
}
header = {
'alg': 'ES256',
'kid': my_key_id_from_db,
'typ': 'JWT'
}
private_key = OpenSSL::PKey.read(File.read('/tmp/private_key.pem'))
# private_key - <OpenSSL::PKey::EC:0x000000000XXXXXXX>
@token = JWT.encode(payload, private_key, 'ES256', header)
# encoded_header.encoded_payload.emcoded_signature
我将这个令牌放入请求的标头中:
headers = { Authorization: 'Bearer' + @token }
在我收到的回复中:
"errors": [{
"status": "401",
"code": "NOT_AUTHORIZED",
"title": "Authentication credentials are missing or invalid.",
"detail": "Provide a properly configured and signed bearer token, and make sure that it has not expired. Learn more about Generating Tokens for API Requests https://developer.apple.com/go/?id=api-generating-tokens"
}]
}
我认为问题在于令牌(直接带有签名)。当我尝试使用online tool 解码令牌时,我的有效负载和标头已正确解码。状态:无效签名
我做错了什么?任何想法如何正确地做到这一点?
【问题讨论】:
-
1.在“Bearer”和令牌之间放置一个空格。标题应该是'Authorization: Bearer eyJ...' 2. 在 jwt.io 上,您是否将密钥粘贴到密钥字段中?许多人忘记了这一点,并想知道为什么该工具会显示“无效签名”
-
我试过了,但是 jwt.io 工具需要公钥和私钥。我只有私钥。
-
第一点是原因。
-
嘿,我也面临同样的问题。你是如何解决这个问题的?你能很好地分享整个 ruby 文件吗?谢谢!
标签: ruby jwt app-store-connect itunes