2016-10-16 2 views
0

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

Person A logs into the front end application 
Person A makes a request to the front end system 
Front end system makes a service (REST) call to the back end system 
Back end system determines if person A has the correct role to make the request 
Back end system makes or denies the request 

Вот что я имею в виду:

2 sailsJS приложения. Один, который обрабатывает аутентификацию переднего конца &, и тот, который обрабатывает доступ на основе доступа к базе данных на основе обратной связи.

Я подумываю использовать разрешения на паруса для приложения на задней панели, а также права на паруса или паруса-auth для передней части. Оба являются обертками для passport.js.

Долгий способ сделать это (и я не уверен, правильный путь, так как она требует перенаправление серверной системы) заключается в использовании какого-то единого входа (https://www.npmjs.com/package/passport-sso)

То, что я предпочел бы делать это пересылка сеанса с запросом. Что-то вроде

var putArgs = { 
     data: myData, 
     headers: {"session": req.session} 
    } 

    client.put("http://localhost:81/myServiceEndpoint", putArgs, function(data, response){ 
     //Do something with response 
    }) 

я планирую использовать Redis для кэша сеанса, так что есть способ для обоих приложений использовать экземпляр же Redis и передать ключ для сессии?

ПРИМЕЧАНИЕ:

Если все сделано правильно, то пользователь не будет иметь какое-либо взаимодействия с задним концом системой. Система внешнего интерфейса сделает запрос к бэкэнд-системе от имени пользователя.

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

ответ

0

Как я это сделал, это иметь один центральный SailsJS REST API, который при наличии действительных учетных данных пользователя возвращает токен аутентификации.

В настоящее время у нас есть два интерфейса (один SailsJS, один EmberJS), которые хранят этот токен в качестве ключа localStorage с тем же именем (например, my-site-token). Затем, если любой из интерфейсов видит это в localStorage, они снабжают его любыми запросами REST, hey presto, SSO. Без необходимости хранить сеансы в любом месте. Знак - это сеанс.

+0

Как вы проходите токен? Также как центральный API знает, что делать с токеном, чтобы связать его с сеансом? –

+0

Токен поставляется в качестве параметра заголовка с запросом REST. Токен является токеном JSON (https://github.com/auth0/node-jsonwebtoken), который содержит пользовательский объект, подписанный с помощью частного токена. К интерфейсу, это нечитаемая строка буквенно-цифровых символов, модуль токена JSON преобразует это в информацию о пользователе в конце. В вашем случае ваши сессии могут иметь UUID, который передается внутри токена. –

Смежные вопросы