在 PHP 中管理 Sign with Apple 重定向

Manage Sign with Apple redirect in PHP

我正在尝试在后端服务器上为所有本身不支持它的设备实施“使用 Apple 登录”工作流程。

我尝试过使用和不使用第 3 方库。现在我正在使用 patrickbussmann/oauth2-apple.

我通过授权URL成功授权了账户,但是重定向URL没有字段(尤其是'code'那个)。 这就是我生成授权的方式 URL:

function get_apple_signin_url() {
    $options = [
        'scope' => ['email'],
    ];
    $authUrl = $this->provider->getAuthorizationUrl($options);
    $_SESSION['oauth2state'] = $this->provider->getState();
    return '{"url": "'.$authUrl.'"}';
}

得到的URL是正确的,一直到登录结束: https://appleid.apple.com/auth/authorize?scope=email&state=a9583c14408af68ac05cbfed3a8274ef&response_type=code&approval_prompt=auto&redirect_uri=MY_REDIRECT_URI&client_id=MY_CLIENT_ID&response_mode=form_post

这是重定向 uri (apple_auth_redirect.php) 中的代码:

<?php

if (isset($_POST['code'])) {
    $code = urlencode($_POST['code']);
    header("Location: intent://callback?apple_id_token=".$code);
} else {
    echo "no_code";
}

从授权URL可以看出,response_modeform_post。如果我使用 query 作为 response_mode 我获得代码,但我不能插入 email 作为范围。 Incorporating Sign in with Apple into Other Platforms (developer.apple.com)response_mode 中有更多详细信息。

这是我目前实施的授权工作流程:

  1. 移动应用在服务器上调用 get_apple_signin_url
  2. 移动应用程序在浏览器中打开 url。
  3. 通过Apple网站授权完成,浏览器重定向到redirect uri apple_auth_redirect.php.
  4. 代码应该被 apple_auth_redirect.php 解析,但是重定向请求没有字段。

我已经为 Google 执行了相同的过程并且华为登录没有问题。

我解决了这个问题。我以为我没有正确处理重定向。但是,问题是我写的 redirect_uri=MY_REDIRECT_URI 没有“www”,只是域,例如“my_domain.com”。使用“www”,例如“www.my_domain.com”,它起作用了。