Реализация авторизации через Apple ID на сайте

Представьте: пользователь iOS ожидает войти на сайт через Apple ID, а у вас только Google и email. Он уходит к конкуренту. Мы сталкивались с этим не раз. Интеграция Sign in with Apple — не просто следование гайдлайнам, а способ удержать аудиторию Apple-устройств. По данным наших проектов, конверсия

Разработка и обслуживание любых видов сайтов:

Информационные сайты или веб-приложения
Сайты визитки, landing page, корпоративные сайты, онлайн каталоги, квиз, промо-сайты, блоги, новостные ресурсы, информационные порталы, форумы, агрегаторы
Сайты или веб-приложения электронной коммерции
Интернет-магазины, B2B-порталы, маркетплейсы, онлайн-обменники, кэшбэк-сайты, биржи, дропшиппинг-платформы, парсеры товаров
Веб-приложения для управления бизнес-процессами
CRM-системы, ERP-системы, корпоративные порталы, системы управления производством, парсеры информации
Сайты или веб-приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, конструкторы сайтов, порталы предоставления электронных услуг, видеохостинги, тематические порталы

Это лишь некоторые из технических типов сайтов, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента

Услуги, которые мы предлагаем
Показано 1 из 1Все 2062 услуг
Реализация авторизации через Apple ID на сайте
Средний
~2-3 дня

Наши компетенции:

Часто задаваемые вопросы

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1414
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1285
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    982
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1241
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    982
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Разработка веб-сайта для компании ФИКСПЕР
    995

Представьте: пользователь iOS ожидает войти на сайт через Apple ID, а у вас только Google и email. Он уходит к конкуренту. Мы сталкивались с этим не раз. Интеграция Sign in with Apple — не просто следование гайдлайнам, а способ удержать аудиторию Apple-устройств. По данным наших проектов, конверсия входа через Apple ID среди iOS-пользователей на 25-30% выше, чем через Google или email. Однако реализация таит много подводных камней: relay email не доходит, имя пользователя теряется при повторном входе, client_secret истекает каждые 6 месяцев. За нашими плечами 10+ лет опыта в веб-разработке и более 50 успешных проектов с авторизацией. Мы гарантируем корректную работу даже с relay email и скрытыми данными, экономя до 20 часов на отладку типовых ошибок.

Типичные сложности интеграции Apple ID

Apple ID имеет ряд особенностей, которые делают его реализацию нетривиальной:

  • Пользователь может скрыть настоящий email — Apple выдаёт relay-адрес вида [email protected].
  • id_token возвращается только при первой авторизации вместе с именем пользователя.
  • Последующие входы не возвращают имя — его нужно сохранить при первом входе.
  • Нет refresh token в стандартном OAuth2-смысле.

Эти отличия требуют особого подхода: мы аккуратно обрабатываем каждый сценарий, чтобы пользователь не потерял доступ. Согласно документации Apple, relay-адреса могут менять формат — мы учитываем это в реализации.

Как зарегистрировать приложение в Apple Developer?

  1. Certificates, Identifiers & ProfilesIdentifiers → создать App ID с включённым Sign In with Apple.
  2. Создать Services ID (web-компонент) — указать домен и Redirect URL.
  3. Создать Key с включённым Sign In with Apple — скачать .p8 файл (хранить безопасно, скачать можно только один раз).
  4. Зафиксировать: Team ID, Client ID (= Services ID), Key ID.

Генерация client_secret

Apple не использует статический секрет. client_secret — JWT, подписанный приватным ключом .p8. Мы генерируем его с помощью библиотеки lcobucci/jwt:

use Lcobucci\JWT\Configuration; use Lcobucci\JWT\Signer\Ecdsa\Sha256; use Lcobucci\JWT\Signer\Key\InMemory; function generateAppleClientSecret(): string { $config = Configuration::forAsymmetricSigner( new Sha256(), InMemory::file(storage_path('keys/apple_auth.p8')), InMemory::empty() ); return $config->builder() ->issuedBy(config('services.apple.team_id')) // iss: Team ID ->permittedFor('https://appleid.apple.com') // aud ->relatedTo(config('services.apple.client_id')) // sub: Services ID ->issuedAt(new \DateTimeImmutable()) ->expiresAt(new \DateTimeImmutable('+6 months')) ->withHeader('kid', config('services.apple.key_id')) ->getToken($config->signer(), $config->signingKey()) ->toString(); } 

Срок действия до 6 месяцев. Токен пересоздаётся заранее через cron — мы автоматизируем это, чтобы интеграция работала без перебоев.

Чем отличается Apple OAuth от Google OAuth?

Сравнение протоколов
1. Редирект пользователя: GET https://appleid.apple.com/auth/authorize ?client_id=com.example.web &redirect_uri=https://example.com/auth/apple/callback &response_type=code id_token &response_mode=form_post &scope=name email &state=<random_string> &nonce=<random_nonce> 2. Apple делает POST на redirect_uri с: - code - id_token - state - user (JSON с именем — только при первом входе!) 

Важно: response_mode=form_post — Apple делает POST, не GET. Redirect URI должен принимать POST.

Характеристика Apple ID Google OAuth
Клиентский секрет JWT с .p8 ключом (до 6 мес) Статический client_secret
Передача данных POST form с code и id_token GET redirect с code
Имя пользователя Только первый вход При каждом входе
Relay email Необязательно Нет
Refresh token Отсутствует (нужен повторный вход) Есть (при необходимости)

Apple OAuth в 2-3 раза сложнее в реализации, но даёт доступ к аудитории iOS-устройств. Как показывает практика, конверсия входа через Apple ID на 25-30% выше среди пользователей Apple.

Как обработать callback и верифицировать id_token?

public function handleCallback(Request $request): RedirectResponse { // Верификация state abort_unless($request->state === session('apple_state'), 422); // Декодирование id_token (без верификации подписи пока) $idToken = $this->decodeIdToken($request->id_token); // user приходит только при первом входе $appleUser = $request->has('user') ? json_decode($request->user, true) : null; $user = User::updateOrCreate( ['apple_id' => $idToken['sub']], [ 'email' => $idToken['email'] ?? null, 'email_verified_at' => $idToken['email_verified'] ? now() : null, // Имя сохраняем только если пришло (первый вход) 'name' => $appleUser ? trim(($appleUser['name']['firstName'] ?? '') . ' ' . ($appleUser['name']['lastName'] ?? '')) : null, ] ); // Обновляем имя только если оно не было установлено ранее if ($appleUser && !$user->name) { $user->update(['name' => ...]); } Auth::login($user); return redirect()->intended('/dashboard'); } 

Верификация id_token

Apple публикует публичные ключи по адресу https://appleid.apple.com/auth/keys. Верификация через JWT:

// composer require firebase/php-jwt use Firebase\JWT\JWT; use Firebase\JWT\JWK; $keys = Cache::remember('apple_public_keys', 3600, function () { return Http::get('https://appleid.apple.com/auth/keys')->json(); }); $payload = JWT::decode($idToken, JWK::parseKeySet($keys)); // Проверить: iss = appleid.apple.com, aud = client_id, exp, nonce 

Как работать с relay email?

Если пользователь скрыл email, Apple выдаёт relay-адрес @privaterelay.appleid.com. Письма на него доходят только если домен зарегистрирован в Apple Developer Console → More → Configure Sign in with Apple for Email Communication. Мы помогаем настроить этот процесс, чтобы уведомления доставлялись.

В одном из проектов relay email не работал из-за отсутствия регистрации домена — ошибка стоила клиенту потери части заказов. Мы быстро выявили причину и настроили соответствие, восстановив доставку писем.

Что входит в работу

  • Регистрация приложения в Apple Developer (App ID, Services ID, Key)
  • Генерация client_secret JWT с автоматическим обновлением через cron
  • Реализация OAuth callback с верификацией id_token и state
  • Обработка relay email и скрытого имени (сохранение при первом входе)
  • Интеграция с Laravel Socialite или кастомная реализация
  • Документация по поддержке и передача доступов
  • Гарантия на код и бесплатная консультация в течение месяца после сдачи

Сроки работ

Этап Время
Регистрация в Apple Developer 0.5 дня
Генератор client_secret + cron 1 день
OAuth callback + id_token верификация 1.5 дня
Хранение relay email, обработка имени 0.5 дня
Тесты + проверка на реальных устройствах 1 день

Итого: 4–5 рабочих дней.

Чтобы получить готовую интеграцию Apple ID под ключ, свяжитесь с нами — мы оценим ваш проект и предложим оптимальное решение. Закажите интеграцию уже сегодня и избавьте себя от часов отладки типовых ошибок.