Как использовать отпечаток пальца браузера на моем веб-сайте?

Я хочу идентифицировать пользователей, получающих доступ к моему API, даже если они очищают cookies или localstorage везде, где я храню текущую информацию о сеансе. Я вижу, что browser fingerprinting является одним из способов достижения этой цели с некоторой точностью. Я работаю над проектом angular2 для интерфейса. У меня есть следующие вопросы:

  • Существуют ли библиотеки для angular2, которые создают отпечаток браузера? (Я видел ng2-device-detector. Это не дает много информации, а также не имеет хеширования отпечатков пальцев. Итак, нужно ли мне самому хешировать? )
  • Вы видели fingerprintjs2, это занимает много информации, но не имеет реализации для angular2, но мне интересно, как бы хэшировали отпечаток на самом деле имеет значение? Для запроса в моем API я проверю, содержит ли полезная информация fingerprint, которая уже существует в любой из существующих сеансов? (Действительно, полезная нагрузка? Это просто запрос POST. Пользователь может просто отправить случайную длинную строку как хэшированный fingerprint, и API будет обрабатывать запрос так, как если бы он пришел от другого человека.)
  • Я предполагаю, что тогда мне придется использовать некоторый API, который не только генерирует hashed fingerprint в frontend, но также проверяет после того, как запрос достиг API, что-то вроде Google reCaptcha. Существуют ли такие API-интерфейсы?
  • Если API-интерфейсов не существует, то, наверное, мне придется реализовать такую ​​функциональность в моем API-интерфейсе?

Пожалуйста, напишите ваши предложения.

Ответ 1

1. Кажется, что не любая библиотека (портирована или иначе), особенно для Angular2.

2. Вам не нужна версия Angular2, просто введите исходный файл в index.html, и вы можете использовать его так, PLUNKER

declare var Fingerprint2: any;

@Component({
  selector: 'my-app',
  template: `Hello`,
})
export class App {
  constructor() {
    new Fingerprint2().get(function(result, components){
      console.log(result); // a hash, representing your device fingerprint
      console.log(components); // an array of FP components
    });
  }
}

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

3. Нет, нет (IMK).

4. Если для вас работает no.-2, я полагаю, вам будет намного лучше.

Ответ 2

Ankit в значительной степени ответил на Angular. Вот API, который обеспечивает отпечаток пальца, поэтому вам не нужно его реализовывать самостоятельно:

API отпечатков пальцев браузера

Несмотря на то, что это решение не является компонентом Angular (или что-то есть), вы можете сделать AJAX-вызов, чтобы получить отпечаток пальца и отправить его на свой сервер.

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