| |
| -|-|
|
| Резюме | Discourse OAuth2 Basic поддерживает базовых провайдеров OAuth2, предполагая наличие у них JSON-эндпоинта API, где можно получить данные пользователя по токену.
|
| Руководство по установке | Этот плагин включен в ядро Discourse. Отдельная установка плагина не требуется.
Возможности
Этот плагин позволяет использовать базового провайдера OAuth2 для аутентификации в Discourse. Он должен работать со многими провайдерами при условии, что они предоставляют JSON-эндпоинт для получения информации о пользователе, который входит в систему.
Это в основном полезно для тех, кто использует провайдеры входа, не являющиеся очень популярными. Если вы хотите использовать Google, Facebook или Twitter, они уже включены «из коробки», и этот плагин вам не нужен. Вы также можете найти других провайдеров входа в нашем репозитории на GitHub.
Настройка
Базовая настройка
- Сначала зарегистрируйте ваше приложение Discourse у вашего провайдера OAuth2. Вам потребуется указать 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. Обратите внимание, что я пропустил путь к email: 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_email_path, провайдер OAuth2 обязан подтвердить, что пользователь владеет этим адресом электронной почты. Несоблюдение этого требования может привести к захвату аккаунта в Discourse!
Размещено нами? Этот плагин доступен в наших тарифах Business и Enterprise. OAuth 2.0 & OpenID Connect Support | Discourse - Civilized Discussion
Нужно автоматизировать регистрацию пользователей? См. Auto-provisioning user accounts when SSO is enabled