Сервис Golos Auth был дополнен функционалом OAuth и подписи транзакций, что расширяет возможности для клиентов/приложений БЧ авторизовывать пользователей без запроса пароля/ключей.
Пользователям
Достаточно авторизоваться паролем или активным ключом на https://golos.app (GolosSigner).
И после настройки приложениями/сервисами/играми авторизации с помощью GolosSigner, по нажатию кнопок Войти/Авторизоваться и пр.
вы сможете разрешать доступ приложению к конкретным операциям (или их списку).
Это безопаснее чем вводить свой пароль/ключи на разного рода веб-клиентах (особенно новых или недостаточно протестированных).
Важно заметить, что при такой авторизации отображается список операций, к которым приложение запрашивает доступ. Пример с тестового клиента:
Также на https://golos.app добавлен интерфейс для популярных операций: трансфер токенов, донаты и делегирование (что позволяет использовать шаблоны в виде URL-ссылок).
Трансфер токенов
https://golos.app/sign/transfer?to=lex&amount=10.000%20GOLOS&memo=test
Запрос делегирования на некий аккаунт
https://golos.app/sign/delegate_vs?to=lex&amount=10.000%20GOLOS
Сбор донатов
https://golos.app/sign/donate?to=lex&amount=10.000%20GOLOS&memo=test
Поделиться ссылкой удобнее, чем описывать на какой аккаунт, где и сколько. Пользователю останется лишь подтвердить операцию в GolosSigner.
Разработчикам
Воркером @aerostorm1 был учтен опыт подобных сервисов и вместо простой модели с ключами реализован вариант с разрешениями на операции.
В документации к golos-lib-js описан базовый пример интеграции OAuth. Также функционал OAuth подробно описан в репозитарии ui-auth.
Подготовлены примеры интеграции OAuth в вариантах с jQuery и React - https://github.com/golos-blockchain/ui-auth/tree/master/oauth_examples (отдельные примеры для custom_json
и proposals
). Для информации, поддерживаемый в OAuth список разрешений/permissions.
Приложения могут не только запрашивать разрешения списком, но и отправлять отдельные неподписанные транзакции на сервис для подтверждения. Подробнее.
Для экспериментов можно использовать https://dev.golos.app, подключенный к тестовой цепи блокчейна (с вопросами в личку).
Приложения добавляются по запросу (идентификатор, название и описание клиента на русском/английском, логотип 128x128). Все эти данные показываются пользователям при авторизации в приложении.
На golos.app добавлены идентификаторы dposspace
(сервисы dpos.space делегата @denis-skripnik) и pisolognet
(сервисы pisolog.net делегата @bitwheeze). В зависимости от наличия у них времени, полагаю интеграция GolosSigner не за горами...
За изображения к GolosSigner спасибо @smotritelmayaka
Упоминания @ника и сделки на бирже
- В меню профиля блогов добавлена страница «Упоминания», которая позволяет быть в курсе когда, кто, где упоминал ваш @ник (или ссылку на пост/комментарий содержащий @ник).
В случае спама упоминаниями, блокировка в веб-клиенте (кнопка Заблокировать
) распространяется и на них.
- Добавлена страница «Биржа» с историей сделок (выполненных ордеров) на внутренней бирже.
Теперь не нужно искать/проверять какие именно ордера сработали и в какой торговой паре.
- Доработан сервис Golos Notify, чтобы упоминания и выполненные ордера сопровождались уведомлениями.
Прочие правки
Исправлена ошибка отображения панели выбора языка и дополнительного меню на мобильных устройствах (что затрудняло авторизацию).
Оптимизирован запрос уведомлений Golos Notify и фильтр истории операций в веб-клиенте (глубина истории).
Исправлена ошибка при создании нескольких ордеров на бирже (если авторизация была с паролем).
Доработан фильтр категорий в лентах контента (теперь для его сохранения/изменения достаточно постинг-ключа).
Исправлена ошибка с выделением активных ордеров в "стаканах" торговых пар на внутренней бирже.
@lex, типа это голосиный аналог стимконнекта?
@litrbooh, да
@lex, после реги на GolosSigner и разрешения косынке, нет реакции разрешило или нет. Было бы хорошо, чтоб для тупых после нажатия "разрешить" вылетала надпись ОК. Разрешилось)) Типа того.
@peshehod, только опиши подробнее как это происходило, очередность шагов, какой браузер...
Ведь оно работает что нажав войти на сайте игры, появляется новое окно GolosSigner
там авторизуешься и нажимаешь разрешить (окно закрывается), и уже на сайте игры появляется твоя аватарка, пример
@lex, Яндекс браузер. Из поста Упаковка брамбулетов по ссылке на игру перешел в игру. Предложили войти. Перебросило в новую вкладку Signer.
Там авторизовался, но не увидел какой-либо надписи о результатах авторизации.
А когда вернулся во вкладку игра, оказалось, что авторизация состоялась и можно играть. Кажется вроде бы так... 🤔
@peshehod, да, посмотрим. В любом случае что неудобно/непонятно будет исправляться со временем. Пока этап сбора комментариев, сервис новый, не все сценарии опробованы...
@lex, может не новую вкладку открывать, а сделать редирект к сигнеру и обратно? А то у меня в каком то браузере popup окна блокировало и вкладка с сигнером не открывалась.
@bitwheeze, возможно, только с редиректом не менее "веселые" моменты от браузера к браузеру встречаются...
@lex я переделал все на oauth, все вроде работает, но наткнулся на следующее. Может опять где то ошибаюсь, но имхо лучше перебдеть
В коде написал так, то-есть прописал аккаунт напрямую
Потом запускаю приложение в браузере А и авторизируюсь как lex. Выполняю этот код через dev.golos.app и транзакция исполняется в блокчейне, все хорошо.
Потом открываю это же приложение в браузере Б и авторизируюсь как bitwheeze. Выполняю этот код и транзакция опять уходит 🤔 Тоесть хотя я авторизирован как "bitwheeze", могу отправлять транзакцию как "lex".
Ведь так и получается. У lex прописан в ауторити oauth и у bitwheeze. Домен и clientid одинаковое.
На скриншоте ниже, я залогинился как bitwheeze через dev.golos.app. Открываю консоль, подгружаю библиотеку golos-lib-js с CDN-а. Настраиваю ее на использование oauth и выполняю перевод от имени lex. На последнем скнишоте видно, что я на dev.golos.app залогинился как bitwheeze
@bitwheeze, перебдеть иногда полезно, спасибо за фидбек, есть что поправить.
Баунти тоже будет 👍️
@lex, Я пока тогда верну все как было.
@bitwheeze, можно и оставить, вернусь к компу и обнова уже будет.
@lex, да, увидел, что уже ночью сделали и фикс, вроде вглядит норм. 1aerostorm просто бог.
@lex, во как, спасибо, тогда
кстати новой версии js библиотеки надо минимум node.js 11 версии, что бы работало. Из-за TextDecoder, его только в 11-ой версии добавили. Только что споткнулся. У меня в винде ubuntu 20, а в ней еще node.js 10
@bitwheeze, https://github.com/nvm-sh/nvm
@ecurrex-ru, да это понятно, я просто раньше собирнал с десяткой, с golos-classic-js, все работало и я не обращал внимание на то, какая у меня локально версия установленна. Сейчас все собирается, правда с дури поставил 17-ую версию, а там webpack не работает. "Это все грабли и все они мои." 😂
@lex, Отлично!
На следующей неделе интегрирую.
@lex, а как там проверяется, разрешение? Только по clientId? По крайней мере я так понял этот кусочек кода
Если да, то, что мешает вытащить clientId из моего приложения и использовать у себя, что бы сделать перевод? Потом попробуй докажи, что невиноват.
Я думал будет возврщаться какой нибудь sessionid, а уже по нему будет проверяться, авторизирован ли клиент делать эти операции или нет. Что то динамическое, что у клиента в браузере будет храниться.
Или так и происходит? Надо запустить демку. Посмотрю, может куки какие то сохраняются
@bitwheeze, вроде бы да. golos.app хранит сессию в куках. В другом браузере надо по новой авторизироваться. Ок, как раз хотел новую версию сделать. Попробую.
А почему на другом домене кстати? Не на golos.id? И почему надо active ключ, что бы стразу по максимуму?
@lex, Кстати а какая пропускная способность? Ничего если часто будет дергаться api? Чаще, чем в три секунды? А то сейчас ходы в игрушке отправляются в блокчейн раз в секунду кажется.
@bitwheeze, постинг-ключом не добавить авторити, поэтому только актив...
@bitwheeze,
Основное, чтобы при блоке РКН .id за некий пост не терять и сервисы.
Чем реже, тем лучше 😂
@lex, ну это вы мне скажите, справится сервис или нет. Я могу только чаще ))
Иначе там дырка образуется. Либо городить тогда свою аутентификацию, что бы напрямую ходы игровому серверу отправлять, либо и дальше писать напрямую через api ноду. Пока всего два игрока у игрушки, но если будет хотя бы десяток, то это уже 10 транзакций к golos.app в секунду.
Покуда попробую уменьшить до 3 скунд, а потом подумаю про свою аутентификацию.
@bitwheeze, ну десятки то понятно что норм, тут вопрос в целом подхода, а нужно ли отправлять сотни запросов в секунду и чаще + держать всё в блокчейне.
Возможно в БЧ не нужны шаги, а только результаты игры, ставки, ключевое...
@lex, да, наверное не нужны, но нужна какая то аутентификация, что шаги именно от правильного пользователя, а не от кого попало. Проще всего их отправлять в блокчейн до кучи. Тут уже наверняка ходы реальные. Да и все шаги записываются в блокчейн, прозще понять, что там происходило и как в случае если надо будет разобраться. Альтернативно нужно как то аутентифицировать пользователя.
Думал сделать так. Сайт генерирует пару ключей публичный/приватный (в библиотеке голоса все уже есть, потому так). Приватный остается у пользователя в куках или локальном storage, а публичный отсылается в транзакции "Начать игру", с донатом или в custom_json. А потом с каждым запросом серверу отсылается приватный ключ. Ну а дальше сличить их дело техники.
Тогда да, коммуникации с блокчейном будет по миниимумому. Правда двойная аутентификация получается. Сначала на golos.app, потом на игровом сервере. Но вторая вроде активных действий требовать не должна. Если только пользователь начнет в одном браузере игровую сессию, а потом захочет продолжить в другом, по дороге с работы домой к примеру.
Вот если бы golos.app/oauth вернул бы какой нибудь токен, который можно было бы передать игровому серверу, а тот в свою очередь мог бы проверить аутентичность пользователя запросом к golos.app, раз в пять минут к примеру. Как в oidc. Было бы красиво ))
@bitwheeze, ответил на ишью https://github.com/golos-blockchain/ui-auth/issues/16#issuecomment-991555309
@aerostorm1, я тоже написал там ответ 😊
@lex, Вот если бы golos.app/oauth вернул бы какой нибудь токен, который можно было бы передать игровому серверу, а тот в свою очередь мог бы проверить аутентичность пользователя запросом с этим токеном к golos.app, раз в пять минут к примеру. Как в oidc. Было бы красиво ))
@bitwheeze, всё возможно сделать красивее, со временем...
Главное появление основы OAuth/Signer, а как и куда расширять функционал, вопрос спроса в сообществе. Мы (пока) выбираем тактику получать базовую версию быстрее, а не "всё-всё-всё и с бантиком" но через полгода 😂
Поэтому хотелки, советы, замечания, это гуд. Возможный план изменений/улучшений (с учетом спроса и информпотоков внутри сообщества).
@bitwheeze, еще там проверка по заголовку Origin в запросах, то есть по домену, с которого идет запрос. При добавлении clientid мы добавляем и домены.
С чужого домена отправить запрос под этим clientid не получится.
В браузере хранится и cookie (X-OAuth-Session), в нем лежит список клиентов, которых разрешает использовать данный аккаунт. Отправить из бота запрос с фальшивым Origin не пройдет, нужна и эта cookie...
@lex, да, я потестировал, все работает как и думал.
@lex, кстати, а с поддоменом будет работать? "sol.pisolog.net"? У меня игрушка там крутится. Я начал на новый логин переделывать, но протестировать заранее не могу. Не хотелось бы потом вас искать срочно, когда решусь обновить на сайте версию. :)
@bitwheeze,
sol.pisolog.net
добавили@lex, а зачем?
@mrarturs, зачем более безопасный вариант доступа? Ну наверно чтобы вводя ключи или пароль на разного рода сервисах в один момент не потерять токены или аккаунт )
@lex, ну если есть, то есть. Пока смысла в ней не вижу. Были какиет-то боты в телеге, котрые по мне лучше доносят информацию.
@mrarturs, если ты о уведомлениях, тем кто не пользуется ТГ - нарочным отправлять будешь? 😂
@lex, значит кому то надо будет )))