Смена состояния пользовательской веб сесси

lionk

Well-Known Member
05.04.2007
310
3
#1
Вобщем вопрос вот какой.
Можно ли как то сменить пользовательскую веб сессию с анонимной на авторизированную на стороне сервера (в ssjs к пирмеру).

Читал статью как делают вход по гугол\фейсбук логину.
Алгоритм простой:
-пользователь с клиентской стороны логинится в гугле, получает подписаный гуглом аксес токен и отдаёт его серверу
-сервер со своей стороны используя токен конектитя к гуглу и получает инфу о пользователе (например мыло)
-и потом со своей стороны меняет статус веб-сесси от которой получил токен на авторизированную под именем, связаным с полученной почтой.

вроде всё просто, в примере на PHP пользователя авторизировали одной командой.

но как это сделать в лотусе?
 

rinsk

Well-Known Member
Lotus team
12.11.2009
895
84
Казань
#2
Это использование CAS - типа такого:
Чтобы видеть этот контент необходимо: Войти или зарегистрироваться

Самому интересно. Все в общем то обычно - главная затыка - сгенерировать LTPA токен для полученного от CAS пользователя...
 

alexas1

Well-Known Member
Lotus team
10.04.2014
688
238
#4
но как это сделать в лотусе?
А нафига в домине на авторизации токен? И зачем на гуглу смотреть? У него свои тараканы.
Если юзер доминошный то:
юзер конектится на хепагу, для которой разрешен anonimous (настраивается в ACL xpages: All Properties Xpage -> data\acl) с нужной инфой
дальше, или кнопа "войди не понарошку", либо, автоматом, скриптом на beforePageLoad вызвать логин-диалог или логин-страничку и, при успехе, средиректить с этой странички на нужную. Можно редиректить, в зависимости от прав, на разные странички.
Или, в зависимости от ACL разрешить напр. редактирование:
Java:
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
................................
  <xp:this.acl>
	<xp:acl>
	   <xp:this.entries>
		  <xp:aclEntry type="ANONYMOUS" right="READER"></xp:aclEntry>
		  <xp:aclEntry type="DEFAULT" right="EDITOR"></xp:aclEntry>
	   </xp:this.entries>
	</xp:acl>
</xp:this.acl>
...................................
</xp:view>
Примеров логин-диалогов в инете море.
=================================
А если не доминошный, то токен, хотя он не решает проблем секурити.
Тут действия - запросить у сервера некую инфу на некий пароль (это уж своя "секуризация";)). Сервер отдаёт её с некой "защитой" (токен)
и дальше тот же редирект или разрешения на редактирование.
И не надо тут ничего мудрить, задачи стандартные: запросить у сервака инфу (обратившись к агенту или, хоть, попробовать её найти напр. в вьюшке по ключу)\получить ответ\отреагировать нужным образом.
 

lionk

Well-Known Member
05.04.2007
310
3
#7
Примеров логин-диалогов в инете море.
ты не понял. сделать свой аякс логин диалог не проблема.
ягодка в том что пользователю не нужен этот диалог вообще.
при данной авторизации пользователь вообще не вводит доминошный пароль. все тяготы безопастности лежат на гугле (сразу в сторону откладывай обсуждения надёжности такой модели).
идиология - если ты авторизовался раз в гугле, то авторизован и в домино.
выгода одна - убрать дополнительный шаг авторизиции(ввода логина\пароля домино). и всё. банальное удобство.

тоже нагуглил
вот пример как залогинится если он у тебя уже есть.
Чтобы видеть этот контент необходимо: Войти или зарегистрироваться


а где взять
public final String SSO_DOMINO_SECRETFIELD="LTPA_DominoSecret";
public final String SSO_DOMINO_DURATIONFIELD="LTPA_TokenExpiration";
из этого примера?
Чтобы видеть этот контент необходимо: Войти или зарегистрироваться


почитал апи.
в ssjs есть такой вызов session.getSessionToken() должен дать текущий токен пользователя.
засунул компутед поле - получаю ошибку, ЧЯДНТ?
 

rinsk

Well-Known Member
Lotus team
12.11.2009
895
84
Казань
#8
а где взять
public final String SSO_DOMINO_SECRETFIELD="LTPA_DominoSecret";
public final String SSO_DOMINO_DURATIONFIELD="LTPA_TokenExpiration";
из этого примера?
он берет ее из АК сервера.
и конструирует токен из секрет ключа, даты устаревания и т.п....
т.е. при этом юзер может вообще быть левым. и секурность базируется на SHA1 хеше от всего этого компота.

в ssjs есть такой вызов session.getSessionToken() должен дать текущий токен пользователя.
ну а откуда текущий возметься если его еще нет?:)
 

rinsk

Well-Known Member
Lotus team
12.11.2009
895
84
Казань
#12
стоп, а у меня Single-Server авторизация. неужели она накладывает ограничения.
из хелпа - "The name of a server configured for Single Sign-on..."
Вообще говоря .getSessionToken() для первоначальной задачи мало полезно.


Пример из
Чтобы видеть этот контент необходимо: Войти или зарегистрироваться
можно модиклицировать - в ф-цию
public String generateLtpaToken(String userName) добавить в качестве параметров ,duration и ltpaSecret и можно использовать в LS2J для генерации токена. Надо заметить что это именно генерация LTPA1, что в принципе достаточно для авторизации в домино...
 

lionk

Well-Known Member
05.04.2007
310
3
#13
Перенастроил на SSO, взял библиотеку и заработало. шок.
Не понятно как но генерит токен, и он рабочий.

Трабла только с кириллицей. Имя залогиненого пользователя выходит таким ?????????/OU/C и соответственно ацл базы не работает.
Залил рекомендуемые либы, не помогло.
Думаю может проблема в лангпаке, если у кого есть к 9.0.1 линукс, поделитесь :angelic:.
 

rinsk

Well-Known Member
Lotus team
12.11.2009
895
84
Казань
#14
Перенастроил на SSO, взял библиотеку и заработало
какую из?
Я public String generateLtpaToken переделал для использования LS2J и оно генерит токен - с редиректом пока не проверял..
Т.е. если из клиента ЛН авторизоватся на сайте - то не нужен getSessionToken... можно будет брать любой ключ с сервера...
 

lionk

Well-Known Member
05.04.2007
310
3
#15
вот эту.
Чтобы видеть этот контент необходимо: Войти или зарегистрироваться


там же в примере:
response.setHeader("Set-Cookie", "LtpaToken=" + token + "; domain=.developi.info; path=/");
facesContext.getExternalContext().redirect(someUrl);

устанавливаешь куку и просто рефрешиш страничку. домино при рафреше хавает токен и присваивает сессии права пользователя закодированного в токене из куки.
 

rinsk

Well-Known Member
Lotus team
12.11.2009
895
84
Казань
#16
Ну тогда прикрутить CAS нет проблем) и вообще - можно реализовать произвольный алгоритм авторизации в домино - даже по CallBack sms...
 

rinsk

Well-Known Member
Lotus team
12.11.2009
895
84
Казань
#17
Могу сообщить, что jasig CAS к домино прикручен - на очереди SPNEGO\ntlm через CAS+Domino и интеграция c ЕСИАиА (портал госуслуг - SAML).
SPNEGO через CAS привлекателен тем, что не нужны заморочки с членством в домене сервера домино...
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 433
351
homepage.mac.com
#18
у меня вопрос, если есть фронт - то зачем токен (доминошный)?
ведь фронт просто может сунуть домине юзера
 
Последнее редактирование модератором:

rinsk

Well-Known Member
Lotus team
12.11.2009
895
84
Казань
#19
А как например фронт сунет юзера доминошного?
И зачем фронту его сувать? Если например есть фигова туча сервисов работающих от одного центра авторизации... Что, доминоха рыжый что ли?:)
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 433
351
homepage.mac.com
#20
ну доминошного - это условно - того, кот. домина понимает, здесь больше вопрос - зачем доминошный токен