Проблемы безопасности токена доступа AngularJS
Как лучше хранить токен доступа в AngularJS после его получения с сервера авторизации? Я видел много предложений использовать сервис localStorage, но потом я прочитал другие посты / блоги, в которых говорится, что никогда не использовать localStorage для хранения токенов, это небезопасно и т. Д.
Мне трудно сосредоточиться на безопасности с Angular из-за смешанной информации, как описано выше.
1 ответ
Решение
Я думаю,
- Генерация токена (конфиденциальная информация на стороне сервера)
- Подписать и зашифровать сгенерированный токен с помощью машинного ключа, который известен только серверу. И получите зашифрованный токен.
- Затем сохраните зашифрованный токен, полученный на шаге 2, в куки.
- Срок годности печенья должен быть очень меньше. Сделать httponly cookie.
При аутентификации куки
- Проверить куки
- Расшифруйте ключом машины и убедитесь, что он отправляется только нашим сервером и с тем же ключом crc.
- Аутентифицируйте полученный токен, если шаг 2 выше хорош.
Angularjs Автоматически добавляет заголовки в каждом запросе $ http,
AngularAppFactory.GetApp=function(appName){
var app = angular.module(appName, []);
app.factory('httpRequestInterceptor', ['$rootScope', function($rootScope)
{
return {
request: function($config) {
if( $rootScope.user.authToken )
{
$config.headers['id'] = $rootScope.user.id;
$config.headers['auth-token'] = $rootScope.user.authToken;
}
return $config;
}
};
}]);
app.config(function ($httpProvider) {
$httpProvider.interceptors.push('httpRequestInterceptor');
});
return app;
}
//Whenever you need to get new angular app, you can call this function.
app = AngularAppFactory.GetApp('appName');