Подтвердить что ты не робот

Как достичь безопасной (!) Системы аутентификации в приложении angularjs?

Я новичок в angularjs...

Я прочитал документы и закончил учебник; я тоже пробовал что-то другое, и все начинает иметь смысл для меня.

Теперь мне интересно, как создать безопасную систему аутентификации .

Простая часть: нет кода, я опишу операции, которые выполняет мой код:

У меня классическая форма: имя пользователя и ввод пароля.

Пользователь заполняет форму и нажимает клавишу ENTER.

Запускается запрос ajax, и ответ JSON говорит мне что-то вроде "ОК, я знаю тебя" или "Я не знаю, кто ты".

Теперь мне нужно сохранить статус зарегистрированного посетителя (или не войти в систему) между различными представлениями моего приложения.

Я читал в Интернете, что для достижения этой цели кто-то задает переменную ($ scope.isLogged = true), кто-то использует файлы cookie; но переменные javascript и файлы cookie могут быть легко отредактированы с использованием firebug или похожих инструментов разработки.

... и, наконец, вопрос:

Итак, есть ли у вас предложение создать безопасную систему аутентификации в приложении angularjs?

4b9b3361

Ответ 1

Вы не можете разрешить что-либо в angularjs, так как пользователь имеет полный контроль среды выполнения (а именно, браузера). Каждая проверка, случай, если - все, что вы можете придумать, может быть изменено. Существуют библиотеки javascript, которые используют асимметричные ключи для локального шифрования для хранения локальных данных несколько безопасно, но на самом деле они не то, что вы ищете.

Вы можете, и вы должны, санкционировать вещи на сервере - стандартный способ, которым вы могли бы сделать это в обычном приложении - используя сеанс; специальный код не требуется, ajax-вызовы используют обычные файлы cookie сеанса. Приложению не нужно знать, была ли она аутентифицирована или нет. Нужно только проверить, что думает сервер.

С точки зрения вашего приложения angularjs "вход в систему" ​​или "выход из системы" является лишь подсказкой gui для пользователя.

Ответ 2

Возможно, вы нашли решение, но в настоящее время я составил схему аутентификации, которую я реализую в своем приложении Angular.

В .run приложение зарегистрировано с параметром ActiveSession на false. Затем он проверяет, имеет ли браузер cookie с токеном и userId.

Если да, отметьте токен + userId на сервере и обновите токен как на сервере, так и на локальном (токен - это уникальный ключ для каждого пользователя)

Если NO показывает регистрационную форму, проверьте учетные данные и снова, если они действительны, запрос сервера t получает новый токен и сохраняет его локально.

Токен используется для создания постоянной регистрации (помните меня в течение 3 недель) или когда пользователь обновляет страницу браузера.

Спасибо

Authentication Scheme in Angular.js

Ответ 3

Прошло 3 месяца с тех пор, как я задал этот вопрос... и теперь я хотел бы поделиться тем, что стало моим любимым подходом, когда я должен заниматься аутентификацией пользователей в веб-приложении, построенном над angularjs.

Конечно, ответ fdreger по-прежнему остается отличным ответом...

Вы не можете разрешить что-либо в angularjs, поскольку пользователь имеет полный controll среды выполнения (а именно, браузера).

С точки зрения вашего приложения angularjs, будучи "вошедшим в систему", или "вышла из системы" - это всего лишь подсказка gui для пользователя.

Итак, кратко мой подход состоит в следующем:

1) привязать к каждому маршруту дополнительную информацию о самом маршруте.

$routeProvider.when('/login', { 
    templateUrl: 'partials/login.html', controller: 'loginCtrl', isFree: true
});

2) использовать службу для передачи данных о пользователе и его статус проверки подлинности.

services.factory('User', [function() {
    return {
        isLogged: false,
        username: ''
    };
}]);

3) каждый раз, когда пользователь пытается получить доступ к новому маршруту, проверьте, есть ли у него разрешение для доступа.

$root.$on('$routeChangeStart', function(event, currRoute, prevRoute){
    // prevRoute.isFree tell me if this route is available for all the users, or only for registered user.
    // User.isLogged tell me if the user is logged
})

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

Ответ 4

Прежде всего: данные на стороне клиента всегда можно манипулировать или подделывать.

До тех пор, пока действительные идентификаторы сеансов не легко угадываются, и такие меры, как связывание токенов сеанса с IP-адресом клиента, не имеют большого значения.

Вы могли бы, теоретически, также шифровать файл cookie, если вы это делаете на стороне сервера.

Подробнее о том, как зашифровать файлы cookie, см. в документах вашей серверной части (например http://expressjs.com/api.html#res.cookie для Express.js)

Ответ 5

Вам нужно узнать о его стороне сервера/базе данных.

Пользовательские логины должны храниться где-то - в 99,9% случаев это в базе данных на стороне сервера.

В идеале для действительно защищенной системы вам нужна система членства на стороне сервера (серверная сторона), которая хранит сеанс в таблице базы данных, которая связана с таблицей-членом, которая хранит зашифрованный пароль, но также предоставляет интерфейс RESTful, в котором вы можете построить ваши ави звонки.

Один Script, который я успешно использовал, был Amember https://www.amember.com/. Это действительно эффективный способ пойти, хотя есть много других Script, у меня был большой успех с этим. Это также PHP, поэтому вы можете построить свой сборник API для своего angular http вызывает очень легко.

Все эти фреймворки javascript велики, но эффект заключается в том, что теперь слишком много слишком много внимания уделяют переднему концу вещей - изучите базу данных и бэкэнда!: -)