Php 使用Apple登录=无效的\u客户端
我面临着一个非常糟糕的问题,因为我读了太多的指南和教程,但什么都不管用 结果总是一样的:Php 使用Apple登录=无效的\u客户端,php,ios,jwt,apple-sign-in,Php,Ios,Jwt,Apple Sign In,我面临着一个非常糟糕的问题,因为我读了太多的指南和教程,但什么都不管用 结果总是一样的:{“error”:“invalid_client”} 由于客户端无效,我得到了代码、identityToken和所有我需要的东西(除了对的调用) 这是我获取代码的url 这样我就有了默认的工作流。 在接受/登录后,我将被重定向到我的页面 (当我使用JavaScript API时,我将获得其他信息,如状态、代码和id_标记。我已经在那里用“代码”尝试过了。) 回到主功能 这是我对苹果的要求 'client_
{“error”:“invalid_client”}
由于客户端无效,我得到了代码、identityToken和所有我需要的东西(除了对的调用)
这是我获取代码的url
这样我就有了默认的工作流。
在接受/登录后,我将被重定向到我的页面
(当我使用JavaScript API时,我将获得其他信息,如状态、代码和id_标记。我已经在那里用“代码”尝试过了。)
回到主功能
这是我对苹果的要求
'client_id' => 'org.example.service',
'client_secret' => JWT-Data encoded (OPENSSL_ALGO_SHA256) see below
'grant_type' => 'authorization_code',
'code' => 'a277243e2ec324fb09ba1c3333a8e6576.0.abcde.u4xiTDP2qHXoNEaxrcrIGx'
JWT标题:
{
"alg": "ES256",
"kid": "1ABC2345DE"
}
{
"iss": "1A234BCD56",
"iat": 1571269964,
"exp": 1571273564,
"aud": "https://appleid.apple.com",
"sub": "org.example.service"
}
{
"error": "invalid_client"
}
JWT有效负载:
{
"alg": "ES256",
"kid": "1ABC2345DE"
}
{
"iss": "1A234BCD56",
"iat": 1571269964,
"exp": 1571273564,
"aud": "https://appleid.apple.com",
"sub": "org.example.service"
}
{
"error": "invalid_client"
}
响应:
{
"alg": "ES256",
"kid": "1ABC2345DE"
}
{
"iss": "1A234BCD56",
"iat": 1571269964,
"exp": 1571273564,
"aud": "https://appleid.apple.com",
"sub": "org.example.service"
}
{
"error": "invalid_client"
}
世界上无用的错误信息
我不知道为什么客户应该是无效的
我有一个下载文件名为AuthKey_1ABC2345DE.p8的密钥。(意味着1ABC2345DE是我的密钥id)
然后我有一个标识为“org.example”的本机iOS应用程序和一个标识为“org.example.service”的服务
它不能同时使用ID和混合不同的东西
没什么。无效的\u客户端
有人能帮我吗?我在这里坐了几个小时,只得到一个无效的客户
我的测试页面:
AppleID.auth.init({
clientId:'org.example.service',
范围:“电子邮件”,
重定向URI:'https://example.org',
声明:‘恩’
});
问题在于这种特殊的加密。
在这个博客中,除了客户机的秘密生成之外,他们使用PHP处理所有事情。
在文本中,作者解释了这句话:
Some JWT libraries don’t support elliptic curve methods, so make sure yours does before you start trying this out.
现在它完全可以正常工作了,上面的代码只替换了客户端密码生成。我认为
客户端id
与你的iOS应用程序的捆绑id不一样,因为“登录苹果”也适用于非应用程序网站。为感兴趣的人添加了一些细节:{“错误”:“无效客户端”}消息可能与openssl_sign函数生成的无效签名相关。为了给JWT签名,必须使用ES256算法,生成的签名应该是两个无符号整数(表示为R和S)的串联。结果表明,openssl_sign函数生成了一个DER编码的ASN.1签名,这对于Apple来说是不正确的。有关详细信息,请参见扫描您是否在此处为其他人添加解决方案?