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

Деяким застосункам потрібно лише знати, ким людина є в 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, у якому названо ваш застосунок, тож підходить будь-що з такого:

Токен 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 хвилин, з хвилиною на різницю годинників).
  • Використовуйте кожен токен один раз. Після успішної перевірки почніть власну сесію (наприклад, куку httpOnly) і відкиньте токен Hivesigner. Зберігайте перелік прийнятих токенів, доки вони не стануть надто старими для перевірки за віком. Відхиляйте будь-який, який побачите вдруге.
  • Тримайте токен поза журналами. Він надходить у рядку запиту вашої адреси зворотного виклику. Див. Тримайте токени в безпеці.

Приклади

Сайти на кшталт https://hivesearcher.com і https://openhive.chat дають людям змогу входити зі своїм обліковим записом Hive заради функцій, які лишаються поза блокчейном, як-от пошук і чат. Їм потрібно знати, хто ця людина, і нічого більше.