Социальный вход — это возможность предоставить посетителю сайта возможность войти в систему со своими учетными записями в социальных сетях, таких как Facebook, Twitter, LinkedIn и т. д. AEM поддерживает OOTB Facebook и Twitter Социальные входы, но вход через Google не поддерживается OOTB и требует создания собственного провайдера. для поддержки процесса входа в систему для веб-сайтов.

AEM внутренне использует модуль scribejava для поддержки потоков входа в социальные сети, scribejava поддерживает несколько поставщиков и протоколы OAuth 1.0 и OAuth 2.0.

В этом руководстве объясняются шаги и настройки, необходимые для поддержки входа в Google в AEM в качестве облачной версии, то же самое должно работать с минимальными изменениями для других версий AEM.

Предпосылки

  • Аккаунт Google
  • AEM как облачный издатель
  • Образец веб-сайта WKND
  • Git-терминал
  • Мавен

Процесс входа в Google

URL-адрес для входа в AEM

http://localhost:4503/j_security_check?configid=гугл

URL-адрес страницы авторизации

https://accounts.google.com/o/oauth2/auth?response_type=code&client_id=%s&redirect_uri=%s&scope=%s

URL токена доступа (POST)

https://oauth2.googleapis.com/token? grant_type=authorization_code&client_id=&client_secret&code=‹получен код авторизации›&redirect_uri=

Получить данные профиля

https://www.googleapis.com/oauth2/v1/userinfo?alt=json

Шаги

  • Создайте проект в Google Developers Console
  • Настройка пользовательского поставщика Google OAuth
  • Настройка пользователя службы
  • Настройка приложения и поставщика OAuth
  • Включить аутентификацию OAuth
  • Протестируйте процесс входа в систему
  • Поддержка инкапсулированных токенов
  • Синхронизация пользователя Sling Distribution

Создайте проект в Google Developers Console

В качестве первого шага создайте новый проект в Google для настройки клиента OAuth, войдите в https://console.developers.google.com/cloud-resource-manager.

Нажмите «Создать проект»

Введите имя проекта и нажмите «Создать».

Проект создан сейчас

Давайте теперь настроим клиент OAuth, настройки доступа

Найдите «API и службы», нажмите «API и службы».

Нажмите на учетные данные

Нажмите «Создать учетные данные», затем выберите идентификатор клиента OAuth.

Экран согласия должен быть настроен для инициации конфигурации идентификатора клиента OAuth.

Выберите тип пользователя «Внутренний» или «Внешний» в зависимости от ваших требований — «Внутренний» доступен только для пользователей G-Suite.

Введите название приложения, логотип приложения и адрес электронной почты службы поддержки.

Области «электронная почта», «профиль» и «openid» добавлены по умолчанию, области «профиль» достаточно для базовой аутентификации.

Сохраните конфигурации сейчас

Теперь снова нажмите «Создать учетные данные» → Идентификатор клиента OAuth.

Выберите тип приложения «Веб-приложение» и введите имя приложения.

«Авторизованные источники Javascript» — URL-адрес инициирует вход в систему, я использую localhost для демонстрации.

URI авторизованного перенаправления — URL-адрес, который будет вызываться при успешном входе в систему, http://localhost:4503/callback/j_security_check (используйте действительный домен для реальной аутентификации)

Нажмите кнопку «Создать»

Клиент OAuth создан, скопируйте идентификатор клиента и секрет клиента — эти значения необходимы для включения обработчика аутентификации OAuth в AEM.

Чтобы использовать клиент в рабочей среде, экран согласия OAuth должен быть отправлен на утверждение.

Нажмите «Настроить экран согласия» еще раз.

Введите необходимые значения, «Авторизованные домены», «Ссылка на домашнюю страницу приложения», «Ссылка на политику конфиденциальности приложения» и отправьте на утверждение.

Утверждение может занять дни или недели, тем временем проект можно использовать для разработки

Google Project готов к использованию сейчас для тестирования входа в систему.

Настройка пользователя службы

Включите пользователя службы с необходимыми разрешениями для управления пользователями в системе, вы можете использовать одного из существующих пользователей службы с необходимым доступом, я подумал об определении нового пользователя службы (oauth-google-service — имя, указанное в GoogleOAuth2ProviderImpl.java, изменить имя, если нужно)

Создайте системного пользователя с именем oauth-google-service, перейдите к http://localhost:4503/crx/explorer/index.jsp, войдите в систему как пользователь-администратор и нажмите Управление пользователями.

Теперь включите необходимые разрешения для пользователя, перейдите к http://localhost:4503/useradmin (каким-то образом мне все еще удобно использовать пользовательский интерфейс useradmin для управления разрешениями)

Теперь включите сопоставление пользователей службы для пакета провайдера — добавьте запись в поправку к службе сопоставления пользователей службы Apache Sling google.oauth.provider:oauth-google-service=oauth-google-service

Настройка пользовательского поставщика Google OAuth

Как упоминалось ранее, AEM не будет поддерживать аутентификацию Google OOTB, определите нового провайдера для поддержки аутентификации с помощью Google.

Пользовательский поставщик Google можно загрузить с —



GoogleOAuth2ProviderImpl.java — класс поставщика для поддержки аутентификации Google.

GoogleOAuth2Api.java — класс API, расширенный от стандартного Script DefaultApi20 для поддержки интеграции API Google OAuth 2.0.

GoogleOauth2ServiceImpl.java — класс службы для получения токена доступа из ответа службы Google.

Пакет провайдера, включенный с aem-sdk-api jar для AEM в качестве облачной службы, другие версии AEM могут использовать тот же пакет, заменив aem-sdk-api на uber jar.

Клонируем репозиторий — git clone https://github.com/techforum-repo/bundles.git

Разверните пакет google-oauth-provider — измените каталог на bundles\google-oauth-provider и выполните mvn clean install -PautoInstallBundle -Daem.port=4503.

Здесь я собираюсь включить аутентификацию для веб-сайтов издателей, изменить номер порта и при необходимости выполнить развертывание на Author.

После успешного развертывания вы сможете увидеть провайдера Google в диспетчере конфигураций.

oauth.provider.id можно изменить, но то же значение следует использовать при настройке «Adobe Granite OAuth Application and Provider».

Настройка приложения и поставщика OAuth

Теперь давайте включим «Adobe Granite OAuth Application and Provider» для Google.

Идентификатор конфигурации — введите уникальное значение, это значение следует использовать при вызове URL-адреса входа в AEM
Идентификатор клиента — скопируйте значение идентификатора клиента из клиента Google OAuth< br /> Client Secret — скопируйте значение Client Secret из Google OAuth Client
Область действияпрофиль
Идентификатор поставщика — google
Создать пользователей — установите флажок, чтобы создать пользователей AEM для профилей Google
URL обратного вызова — то же значение, настроенное в клиенте Google OAuth ( http://localhost:4503/callback/j_security_check)

Включить аутентификацию OAuth

По умолчанию «Adobe Granite OAuth Authentication Handler» по умолчанию не включен, обработчик можно включить, открыв и сохранив без внесения каких-либо изменений.

Протестируйте процесс входа в систему

Теперь конфигурации готовы, давайте инициируем вход в систему — доступ к http://localhost:4503/j_security_check?configid=google из браузера (в реальном сценарии вы можете включить ссылку или кнопку, указывающую на этот URL). Это приведет пользователя к экрану входа в Google.

Теперь вы войдете на веб-сайт WKND после успешного входа со страницы входа в Google.

Профиль пользователя создается в AEM

Всякий раз, когда данные профиля (например, family_name и Given_name) изменяются в учетной записи Google, то же самое будет отражаться в AEM при последующем входе в систему на основе «конфигурации обработчика синхронизации по умолчанию Apache Jackrabbit Oak».

AEM создает «обработчик синхронизации Apache Jackrabbit Oak по умолчанию», специфичную для каждой реализации поставщика OAuth.

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

Данные профиля пользователя синхронизируются на основе параметра «Время истечения срока действия пользователя», данные пользователя будут синхронизированы при последующем входе в систему после истечения срока действия синхронизированных данных пользователя (по умолчанию 1 час).

Измените конфигурации в соответствии с требованиями.

Поддержка инкапсулированных токенов

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

Дополнительные сведения о поддержке инкапсулированных токенов см. на странице https://docs.adobe.com/content/help/en/experience-manager-65/administering/security/encapsulated-token.html#StatelessAuthenticationwiththeEncapsulatedToken.

Включите поддержку инкапсулированных токенов в «Adobe Granite Token Authentication Handler».

Синхронизация пользователя Sling Distribution

Пользователи, созданные в издателе, должны быть синхронизированы со всеми другими издателями в ферме, чтобы поддерживать бесшовную аутентификацию. Я не нашел хорошего справочного документа, объясняющего синхронизацию пользователей в AEM как Cloud (функции AEM Communities не включены в AEM как Cloud Service, синхронизация пользователей была включена через компоненты сообщества для других версий AEM), планируя охватить пользователя синхронизировать в другом учебнике.

Вывод

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