Удаленная авторизация
Идея заключается в том, что на сайте-клиенте и сайте-сервере запускаются 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`
]]