Удаленная авторизация

21 августа 2017, 18:14

Идея заключается в том, что на сайте-клиенте и сайте-сервере запускаются 2 сниппета, которые позволяют авторизовать клиента через сервер.

officeRemoteServer

Этот сниппет запускается на сервере, через который будут заходить пользователи. Адрес, на котором вызван этот сниппет, должен быть указан у клиента — пускай это будет site.com/remote/login, для примера.

При переходе клиента на сервер, тот проверяет статус авторизации. Если к нам пришел гость — он редиректится на страницу логина сервера (если она не указана, то на родитель документа site.com/remote/). Там вы можете использовать officeAuth, HybridAuth, Login — что угодно, лишь бы авторизовать юзера.

Сразу после авторизации юзер должен быть отправлен обратно на site.com/remote/login — и там уже сниппет получит информацию о нем, сохранит в кэш на 10 секунд, сгенерирует авторизационный токен и отправит юзера с ним по тому адресу, с которого он пришел.

Название По умолчанию Описание
&hosts Список доменов через запятую, которым разрешено обращаться к странице авторизации.
&key Обязательный ключ шифрования данных для защиты передаваемой информации. Ключ должен быть одинаковым на сервере и клиенте.
&authId 0 Id страницы сайта, для авторизации пользователя. После успешной авторизации пользователь должен быть отправлен обратно на сниппет "officeRemoteServer".

У сниппета авторизации нужно указать

&loginResourceId=`id страницы site.com/remote/login`

Выходит, что на сервере у нас две страницы. site.com/remote/ (id = 1)

[[!officeAuth?
    &loginResourceId=`2`
]]

site.com/remote/login (id = 2)

[[!officeRemoteServer?
    &hosts=`site2.ru`
    &key=`h4O58eqwt987Jmqewj`
    &authId=`1`
]]

officeRemoteAuth

Этот сниппет показывает форму входа и выхода.

В форме входа должна быть авторизационная ссылка site.com/remote/login, при переходе по которой юзер начинает авторизацию. Если всё в порядке — он авторизуется на сервере и возвращается на клиент с токеном, по которому клиент может получить информацию о пользователе у сервера.

Эта информация шифруется указанным ключом &key, и после получения данных пользователь создается\обновляется и авторизуется уже на клиенте.

При выходе с сайта клиента по такому же алгоритму (только без обмена информацией о юзере) происходит выход и с сервера.

Большинство параметров совпадает с officeAuth (чанки, группы, контексты, запоминать и т.д.), но есть и уникальные:

Название По умолчанию Описание
&tplLogin tpl.Office.remote.login Этот чанк будет показан анонимному пользователю, то есть любому гостю.
&tplLogout tpl.Office.remote.logout Этот чанк будет показан авторизованному пользователю.
&groups Список групп для регистрации пользователя, через запятую. Можно указывать роль юзера в группе через двоеточие. Например, &groups=`Users:1` добавит юзера в группу "Users" с ролью "member".
&rememberme 1 Запомниает пользователя на долгое время. По умолчанию - включено.
&loginContext Основной контекст для авторизации. По умолчанию - текущий.
&addContexts Дополнительные контексты, через запятую. Например, &addContexts=`web,ru,en`
&loginResourceId 0 Идентификатор ресурса, на который отправлять юзера после авторизации. По умолчанию, это 0 - обновляет текущую страницу.
&logoutResourceId 0 Идентификатор ресурса, на который отправлять юзера после завершения сессии. По умолчанию, это 0 - обновляет текущую страницу.
&updateUser 1 Разрешение обновлять существующих пользователей данными с удалённого сервера.
&createUser 1 Разрешение создавать новых пользователей.
&remote Обязательный адрес страницы на удалённом сервере с вызовом сниппета "officeAuthServer".
&key Обязательный ключ шифрования данных для защиты передаваемой информации. Ключ должен быть одинаковым на сервере и клиенте.

На сайте клиента у нас сниппет вызывается примерно так:

[[!officeRemoteAuth?
    &key=`h4O58eqwt987Jmqewj`
    &remote=`http://site.com/remote/login`
    &groups=`Users`
]]

Предыдущий документ
История заказов MS2
Следующий документ
Авторизация