| Краткое содержание | Discourse OAuth2 Basic поддерживает базовых провайдеров OAuth2, предполагая наличие у них JSON-эндпоинта, через который можно получить данные пользователя по токену. | |
| Руководство по установке | Этот плагин включён в ядро Discourse. Отдельная установка плагина не требуется. |
Возможности
Этот плагин позволяет использовать базового провайдера OAuth2 для аутентификации в Discourse. Он должен работать со многими провайдерами при условии, что они предоставляют JSON-эндпоинт для получения информации о пользователе, который входит в систему.
Это в основном полезно для тех, кто использует провайдеров входа, которые не очень популярны. Если вы хотите использовать Google, Facebook или Twitter, они уже включены по умолчанию, и вам не нужен этот плагин. Вы также можете поискать других провайдеров входа в нашем репозитории на Github.
Настройка
Базовая настройка
- Сначала зарегистрируйте ваше приложение Discourse у вашего провайдера OAuth2. Вам потребуется указать Redirect URI, который будет следующим:
http://DISCOURSE_HOST/auth/oauth2_basic/callback
Замените
DISCOURSE_HOSTна соответствующее значение и убедитесь, что вы используетеhttps, если он включён. Провайдер OAuth2 должен предоставить вамclient IDиsecret, а также несколько URL-адресов.
- Перейдите в Администрирование → Настройки → Вход через OAuth2 и заполните базовую настройку для провайдера OAuth2:
oauth2_enabled- отметьте этот пункт, чтобы включить функциюoauth2_client_id- идентификатор клиента от вашего провайдераoauth2_client_secret- секретный ключ клиента от вашего провайдераoauth2_authorize_url- URL авторизации вашего провайдераoauth2_token_url- URL токена вашего провайдера.
Если вы не можете определить значения для вышеуказанных настроек, обратитесь к документации для разработчиков вашего провайдера или свяжитесь с его службой поддержки.
Настройка JSON-эндпоинта пользователя
Теперь Discourse может получать токен авторизации от вашего провайдера OAuth2. К сожалению, для завершения аутентификации Discourse требует дополнительной информации.
Нам нужен API-эндпоинт, через который можно получить информацию о пользователе на основе токена.
Например, провайдер OAuth2 SoundCloud предоставляет такой URL. Если у вас есть токен OAuth2 для SoundCloud, вы можете отправить GET-запрос к https://api.soundcloud.com/me?oauth_token=A_VALID_TOKEN и получите JSON-объект с информацией о пользователе.
Чтобы настроить это в Discourse, нам нужно установить значение настройки oauth2_user_json_url. В данном случае мы введем следующее значение:
https://api.soundcloud.com/me?oauth_token=:token
Часть с :token указывает Discourse, что это значение нужно заменить на токен авторизации, полученный после завершения аутентификации.
Остался один последний шаг. Нам нужно сообщить Discourse, какие атрибуты доступны в полученном JSON. Вот пример ответа от SoundCloud:
{
"id": 3207,
"permalink": "jwagener",
"username": "Johannes Wagener",
"uri": "https://api.soundcloud.com/users/3207",
"permalink_url": "http://soundcloud.com/jwagener",
"avatar_url": "http://i1.sndcdn.com/avatars-000001552142-pbw8yd-large.jpg?142a848",
"country": "Germany",
"full_name": "Johannes Wagener",
"city": "Berlin"
}
Переменные oauth2_json_user_id_path, oauth2_json_username_path, oauth2_json_name_path и oauth2_json_email_path должны быть установлены так, чтобы указывать на соответствующие атрибуты в JSON.
Единственным обязательным атрибутом является id — он нам нужен, чтобы при последующем входе пользователя мы могли найти правильный аккаунт. Остальные атрибуты полезны, если они доступны — они ускорят процесс регистрации пользователя, так как поля будут автоматически заполнены в форме.
Вот как я настроил параметры путей JSON:
oauth2_json_user_id_path: 'id'
oauth2_json_username_path: 'permalink'
oauth2_json_name_path: 'full_name'
Я использовал permalink, потому что он кажется более похожим на то, что Discourse ожидает в качестве имени пользователя, чем поле username в их JSON. Обратите внимание, что я не указал путь к электронной почте: SoundCloud не предоставляет email, поэтому пользователю придётся ввести и подтвердить его при первой регистрации в Discourse.
Если нужные вам свойства в JSON-объекте вложены друг в друга, вы можете использовать точки. Например, если API возвращает структуру такого вида:
{
"user": {
"id": 1234,
"email": {
"address": "test@example.com"
}
}
}
Вы можете использовать user.id для oauth2_json_user_id_path и user.email.address для oauth2_json_email_path.
Если сам ключ содержит точки, его нужно заключить в двойные кавычки или экранировать точки обратным слэшем. Например, для следующего JSON:
{
"example.com/uid": "myuid"
}
вы укажете путь как example\.com/uid или "example.com/uid".
Синхронизация групп и полей пользователя
-
oauth2_json_groups_path: путь в JSON, содержащий группы пользователя в виде массива строк. После первого входа эти группы станут доступны для выбора в разделе «Связанные группы» настроек групп Discourse. Оставьте пустым, чтобы отключить синхронизацию групп. -
oauth2_user_field_mappings: сопоставление путей в JSON, которые будут сохранены в пользовательских полях Discourse. Пользовательские поля идентифицируются по их числовому ID, который можно найти в URL при их редактировании через панель администратора.
Если вы установили
oauth2_json_email_path, провайдер OAuth2 должен подтвердить, что пользователь владеет этим адресом электронной почты. Невыполнение этого требования может привести к захвату аккаунта в Discourse!
Размещено у нас? Этот плагин доступен в наших тарифах Business и Enterprise. OAuth 2.0 & OpenID Connect Support | Discourse - Civilized Discussion
Нужно автоматизировать регистрацию пользователей? См. Auto-provisioning user accounts when SSO is enabled