我正尝试将Apple单点登录添加到我的Web应用程序中,由Laravel提供支持。
我正在使用javascript version of their sign in,我并不坚持,但似乎是他们的首选方向。
按照那里的说明,我在我的登录页面上添加了以下内容:
<meta name="appleid-signin-client-id" content="com.mywebsite.service-id">
<meta name="appleid-signin-scope" content="email name">
<meta name="appleid-signin-redirect-uri" content="https://app.mywebsite.com/auth/apple/callback">
<meta name="appleid-signin-state" content="{{ csrf_token() }}">
<meta name="appleid-signin-nonce" content="e3928c0c-edf0-11ed-a05b-madeupnonce">
<meta name="appleid-signin-use-popup" content="true">
...
<script type="text/javascript" src="https://appleid.cdn-apple.com/appleauth/static/jsapi/appleid/1/en_US/appleid.auth.js"></script>
此代码成功创建了一个Apple登录弹出窗口,并将AppleIDSignInOnSuccess事件返回到当前页面(而不是回调页面)。文档使它看起来像是预期的,我想回调函数在这里没有使用?
该事件包含一个具有id_token、代码和状态的授权对象。在这一点上,我很迷失!我尝试将用户移动到具有该信息的回叫。
document.addEventListener('AppleIDSignInOnSuccess', (event) => {
let detail = event.detail.authorization;
window.location = '/auth/apple/callback?code=' + detail.code + 'id_token=' + detail.id_token + 'state=' + detail.state;
});
这似乎很好,但是Socialite Apple提供商在调用Apple的端点时,始终返回:
客户端错误:POST https://appleid.apple.com/auth/token
导致400 Bad Request
响应:{“error”:“invalid_grant”,“error_description”:“代码已过期或已撤销。"}
下面是我处理Apple回调的代码:
public function handleAppleCallback()
{
echo config('services.apple.client_id'); // com.mywebsite.service-id
echo config('services.apple.client_secret'); // LongSecretFROMinstuctionsHERE
echo config('services.apple.redirect_uri'); // https://app.mywebsite.com/auth/apple/callback
$appleUser = Socialite::driver('apple')
->stateless()
->user();
我通过指令here获得的键的值,尽管我也尝试过创建键on the fly。无论如何我都得到了同样的结果。我在这些指令中使用的配置值是:
team_id = '3Z8TYT4SL9' // my alpha numeric team id (not the real one)
client_id = 'com.sharewithleaf.service-id'
key_id = '85UX3UQVT8' // my alpha numeric key created linked to my primary app id (not the real one)
根据说明,我认为这些是正确的值,但我没有找到显示结果值示例的文档,以帮助我进行合理性检查。
在这一点上我陷入了僵局。我能想到的几种可能性:
1.我把整个流程都搞混了
1.我在AppleIDSignInOnSuccess之后向回调传递了不正确的参数
1.我创建/使用了错误的client_id和secret,应该使用类似API key的东西。
1.我生成的密钥不正确,使用了错误的值。
任何帮助都非常感谢!
1条答案
按热度按时间ipakzgxi1#
在这一切之后,我发现这是因为我忘记了窗口中的&符号。位置URL:face_palm:
应该是的
尽管如此,我还是把这个问题留了下来,因为很难找到关于这个主题的相关文档,所以希望它能帮助到其他人。还有,很高兴有关于清理的评论。