# Авторизация Apple

### Аккаунт разработчика Apple

1. Войдите в ваш аккаунт разработчика Apple: <https://developer.apple.com/account>.

{% hint style="info" %}
Обратите внимание, для получения ключей для настройки авторизации через Apple, у вас должен быть аккаунт разработчика Apple с доступами к разделу [Certificates, Identifiers & Profiles](https://developer.apple.com/account/resources/).

Подробнее о создании аккаунта разработчика и добавления вашей компании в программу "[Apple Developer Program](https://developer.apple.com/programs/)" вы можете узнать по ссылке: <https://developer.apple.com/programs/enroll/>
{% endhint %}

### Создание App ID

1. В блоке "**Program resources**" в разделе "**Certificates, Identifiers & Profiles**" нажмите на "[**Identifiers**](#user-content-fn-1)[^1]".
2. На странице "**Identifiers**" [**нажмите**](#user-content-fn-2)[^2] на значок "**+**".&#x20;
3. На следующей странице "**Register a new identifier**" выберите "**App IDs**" -> нажмите "[**Continue**](#user-content-fn-3)[^3]".
4. На следующем шаге "**Select a type**" выберите "**App**" -> нажмите "[**Continue**](#user-content-fn-4)[^4]".
5. \
   а) На следующем шаге "**Register an App ID**" в поле "**Description**" введите название вашего проекта -> для поля "**Bundle ID**" выберите "**Explicit**" -> в поле "**Bundle ID**" введите reverse domain name вашего ОП в формате <mark style="color:orange;">**`domainZone.domain.oauth`**</mark> (пример <mark style="color:green;">**`net.boxexchanger.oauth`**</mark>). \
   \&#xNAN;***В случае, если ваш ОП расположен на субдомене, то необходимо указывать в формате*** <mark style="color:orange;">**`domainZone.subDomain.domain.oauth`**</mark>. \
   Пример заполненных полей "**Description"** и "**Bundle ID**" на [**скриншоте**](#user-content-fn-5)[^5]. \
   б) Ниже на странице в разделе "**Capabilities**" поставьте галочку напротив пункта "**Sign in with Apple**" -> нажмите "[**Continue**](#user-content-fn-6)[^6]" -> нажмите "[**Register**](#user-content-fn-7)[^7]".
6. App ID успешно создан.&#x20;

### Создание Service ID

1. На странице "**Certificates, Identifiers & Profiles**" в разделе "**Identifiers**" [**нажмите**](#user-content-fn-2)[^2] на значок "**+**".&#x20;
2. На следующей странице "**Register a new identifier**" выберите "**Services IDs**" -> нажмите "[**Continue**](#user-content-fn-8)[^8]".
3. На следующем шаге "**Register a Services ID**" в поле "**Description**" введите название вашего проекта -> в поле "**Identifier**" введите reverse domain name вашего ОП в формате <mark style="color:orange;">**`domainZone.domain.service`**</mark> (пример <mark style="color:green;">**`net.boxexchanger.service`**</mark>). \
   \&#xNAN;***В случае, если ваш ОП расположен на субдомене, то необходимо указывать в формате*** <mark style="color:orange;">**`domainZone.subDomain.domain.service`**</mark>. \
   Пример заполненных полей "**Description"** и "**Identifier**" на [**скриншоте**](#user-content-fn-9)[^9] **->** нажмите "**Continue**" -> нажмите "[**Register**](#user-content-fn-10)[^10]".
4. После успешного создания "**Service ID**", на странице "**Certificates, Identifiers & Profiles**" в разделе "**Identifiers**" справа сверху в фильтре выберите "[**Services IDs**](#user-content-fn-11)[^11]" -> нажмите на имя созданного ранее "**Service ID"**.
5. На странице "**Edit your Services ID Configuration**" поставьте галочку напротив пункта "**Sign in with Apple**" -> нажмите "[**Configure**](#user-content-fn-12)[^12]".&#x20;
6. \
   a) В появившемся окне для раздела "**Web Authentication Configuration**" по умолчанию будет выбран, ранее созданный "**App ID**". \
   б) В разделе "**Register Website URLs**" - подразделе "**Domains and Subdomains**" укажите домен вашего ОП в формате:\
   \- Если ваш домен с www:  <mark style="color:orange;">**`www.domain.domainZone`**</mark>\
   \&#xNAN;***В случае, если ваш ОП расположен на субдомене, то необходимо указывать в формате*** <mark style="color:orange;">**`www.subDomain.domain.domainZone`**</mark>\
   \
   \- Если ваш домен без www:<mark style="color:orange;">**`domain.domainZone`**</mark> \
   \&#xNAN;***В случае, если ваш ОП расположен на субдомене, то необходимо указывать в формате*** <mark style="color:orange;">**`subDomain.domain.domainZone`**</mark>\
   \
   в) В подразделе "**Return URLs**" укажите callback URL в формате <mark style="color:orange;">**`https://www.domain.domainZone/service/auth/apple/callback`**</mark>\
   **Пример**: <mark style="color:green;">**`https://www.boxexchanger.net/service/auth/apple/callback`**</mark>\
   \
   **Пример заполненных полей на** [**скриншоте**](#user-content-fn-13)[^13]. \
   г) После заполнения полей нажмите "**Next**".\
   д) В этом же окне на следующем шаге "**Confirm your web authentication configuration**" нажмите "[**Done**](#user-content-fn-14)[^14]".
7. После закрытия окна из шага 6, на странице "**Edit your Services ID Configuration**" справа сверху нажмите "[**Continue**](#user-content-fn-15)[^15]" -> далее нажмите "[**Save**](#user-content-fn-16)[^16]".
8. Service ID успешно создан и настроен.&#x20;

### Создание ключей авторизации

1. На странице "**Certificates, Identifiers & Profiles**" в разделе "**Keys**" [**нажмите**](#user-content-fn-17)[^17] на значок "**+**".
2. На следующей странице "**Register a New Key**" в поле "**Key Name"** укажите название ключа, к примеру, <mark style="color:green;">**`oauthKey`**</mark> -> установите галочку напротив пункта "**Sign in with Apple**" -> нажмите "[**Configure**](#user-content-fn-18)[^18]" для данного пункта.&#x20;
3. На следующем шаге "**Configure Key**" для поля "**Primary App ID**" выберите ранее созданный "**App ID**" -> нажмите "[**Save**](#user-content-fn-19)[^19]".
4. На странице "**Register a New Key**" справа сверху нажмите "[**Continue**](#user-content-fn-20)[^20]" -> нажмите "[**Register**](#user-content-fn-21)[^21]".&#x20;
5. На следующем шаге "**Download Your Key**" скопируйте в надежное место значение поля "**Key ID**" -> нажмите на кнопку "**Download**" чтобы скачать файл с секретным ключом -> нажмите "**Done**".
6. В правом верхнем углу страницы скопируйте в надежное место значение "**Team ID**" как указано на [**скриншоте**](#user-content-fn-22)[^22].&#x20;
7. На странице "**Certificates, Identifiers & Profiles**" в разделе "**Identifiers**" справа сверху в фильтре выберите "**Services IDs**" -> скопируйте в надежное место значение "**IDENTIFIER**" для созданного ранее "**Service ID**" как указано на [**скриншоте**](#user-content-fn-23)[^23].&#x20;

### Конфигурация в админ панели

1. Перейдите в админ панель скрипта BoxExchanger -> страница "**Система авторизации**" -> найдите метод авторизации "**Apple**".
2. В поле "[**keyID**](#user-content-fn-24)[^24]" укажите скопированное значение "**Key ID**" из пункта 5 предыдущего раздела инструкции.&#x20;
3. В поле "[**teamID**](#user-content-fn-25)[^25]" укажите скопированное значение "**Team ID**" из пункта 6 предыдущего раздела инструкции.&#x20;
4. В поле "[**clientID**](#user-content-fn-26)[^26]" укажите скопированное значение "**IDENTIFIER**" из пункта 7 предыдущего раздела инструкции.&#x20;
5. В поле "[**clientSecret**](#user-content-fn-27)[^27]" укажите секретный ключ из скачанного файла из пункта 5 предыдущего раздела инструкции.  *Вы можете открыть скачанный файл с секретным ключом через удобный для вас текстовый редактор.*&#x20;
6. Переведите ползунок напротив метода авторизации "**Apple**" в активное положение как показано на [**скриншоте**](#user-content-fn-28)[^28].&#x20;
7. В админ панели перейдите на страницу "**Настройки сайта**" -> раздел "[**Server**](#user-content-fn-29)[^29]" -> перезагрузите процессы "**api-http**" по алгоритму ниже.&#x20;

<details>

<summary>Алгоритм действий для перезагрузки процесса</summary>

1. Нажмите "**Reboot**" напротив необходимого процесса.
2. Согласитесь на перезагрузку.
3. Подождите 10 секунд.
4. Перезагрузите страницу и проверьте, что время обновления "Несколько секунд назад".

</details>

8. В итоге в [**окне входа**](#user-content-fn-30)[^30] и [**регистрации**](#user-content-fn-31)[^31] для клиента будет доступен метод авторизации через **Apple**.&#x20;

[^1]: ![](https://3272217808-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKMtUdLxlDooDfKq13Is6%2Fuploads%2FH7xo4IqHO62ZbWBVX46S%2Fimage.png?alt=media\&token=ca012d86-f5fe-4c6b-9837-c7ced931745c)

[^2]: ![](https://3272217808-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKMtUdLxlDooDfKq13Is6%2Fuploads%2Fd1fqfMoyt56wTTPpgouK%2Fimage.png?alt=media\&token=0662582c-90bb-46f0-b4c8-cdbd9e68a7ca)

[^3]: ![](https://3272217808-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKMtUdLxlDooDfKq13Is6%2Fuploads%2Ftm2FJIWs50Ix536a1hUb%2Fimage.png?alt=media\&token=54ffda42-c083-4a90-81aa-89b62acf4627)

[^4]: ![](https://3272217808-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKMtUdLxlDooDfKq13Is6%2Fuploads%2FtsCyH0wtYKkn55yNuWFb%2Fimage.png?alt=media\&token=c0f5ac48-51bc-4290-a03f-3695182d4197)

[^5]: ![](https://3272217808-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKMtUdLxlDooDfKq13Is6%2Fuploads%2FhkIZxy2dZD63leEjoUEu%2Fimage.png?alt=media\&token=02adbb48-4071-4d6a-a487-fcaea8188309)

[^6]: ![](https://3272217808-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKMtUdLxlDooDfKq13Is6%2Fuploads%2FMpS3kkpl2QBYZJPF0NIF%2Fimage.png?alt=media\&token=a8a67278-040c-4155-9968-7363d720cc5e)

[^7]: ![](https://3272217808-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKMtUdLxlDooDfKq13Is6%2Fuploads%2FFlLoteg9V8uSsNx9kAGg%2Fimage.png?alt=media\&token=fa79244e-39bb-4a41-b43a-df27cfa7b11c)

[^8]: ![](https://3272217808-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKMtUdLxlDooDfKq13Is6%2Fuploads%2FMYfVXNEyyjjJozhCXAa7%2Fimage.png?alt=media\&token=a997a413-a0b9-40b7-9e37-67fef0acf90c)

[^9]: ![](https://3272217808-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKMtUdLxlDooDfKq13Is6%2Fuploads%2FCYxq6yLRW5pxxWHysJx6%2Fimage.png?alt=media\&token=240c3be4-e3fd-4f88-939f-25b7064532e1)

[^10]: ![](https://3272217808-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKMtUdLxlDooDfKq13Is6%2Fuploads%2F3PafzF32vCKV43uVEpH1%2Fimage.png?alt=media\&token=2e5fae7e-a879-40dd-a7ed-7b8b2f005ed5)

[^11]: ![](https://3272217808-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKMtUdLxlDooDfKq13Is6%2Fuploads%2FS3cHd4RgcMl1n8giarBT%2Fimage.png?alt=media\&token=aeea148a-44b9-4eee-aaa7-bc595ffaf044)

[^12]: ![](https://3272217808-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKMtUdLxlDooDfKq13Is6%2Fuploads%2FiuOjXtlyYBSWNdZDSBKj%2Fimage.png?alt=media\&token=430f78a5-b4ef-4191-a981-833b50f0d95d)

[^13]: ![](https://3272217808-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKMtUdLxlDooDfKq13Is6%2Fuploads%2Fs6LTN98wVCRSzxS3DHzj%2Fimage.png?alt=media\&token=3c3c96e6-737a-4f70-b46f-125897105f63)

[^14]: ![](https://3272217808-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKMtUdLxlDooDfKq13Is6%2Fuploads%2FzsmNmDZXHWqgVbkuaKs8%2Fimage.png?alt=media\&token=fa41ef62-450f-445f-8876-41fc3b3c9542)

[^15]: ![](https://3272217808-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKMtUdLxlDooDfKq13Is6%2Fuploads%2FTvP35iitj1LfF2wJTk0d%2Fimage.png?alt=media\&token=6bf845ea-998d-4053-80d6-7369600c4c25)

[^16]: ![](https://3272217808-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKMtUdLxlDooDfKq13Is6%2Fuploads%2FYmjZ1KISlVfTlhk35PAL%2Fimage.png?alt=media\&token=4a47b270-22c8-4daa-ad47-edc47d6f2ae7)

[^17]: ![](https://3272217808-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKMtUdLxlDooDfKq13Is6%2Fuploads%2FN0ZBWT4q1TndJklXldcG%2Fimage.png?alt=media\&token=aeb20675-bc2e-4439-891d-8702ffd81eaf)

[^18]: ![](https://3272217808-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKMtUdLxlDooDfKq13Is6%2Fuploads%2FLQgnRt9hZ26flDDka05Y%2Fimage.png?alt=media\&token=86bf66c1-f0d5-4ac8-9e37-37df3d963d92)

[^19]: ![](https://3272217808-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKMtUdLxlDooDfKq13Is6%2Fuploads%2FYSGgqydbDfl9n9XNiVOs%2Fimage.png?alt=media\&token=1852d6d7-be2a-48fc-8831-f631ac8351e1)

[^20]: ![](https://3272217808-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKMtUdLxlDooDfKq13Is6%2Fuploads%2FrlxLdogqKvUu16bdbeyq%2Fimage.png?alt=media\&token=0cff077c-d861-4447-b32a-18e50154ecbc)

[^21]: ![](https://3272217808-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKMtUdLxlDooDfKq13Is6%2Fuploads%2FQmJFx1GYpG6uZn5edpgF%2Fimage.png?alt=media\&token=355a8599-f4d0-4975-80fd-b6b03ae690e0)

[^22]: ![](https://3272217808-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKMtUdLxlDooDfKq13Is6%2Fuploads%2F0bk6HwTgxczB2iEcHnjy%2Fimage.png?alt=media\&token=0aa1c5dd-c69c-4c29-ab49-bddedbcaabb9)

[^23]: ![](https://3272217808-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKMtUdLxlDooDfKq13Is6%2Fuploads%2F8QgmIlaDi6mGJASzJHqT%2Fimage.png?alt=media\&token=e0b37ea3-291c-4063-8cb8-184b9ab80833)

[^24]: ![](https://3272217808-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKMtUdLxlDooDfKq13Is6%2Fuploads%2FSiMXWvoAKvJMWOclAtwD%2Fimage.png?alt=media\&token=f7580481-5439-4d83-9fea-fb122d174c9a)

[^25]: ![](https://3272217808-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKMtUdLxlDooDfKq13Is6%2Fuploads%2Fzp0e366XnH5PFRELLVEQ%2Fimage.png?alt=media\&token=2b9d5d57-f45d-42d7-8c80-c6cb57350467)

[^26]: ![](https://3272217808-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKMtUdLxlDooDfKq13Is6%2Fuploads%2FU4uTPfOfAJ1vbsSLIYfd%2Fimage.png?alt=media\&token=40ffcbb4-2ad2-45c5-a1b0-b58b2f7eaf57)

[^27]: ![](https://3272217808-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKMtUdLxlDooDfKq13Is6%2Fuploads%2FxKeAHSAf2xEcNlQY88V2%2Fimage.png?alt=media\&token=d1b53c40-a32b-4e69-ad2d-2aa73a01f9cb)

[^28]: ![](https://3272217808-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKMtUdLxlDooDfKq13Is6%2Fuploads%2FVnadJloLpRaVy2EsB0DI%2Fimage.png?alt=media\&token=22a5bb05-4844-4e01-ab8a-edd2d48cb98e)

[^29]: ![](https://3272217808-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKMtUdLxlDooDfKq13Is6%2Fuploads%2FKDZ8ylOjDsDmGulOiHOR%2Fimage.png?alt=media\&token=cc5201a5-9899-4eaf-b03d-6e456c4a367c)

[^30]: ![](https://3272217808-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKMtUdLxlDooDfKq13Is6%2Fuploads%2FIrJHMPWQORCtcFlJZCJX%2Fimage.png?alt=media\&token=6a6211cf-521b-41fa-b50c-e0666a6579ca)

[^31]: ![](https://3272217808-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKMtUdLxlDooDfKq13Is6%2Fuploads%2FpBw92Khjx4CF4kD4fpl6%2Fimage.png?alt=media\&token=fe60fb0f-37e5-4a46-853d-f4fd5742172f)
