2017-02-19 5 views
8

Я создал веб-приложение в угловом 2 для клиентской стороны и NodeJS с фреймворком express для серверной части.Аутентификация с разделенным клиентом и сервером

Для клиентской стороны я сгенерировал проект с angular-cli, который работает на lite-server, поэтому мой клиент и сервер работают на двух разных сервисах.

Я хочу интегрировать аутентификацию ADFS. Чтобы реализовать аутентификацию, я использую пакет passport-saml. На моей серверной стороне есть промежуточное ПО API, для которого требуется аутентификация пользователя.

Процесс аутентификации отлично работает при непосредственном доступе к серверу (без клиента).

Однако я не могу получить доступ к API через @angular/http. Я пробовал простой запрос GET с сервера (с промежуточным программным обеспечением в конечной точке), и в результате я получаю страницу аутентификации без перенаправления (я не думаю, что это основная проблема, но фактическая реализация).

Как правильно реализовать аутентификацию при использовании отдельных служб для сервера и клиента?

+0

@ Ron537_ сделал вы получили любое полезное решение? –

ответ

0

Вы не даете подробностей о том, что произошло с отказом, когда клиент выполнил GET на сервере. Было ли это 400? 401? 404? 500? вы получили ошибку CORS?

Почему вы используете GET для своей конечной точки входа. Вы должны быть учетной записью POSTing прямо в полезной нагрузке POST?

В любом случае, в вашем угловом коде 2 вы должны иметь авторизованную службу с методом входа в систему. Метод Логин должен сделать что-то вроде ..

login(credentials) { 
    return http.post(your_server_url, payload); 
} 

вы можете подписаться на Наблюдаемые возвращаемый методом авторизации и, если все хорошо router.navigate к домашней странице или если он не хорошо выводить сообщения об ошибках входа в систему.

+0

not answevv – Lijo

2

Привет, Я тоже столкнулся с той же проблемой, что и мой угловой проект, размещенный на порте 4200. и мой узел на 3000 портах. Сложно реализовать паспорт, когда у нас есть 2 порта.

Этап 1 Сделать угловой проект статическим, выполнив ng build в общую папку. убедитесь, что angular-cli.json имеет *"outDir": "../public",*

шаг 2 Теперь мы можем использовать тот же самый порт узла для доступа угловых корней добавьте ниже коды в узле app.js

var path = require('path'); 
    // Set Static Folder 
app.use(express.static(path.join(__dirname, 'public'))); 
app.get('*', function(req, res) { 
    res.sendFile(path.join(__dirname, 'public/index.html')); 
}); 

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

шаг 3: Теперь мы можем добавить кнопку паспорта для входа в интерфейс и дать URL-адрес <a href="/passport/auth/twitter">twitter</a>

это не пояснительные средства чувствовать спросить меня сомнения.

+1

Ваше решение будет работать, но моя цель состояла в том, чтобы отделить клиента от сервера и не объединить их вместе на одном и том же порту. То, что я сделал, я использовал 'iframe' для подключения клиента непосредственно к странице аутентификации сервера, т.е./auth/login, а затем, после успешного завершения аутентификации пользователя, я использовал механизм EJS для отображения пользовательских данных на странице и передал их для клиента (вне iframe) с parent.postMessage. Таким образом, я могу поддерживать клиент и сервер на разных портах и ​​архивировать аутентификацию с помощью паспорта. – Ron537

+0

Я также ищу отдельный клиент и сервер. Совмещение клиента и сервера на одном и том же порту не является для меня решением. –

0

Установить отдельные адреса для интерфейса и сервера в ..src/сред/environment.ts

export const environment = { 
    production: false, 
    BASE_URL: 'http://localhost:4200', 
    API_BASE_URL: 'http://localhost:5000', 
}; 

В узле app.js

app.use('/', express.static('public')); 
    app.get('*', function (req, res) { 
    res.sendFile(path.join(process.cwd(), 'public', 'index.html')); 
    }); 
+0

Будет ли 'passport.js' рассматривать его как тот же домен? и как насчет 'сеанса'. –

+0

Я не уверен в этом. Я использовал его в своем приложении с Angular2 и Node.js, который работает хорошо. –

+0

Вы написали какой-либо код для разрешения междоменных запросов (CORS) в файле 'Express'' app.js'? –