Вход без доступа к публикации

Некоторым приложениям нужно лишь знать, кто этот человек в Hive. Они никогда не публикуют, не голосуют и ничего не отправляют за него. Hivesigner может выполнить вход в такое приложение вообще без постинг-полномочий. Человек подтверждает, что аккаунт Hive принадлежит ему. Ваше приложение узнаёт его имя. На этой странице показаны два способа и то, как безопасно проверить результат.

Два способа

  • С аккаунтом приложения: у вашего приложения есть собственный аккаунт Hive, и оно запрашивает scope=login. Токен называет ваше приложение.
  • Без аккаунта приложения: сайт без собственного аккаунта Hive отправляет только redirect_uri. Токен не называет никакого приложения. Ваш сайт проверяет его сам.

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

С аккаунтом приложения

  1. Зарегистрируйте приложение: создайте его аккаунт Hive и перечислите свои адреса возврата. Секрет клиента и разрешение для @hivesigner не нужны.

  2. Отправьте человека по адресу:

    https://hivesigner.com/oauth2/authorize?client_id=CLIENT_ID&redirect_uri=REDIRECT_URI&scope=login&state=STATE
    
  3. Человек видит «Вход в APP» с Область доступа «Просмотр имени пользователя вашего аккаунта». Он выбирает Войти.

  4. Hivesigner перенаправляет на ваш адрес возврата:

    REDIRECT_URI?state=STATE&access_token=TOKEN&expires_in=604800&username=USERNAME
    
  5. Сверьте state, а затем проверьте токен. Это токен login, называющий ваше приложение, поэтому подойдёт любой из путей:

    • вызовите с ним GET /api/me, который отвечает аккаунтом в user и scope со значением ["login"], затем раскодируйте токен и проверьте type и app (Спросите API);
    • либо проверьте его сами с type: 'login' и названием вашего приложения.

Токен login ничего не отправит в сеть: /api/broadcast отклоняет любую операцию, присланную с ним.

Без аккаунта приложения

  1. Отправьте человека на адрес авторизации с redirect_uri и без client_id:

    https://hivesigner.com/oauth2/authorize?redirect_uri=REDIRECT_URI&state=STATE
    

    Адрес возврата должен быть https:// или http:// на петлевом адресе (localhost, 127.0.0.1, [::1]). Списка, куда его регистрировать, нет. Здесь Hivesigner не учитывает scope и response_type: ответом всегда будет токен входа.

  2. Человек видит «Сайт HOST хочет подтвердить ваше имя пользователя Hive.», где HOST — это хост вашего адреса возврата. Он выбирает Войти.

  3. Hivesigner перенаправляет на ваш адрес возврата:

    REDIRECT_URI?state=STATE&access_token=TOKEN&expires_in=604800&username=USERNAME
    
  4. Сверьте state, а затем проверьте токен сами. API не принимает токен, не называющий приложение, поэтому ваш сервер проверяет подпись по ключам аккаунта. Смотрите Проверьте сами, с type: 'login' и без app.

Если адрес возврата не является веб-адресом или это обычный http:// вне петлевого адреса, Hivesigner отклоняет запрос и объясняет человеку почему.

Какой способ выбрать

С аккаунтом приложения Без аккаунта приложения
Что видит человек Название, изображение и аккаунт Hive вашего приложения Только хост вашего сайта
Подготовка Аккаунт Hive с перечисленными адресами возврата Никакой
Токен называет Ваше приложение Никакого приложения
Проверяйте токен через /api/me или собственный код Собственный код
Доступ к публикации потом Тем же аккаунтом: запросите posting и дайте разрешение @hivesigner Сначала нужен аккаунт приложения

Используйте аккаунт приложения, когда можете. Люди видят название и изображение вашего приложения. Ваш сервер может отклонять токены, созданные для другого приложения. Позже вы сможете перейти к доступу к публикации с тем же аккаунтом.

Второй способ используйте, когда у вашего сайта нет аккаунта Hive и он ему не нужен.

Безопасно проверьте вход

  • Свяжите запрос через state. Создавайте случайное значение на каждый вход, храните его в сессии человека, сверяйте на своём адресе возврата и используйте один раз. Смотрите Защитите запрос через state.
  • Проверьте вид. Принимайте только signed_message.type, равный login. Код или токен обновления входом не является.
  • Проверьте приложение. С аккаунтом приложения signed_message.app должен быть вашим приложением. Без него поля app быть не должно вовсе.
  • Проверьте возраст. Токен вы проверяете сразу после перенаправления, поэтому принимайте его только в пределах нескольких минут от его timestamp (например, 5 минут, с минутой на расхождение часов).
  • Каждый токен используйте один раз. После удачной проверки начните собственную сессию (например, cookie httpOnly) и выбросьте токен Hivesigner. Ведите учёт принятых токенов, пока они не станут слишком старыми для проверки возраста. Отклоняйте любой, который увидите снова.
  • Держите токен вне журналов. Он приходит в строке запроса вашего адреса возврата. Смотрите Храните токены безопасно.

Примеры

Сайты вроде https://hivesearcher.com и https://openhive.chat позволяют людям входить со своим аккаунтом Hive ради возможностей, которые остаются вне блокчейна, например поиска и чата. Им нужно знать только, кто этот человек, и ничего больше.