SSO с TownNews CMS

Кто-нибудь настраивал SSO для сайта Townnews?

Мне неизвестно ни об одном сайте, использующем Townnews или BLOX CMS с SSO для Discourse. Знаете ли вы, можно ли добавить код на сайт, использующий эту службу? Если код SSO для Discourse можно добавить на сайт, возможно, его удастся использовать в качестве провайдера SSO для Discourse.

Извините, я новичок, но я имел в виду использование townnews в качестве источника SSO. Какой код мне нужно добавить на сайт?

Это означает, что TownNews будет провайдером SSO для вашего сайта на Discourse. Чтобы использовать реализацию SSO в Discourse, вам необходимо иметь возможность добавлять код в сервис, выступающий в роли провайдера SSO. Этот код должен интегрироваться в процесс входа в систему данного сервиса. Подробную информацию о необходимом коде можно найти здесь: Официальная поддержка единого входа (SSO) для Discourse.

Для примера рабочего кода посмотрите, как наш плагин для WordPress реализует SSO: wp-discourse/lib/sso-provider at main · discourse/wp-discourse · GitHub.

Также возможно авторизовать пользователей в Discourse через TownNews с помощью OAuth2. Это будет возможно, если TownNews может выступать в роли провайдера OAuth2. Подробные сведения о настройке входа через OAuth2 в Discourse представлены здесь: Базовая поддержка OAuth2. Прежде чем тратить на это много времени, стоит уточнить, может ли TownNews функционировать как провайдер OAuth2. Эту информацию, вероятно, можно найти в их документации.

Я пытаюсь решить вопрос с поставщиком моего сайта, но подумал, что стоит поделиться этой информацией с вами, чтобы узнать, есть ли там данные, которые могут мне помочь. Благодарю вас за уделенное время.


Перенаправление на конечную точку поставщика

У каждого сайта BLOX-CMS есть конечная точка федеративной аутентификации, доступная по одному и тому же зарезервированному URL:

https://www.example.com/tncms/auth/federated/

Потребительский сайт инициирует аутентификацию, перенаправляя браузер пользователя на этот URL. Конечная точка требует параметра return, который должен быть установлен в URL конечной точки потребительского сайта.

Пример URL:

https://www.example.com/tncms/auth/federated/?return=http://vendor.com/login/

Конечная точка также принимает дополнительные параметры:

  • source: Этот параметр и его значение будут переданы URL входа на сайт, если требуется аутентификация пользователя. Шаблоны могут реагировать на это значение для настройки интерфейса формы входа. По умолчанию, если не указано иное, значение равно «federated».

  • reauth: Установите истинное значение, чтобы принудительно отобразить страницу входа независимо от текущего состояния входа пользователя.

Перенаправление на конечную точку потребителя

URL конечной точки потребительского сайта передается поставщику в параметре return, когда пользователь изначально перенаправляется на конечную точку поставщика. После успешной аутентификации на сайте поставщика пользователь будет перенаправлен на этот URL вместе с параметром code. Значение code должно быть использовано для получения данных учетной записи пользователя в последующем вызове веб-сервиса, как описано ниже.

URL конечной точки потребителя может содержать собственные параметры запроса. Параметр code будет объединен с ними, не перезаписывая другие значения.

В зависимости от того, как написаны шаблоны сайта поставщика, пользователь может попасть на конечную точку потребителя без значения параметра code. В этом случае с пользователем следует поступать так, будто он отказался от процесса аутентификации.

Пример ответа при успешном входе (на основе предыдущего примера):

http://vendor.com/login/?code={code}

Где {code} — уникальный идентификатор, используемый в последующем веб-сервисе.

Последующий вызов веб-сервиса

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

Потребительский сайт обратится к действию get модуля пользователя, передав параметр code, полученный от поставщика:

https://www.example.com/tncms/webservice/v1/user/get/?code={code}

Ответом будет объект данных учетной записи пользователя, как описано в документации по веб-сервисам. При недействительном коде будет возвращен пустой ответ.

Код можно использовать только один раз. После извлечения учетной записи пользователя он немедленно становится недействительным, и будущие запросы с ним будут возвращать пустые ответы.

Это выглядит многообещающе: https://help.bloxcms.com/knowledge-base/applications/settings/users/authentication_provider/article_fa0ce6ec-9824-11e4-b296-23bd78ef308a.html:

Параметр Authentication Provider позволяет вашему сайту выступать в роли провайдера аутентификации OpenID. Это означает, что пользователи вашего сайта могут использовать свои учётные данные для входа на другие сайты, которые это разрешают. Другие сайты BLOX CMS могут выступать в качестве клиентских сайтов, поддерживая обмен учётными данными для входа.

Должна быть возможность настроить сайт BLOX CMS так, чтобы он функционировал как провайдер аутентификации OpenID для Discourse. Если это возможно, пользователи смогут входить в ваш форум Discourse через ваш сайт TownNews. Для настройки вам потребуется установить плагин Discourse OpenID Connect (OIDC) на ваш сайт Discourse. Настройка может потребовать некоторых проб и ошибок. Дайте нам знать, если вы столкнётесь с трудностями, и мы постараемся помочь.