Boltwall упрощает добавление платного доступа Lightning и авторизации к веб-приложениям. Это промежуточное ПО с открытым исходным кодом, написанное на Typescript. Boltwall поддерживает OpenNode’s API, бессерверное развертывание с Zeit и авторизацию с ограничением по времени. Получите платный доступ на основе Lightning за считанные минуты с минимальным кодом.

Пример: простой платный доступ

Представьте, что вы хотите сделать контент, находящийся за маршрутом, /protected доступным только для пользователей, которые внесли небольшой молниеносный платеж. Возможно, вы захотите монетизировать контент или обеспечить защиту от DDoS-атак для запросов API.

Процесс будет выглядеть примерно так:

  • Любой запрос, сделанный по этому маршруту клиентом / пользователем, который не заплатил, получит в ответ 402 ошибку (код состояния, впервые предложенный в 90-х годах, но до сих пор не реализованный широко из-за отсутствия собственного протокола платежей).
  • Затем Boltwall может вернуть счет Lightning в зависимости от того, что запрашивается (обычно путем отправки запроса POST на /protected/invoice).
  • Затем производится оплата, шаг, который может быть выполнен узлом, который вообще ничего не знает о сервере Boltwall.
  • После оплаты счета при следующем запросе /protected Boltwall может независимо проверить платеж и разрешить отправку запроса по маршруту.

Все, что вам нужно для включения вышеуказанного, - это добавить следующую строку кода перед любым маршрутом, который вы хотите защитить (предполагается, что сервер Express.js):

// require a minimum payment of 30 satoshis

app.use(`boltwall`({minAmount: 30})

// anything after `boltwall` is protected

app.use('/protected', (req, res) => res.send('I am a protected route'))

Контекстные оговорки с миндальным печеньем

Гибкость Boltwall отличает его от другого промежуточного программного обеспечения платного доступа Lightning. Поскольку он написан по модульному принципу, с минимальной потребностью в разрешениях, его можно запускать в совершенно отдельной службе или даже на сервере от узла Lightning, на который вы хотите получать платежи. Что еще более важно, он может запускаться независимо от службы, для которой выполняется учетная запись, например, запускается сторонняя служба проверки подлинности.

Boltwall использует протокол авторизации, известный как Macaroons, описанный в исходном документе Google как файлы cookie с контекстными оговорками. Для тех из вас, кто знаком с тем, как файлы cookie и JWT (веб-токены JSON) используются в Интернете, идея очень похожа. Снова из бумаги:

Хотя макароны являются учетными данными носителя, как и веб-файлы cookie, макароны содержат предупреждения, которые ослабляют и контекстно ограничивают, когда, где, кем и с какой целью целевая служба должна авторизовать запросы ... [M] acaroons может обеспечить более детальную авторизацию в облаке, например, за счет усиления таких механизмов, как OAuth2.

В частности, Boltwall использует две важные характеристики возможностей Macaroons: делегирование и стороннее затухание. Чтобы узнать больше о том, как работают миндальное печенье, я рекомендую статью из Hacking, Distributed, Миндальное печенье лучше, чем файлы cookie! а также README для одной из первых реализаций, libmacaroons. В противном случае читайте дальше, чтобы понять, как они используются в boltwall.

Будьте самим собой oAuth - пользовательская авторизация без учетной записи

В Boltwall использование Macaroons позволяет отделиться не только от службы LND, которая обрабатывает платежи. Это также позволяет разделить авторизацию платежа и службу, на которой размещен API, который вы хотите защитить. Думайте об этом как о запуске собственной службы oAuth. Точно так же, как Google oAuth позволяет сторонней службе авторизоваться на своей платформе, подтвердив вашу учетную запись Google, с помощью boltwall ваш API может действовать как Google, но вместо проверки вашей учетной записи служба проверяет что была произведена достаточная оплата.

В качестве примера представьте, что вы размещаете некоторый контент на сторонней платформе, такой как Medium. Вы хотите, чтобы ваш контент находился за платным доступом, но вы не хотите доверять третьей стороне в качестве хранителя средств, которые пользователи платят за просмотр вашего контента. Как и в примере с oAuth выше, эта служба делегирует часть авторизации вашему серверу boltwall и авторизует запрос пользователя только после того, как вы, как владелец контента и сервер Boltwall, получите подтвержденный платеж.

Вкратце, приложение выдает так называемый root macaroon с third-party caveat, который может «разблокировать» только ваш сервер Boltwall. Для этого он выдает discharge миндальное печенье, которое при отправке с исходным корневым миндальным печеньем подтверждает приложению, что платеж был получен.

Эта диаграмма более подробно демонстрирует процесс авторизации:

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

Пользовательские предупреждения

Boltwall использует миндальное печенье для создания специальных предупреждений, ограничивающих авторизацию. Например, давайте посмотрим на настраиваемую настройку boltwall из коробки. Доступные TIME_CAVEAT_CONFIGS - это набор конфигураций, которые добавляют ограниченную по времени авторизацию к вашему платному доступу. Конфигурации также доступны для объекта запроса и деталей счета, что означает, что авторизация может быть привязана к этим данным.

Например, с TIME_CAVEAT_CONFIGS любая авторизация, предоставленная Boltwall, будет действительна только в течение секунд, равных количеству оплаченных сатоши. Итак, если вы хотите разрешить пользователям доступ к API только в течение 30 секунд, если они заплатили только 30 сатоши на ваш узел Lightning, это все, что вам нужно (расширено сверху):

// using the available time-restricted configs

import { `boltwall`, TIME_CAVEAT_CONFIGS } from '`boltwall`'

app.use(`boltwall`(TIME_CAVEAT_CONFIGS)

// anything after `boltwall` is protected

app.use('/protected', (req, res) => res.send('I am a protected route'))

Таймер запускается только после первого запроса после оплаты счета.

Поддержка OpenNode

Если вы не хотите запускать узел Lightning или хотите избежать прямого контакта с криптовалютами, boltwall предлагает поддержку API OpenNode. OpenNode - это размещенное решение для разработчиков, которые хотят принимать платежи в биткойнах либо напрямую в сети, либо через Lightning, но не хотят хлопот по запуску собственного узла. Это еще больше упрощает настройку для использования boltwall. Просто зарегистрируйтесь в OpenNode, получите ключ API разработчика, установите его в качестве переменной среды при развертывании сервера boltwall и начните принимать платежи! OpenNode предоставит вам доступ к простым в управлении инструментам бухгалтерского учета, а также к выводам средств в фиат, сохраняя при этом все функции boltwall, даже ограниченные по времени оговорки. Обратите внимание, что в настоящее время поддерживается только тестовая сеть.

Вариант бессерверного развертывания

Мы предлагаем простое в развертывании решение для запуска вашей службы boltwall как бессерверной лямбда-функции, которую сейчас использует Zeit. Всего с парой строк кода и минимальной конфигурацией вы можете запустить boltwall в реальном времени по протоколу https и сделать его доступным для всемирной паутины.

Https://github.com/Tierion/now-boltwall

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

Документация

Технические подробности библиотеки, способы ее использования в вашем проекте, а также информацию об API можно найти на сайте документации:

Https://tierion.github.io/boltwall

Код размещен на GitHub:

Https://github.com/Tierion/boltwall

Документацию по REST API можно найти на SwaggerHub.

Https://app.swaggerhub.com/apis-docs/prism8/boltwall/1.0.0

Что дальше?

Больше моделей ослабления
Одним из приоритетов является повышение гибкости при ослаблении авторизации. Хотя временные ограничения казались наиболее полезной конфигурацией, мы могли представить, что другие модели также будут полезны. Такие возможности, как регулируемые ставки оплаты, ограничения на основе IP-адреса или авторизация, привязанная к открытому ключу узла, могут быть возможностями для новых конфигураций предостережений.

LND API
Мы думаем, что Boltwall может быть еще более полезным, если сделает взаимодействие с LND API более надежным. Например, HODL Invoices могут позволить многоступенчатые платежи через облигации верности. Поддержка более сложных механизмов маршрутизации может открыть и другие возможности.

Если Boltwall звучит так, будто вам интересно поработать, или есть функция, которую вы хотели бы увидеть, протяните руку и дайте нам знать!