尝试使用Apple提供程序将Apple SSO添加到Laravel Socialite时出错

utugiqy6  于 2023-05-19  发布在  其他
关注(0)|答案(1)|浏览(118)

我正尝试将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.我生成的密钥不正确,使用了错误的值。
任何帮助都非常感谢!

ipakzgxi

ipakzgxi1#

在这一切之后,我发现这是因为我忘记了窗口中的&符号。位置URL:face_palm:

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;
});

应该是的

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;
});

尽管如此,我还是把这个问题留了下来,因为很难找到关于这个主题的相关文档,所以希望它能帮助到其他人。还有,很高兴有关于清理的评论。

相关问题