Как безопасно установить заголовок авторизации с помощью angularJs?

Обычно для аутентификации в веб-службах используется заголовок авторизации, который содержит секретный токен. А поскольку безопасность этого механизма зависит от того, является ли токен секретным, следует позаботиться о том, чтобы этот токен не стал объектом утечки.

В Интернете есть бесчисленное количество руководств, в которых объясняется, как такой заголовок авторизации может быть установлен с помощью angular, и, по крайней мере, те, которые я действительно читал, используют перехватчик $http, и теперь один из них обсуждает, что токен не утек.

Есть несколько общедоступных и частных API, которые можно использовать для междоменного взаимодействия благодаря CORS. И, очевидно, я не хочу отправлять свои внутренние токены авторизации ни по одному из этих запросов.

На ум приходят некоторые другие методы, такие как установка токена вручную только для каждого запроса, но это означает много повторяющегося кода. Сервер $http может быть обернут службой $authenticatedHttp, чтобы он всегда отображался из используемого объекта, независимо от того, является ли он аутентифицированной службой или обычной. Однако служба $http имеет так много методов, которые нужно обернуть.

Есть ли лучшее решение?

ОБНОВЛЕНИЕ

Из ответов у меня сложилось впечатление, что мой вопрос не был понят. Я пробую это на более конкретном примере:

У меня есть частная веб-страница. Люди должны входить в систему с именем пользователя/паролем, и скажем для простоты, что мы используем базовую аутентификацию HTTP, поэтому имя пользователя/пароль закодированы в bas64 и передаются при каждом запросе в HTTP-заголовке «Авторизация». Пока проблем нет.

Но есть отличный и бесплатный виджет погоды. Я могу получить текущую информацию о погоде в формате JSON из https://myWhateverWeatherService.tld/weather.json. После входа в мой частный веб-сервис я также получаю информацию о погоде (CORS позволяет мне это делать).

Проблема в том, что, хотя myWhateverWeatherService.tld вообще не требует никакой аутентификации, служба angular $http все равно добавит заголовок авторизации. И я не доверяю ребятам из myWhateverWeatherService.tld. Может быть, они просто настроили службу, чтобы украсть токен авторизации и делать с ним много неприятных вещей.

Мне нужен надежный способ справиться с этим. Я уже думал о проверке URL-адреса с помощью некоторого регулярного выражения в перехватчике. Это возможно, но также нетрудно забыть об определенном случае, который мое регулярное выражение пропустит.


person yankee    schedule 03.09.2014    source источник


Ответы (1)


Токен всегда отправляется по сети, я думаю, это самая уязвимая его часть.

Поскольку токен всегда должен присутствовать в самом заголовке http, единственный способ сделать запрос более безопасным — это зашифровать весь запрос, и для этого вы должны использовать SSL.

Если вас беспокоит безопасность хранения токена на клиентской машине, вы можете хранить его только в памяти браузера, не сохраняя его в локальном хранилище или что-то в этом роде. Таким образом, каждый раз, когда пользователь закрывает браузер и открывает его снова, он должен войти в систему.

person Fedaykin    schedule 03.09.2014
comment
Ответом на отправку по сети является SSL, это легко. Я думаю, вы неправильно поняли мой вопрос. Заголовок запроса не всегда должен присутствовать. Он не должен присутствовать в запросах к какому-либо стороннему серверу, который не находится под моим контролем. - person yankee; 04.09.2014
comment
Вы абсолютно правы, я полностью пропустил эту часть. В этом случае единственный способ избежать отправки вашего токена третьим лицам — разделить эти вызовы. Если их меньше, чем ваших собственных вызовов, я рекомендую вам создать оболочку, которая удаляет заголовок с помощью основных методов, а не проверять каждый отдельный запрос. Итак, чтобы сократить путь, используйте $http с перехватчиком для своих доверенных конечных точек и оболочку без заголовка аутентификации для остальных. - person Fedaykin; 04.09.2014