Проблема с Apple signin/login с django и flutter - ответ invalid_client
У меня возникла проблема с реализацией Apple Sign-In/Login в моем приложении Django + Flutter. Вот поток, который я использую:
- На стороне 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.
- Для тестирования я отправляю код_авторизации в 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"
}
- Для генерации 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-значное число.