Проблема с Apple signin/login с django и flutter - ответ invalid_client

У меня возникла проблема с реализацией Apple Sign-In/Login в моем приложении Django + Flutter. Вот поток, который я использую:

  1. На стороне Flutter я использую следующий код для получения учетных данных от Apple:
SignInWithAppleButton(
  onPressed: () async {
    final credential = await SignInWithApple.getAppleIDCredential(
      scopes: [
        AppleIDAuthorizationScopes.email,
        AppleIDAuthorizationScopes.fullName,
      ],
    );

    print(credential);

    // Now send the credential (especially `credential.authorizationCode`) to your server to create a session
    // after they have been validated with Apple
  },
);

Это возвращает такую информацию, как identity_token и authorization_code.

  1. Для тестирования я отправляю код_авторизации в POST-запросе на конечную точку https://appleid.apple.com/auth/token со следующими данными: Заголовки:
{
  "Content-type": "application/x-www-form-urlencoded"
}

Тело:

{
  "client_id": "com.example.myapp",
  "client_secret": "example_client_secret",
  "grant_type": "authorization_code",
  "code": "my_example_authorization_code"
}
  1. Для генерации client_secret я использую следующий скрипт на Python:
# Load the private key
with open(PRIVATE_KEY_PATH, "rb") as key_file:
    private_key = serialization.load_pem_private_key(
        key_file.read(), password=None, backend=default_backend()
    )

header = {
    "alg": "ES256",
    "kid": KEY_ID,
}

payload = {
    "iss": TEAM_ID,
    "iat": int(time.time()),
    "exp": int(time.time()) + 15777000,
    "aud": "https://appleid.apple.com",
    "sub": APP_ID,
}

client_secret = jwt.encode(
    payload, private_key, algorithm="ES256", headers=header
)

print(client_secret)

После всех этих действий каждый раз, когда я отправляю POST-запрос на конечную точку /auth/token компании Apple, я получаю следующий ответ: {«error»: «invalid_client"}. Что-то не так с моим потоком? Может быть, я отправляю неверные данные или мне следует действовать по-другому? Любые соображения или предложения будут очень признательны :)

Значение APP_ID, которое вы указываете в качестве client_id и в пункте sub вашего JWT, не является идентификатором вашего пакета. Это значение, показанное в разделе «Apple Id» в «Информации о приложении» в App Store Connect. Это 10-значное число.

Вернуться на верх