Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用Apple登录=无效的\u客户端_Php_Ios_Jwt_Apple Sign In - Fatal编程技术网

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来说是不正确的。有关详细信息,请参见扫描您是否在此处为其他人添加解决方案?