Marketplace Add-Ons 的身份验证方法

本文介绍了 QuickNode Marketplace add-on 的三种身份验证方法:Provisioning APIs、HTTP Basic Auth 和 No Authentication。

概述

想要构建一个插件但不知道如何管理用户访问? QuickNode 现在支持三种身份验证方法,每种方法都针对不同的用例和安全需求而设计。 无论你是构建开放的公共服务、需要简单的访问控制,还是需要复杂的用户管理,总有一种身份验证选项可以满足你的需求。

本指南探讨了 QuickNode Marketplace 插件可用的不同身份验证方法:传统的 配置 APIHTTP 基本身份验证无身份验证。本指南将介绍每种方法,帮助你根据具体需求选择最适合你服务的方法。

你将学到什么

  • QuickNode Marketplace 插件可用的不同身份验证方法
  • 每种方法的优点和缺点
  • 每种身份验证方法的实现示例

你需要什么

  • 一个 QuickNode 合作伙伴帐户
  • 熟悉 HTTP 请求和响应
  • 对 API 概念和 Web3 开发有基本的了解

QuickNode 合作伙伴帐户

如果你还没有 QuickNode 合作伙伴帐户,可以很容易地开始。 登录到你的 QuickNode 仪表板后,点击左上角的头像图标,然后选择 切换到合作伙伴 选项卡,然后完成 Marketplace 帐户申请。 新的 Marketplace 合作伙伴的审批流程可能需要最多 7 个工作日,但是,通常你可以在 1-2 个工作日内收到回复。

QuickNode Marketplace 合作伙伴申请表

准备好构建了吗?

本指南侧重于身份验证,但 QuickNode 提供了丰富的资源来从头开始构建插件。查看以下资源:

入门代码仓库:

身份验证方法

在深入了解每种方法的细节之前,这里先快速概括一下 QuickNode Marketplace 插件可用的三种身份验证选项:

身份验证方法 最适合 安全级别 实现复杂度 用户管理
配置 API 使用情况跟踪,精细的用户管理 每个用户的完全控制
HTTP 基本身份验证 具有简单访问控制的私有服务 仅限服务级别
无身份验证 开放服务、公共 API、社区工具 不适用

注意: QuickNode 处理所有身份验证方法的速率限制,因此你无需实现自己的速率限制逻辑。

配置 API

传统的配置 API 提供对用户管理、使用情况跟踪和访问控制的最大灵活性和控制。 此方法需要实现自定义端点以进行用户生命周期管理。 使用这种方法,QuickNode 与你提供的一组 API 交互,以自动执行用户订阅的生命周期。

必需的端点

你需要为配置 API 实现以下关键端点:

端点 描述
/provision 为 QuickNode 用户创建一个新的插件实例
/deprovision 当用户取消订阅时,删除一个插件实例
/deactivate_endpoint 停用与你的插件关联的特定端点
/update 更新现有的已配置插件实例

安全要求: 你必须使用 HTTP 基本身份验证来保护你的配置 API。 QuickNode 在插件设置期间提供用户名和密码。

在我们专门的指南中了解有关 Marketplace 合作伙伴配置如何工作的更多信息:Marketplace 合作伙伴的配置如何工作

实现示例

QuickNode 提供了各种编程语言的入门代码,以帮助你入门。 这是我们Node.js 入门代码中的一个示例:

此示例演示了 QuickNode Marketplace 插件入门模板中的 /provision 端点。 它处理用户订阅你的插件时创建新帐户和端点。 basicAuth(authInfo) 中间件使用 HTTP 基本身份验证来保护此端点。

用于配置 API 的代码片段

router.post('/provision', basicAuth(authInfo), async (request, response) => {
    const [account, accountCreated] = await models.Account.findOrCreate({
        where: { quicknode_id: request.body['quicknode-id'] },
        defaults: {
            is_test: request.headers['X-QN-TESTING'] === 'true',
            plan: request.body['plan'],
        },
    })
    console.log('Upserted account with id: ' + account.get('id'))

    const [endpoint, endpointCreated] = await models.Endpoint.findOrCreate({
        where: {
            quicknode_id: request.body['endpoint-id'],
            account_id: account.get('id'),
        },
        defaults: {
            is_test: request.headers['X-QN-TESTING'] === 'true',
            plan: request.body['plan'],
            chain: request.body['chain'],
            network: request.body['network'],
            wss_url: request.body['wss-url'],
            http_url: request.body['http-url'],
        },
    })
    console.log('Upserted endpoint with id: ' + endpoint.get('id'))

    var baseUrl = request.protocol + '://' + request.get('host')

    response.json({
        status: 'success',
        // replace below with real URL for sso login
        'dashboard-url': `${baseUrl}/dashboard`,
        'access-url': `${baseUrl}/api`, // Return null if not applicable
    })
})

HTTP 基本身份验证保护

HTTP 基本身份验证提供了一种轻量级且安全的方式来保护你的 Marketplace 插件端点,而无需自定义配置 API。 当你选择此选项时,QuickNode 会在转发到你的插件服务终结点的每个请求中包含一个标准 HTTP 基本身份验证标头。

如果你选择 HTTP 基本身份验证保护,则转发到你的服务终结点的请求将包含一个基本身份验证 HTTP 标头。 此标头的格式为 Authorization: Basic <credentials>,其中 <credentials> 是由一个冒号连接的 usernamepassword 的 Base64 编码(例如,username:password)。 你的插件服务负责验证每个传入请求的这些凭据。

HTTP 基本身份验证

QuickNode 安全地存储你在插件设置期间提供的用户名和密码,并自动生成 Base64 编码的字符串以包含在 Authorization 标头中。

Authorization 标头的示例,其中 Aladdin 是用户名,open sesame 是密码:

Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==

实现示例

以下是一个简单的示例,说明如何使用 Express.js 在你的插件服务中实现 HTTP 基本身份验证:

HTTP 基本身份验证标头的示例

import { Router } from 'express'
const basicAuth = require('express-basic-auth')
const router = Router()

// Provisioning API is behind basic auth
// 配置 API 位于基本身份验证之后
const authDetails = {}
authDetails[process.env.BASIC_AUTH_USERNAME] = process.env.BASIC_AUTH_PASSWORD
const authInfo = {
    users: authDetails,
    challenge: true,
    unauthorizedResponse: 'Not Authorized',
}

// Apply the basicAuth middleware to your RPC endpoint.
// 将 basicAuth 中间件应用于你的 RPC 端点。
// Any request to '/rpc' will first be authenticated using the provided credentials.
// 对 '/rpc' 的任何请求都将首先使用提供的凭据进行身份验证
router.post('/rpc', basicAuth(authInfo), async (request, response) => {
    // Process the authenticated request
        // 处理经过身份验证的请求
    const { method, params } = req.body

    // Your service logic here
    // 你的服务逻辑在这里
    const result = processRequest(method, params)

    response.json({
        jsonrpc: '2.0',
        result: result,
        id: request.body.id
    })
})

无身份验证

无身份验证非常适合不需要访问控制或用户验证的开放服务。 此选项提供最简单的集成路径,开销最小。

来自 QuickNode 的请求将直接转发到你的服务终结点,而无需任何身份验证标头或凭据。 你的服务会收到与用户发出的完全相同的原始请求。

实现示例

你的服务只需要处理传入的请求,而无需身份验证检查:

无身份验证的示例

import { Router } from 'express'
const router = Router()

router.post('/rpc', async (request, response) => {
    // Process the request directly - no auth needed
        // 直接处理请求 - 无需身份验证
    const { method, params } = request.body

    // Your service logic here
        // 你的服务逻辑在这里
    const result = processRequest(method, params)

    response.json({
        jsonrpc: '2.0',
        result: result,
        id: request.body.id
    })
})

选择正确的方法

根据以下关键考虑因素选择你的身份验证方法:

当你需要时,选择配置 API:

  • 精细的访问控制和用户管理
  • 自定义仪表板或用户界面
  • 与订阅相关的复杂业务逻辑

当你需要时,选择 HTTP 基本身份验证:

  • 适用于私有服务的简单访问控制
  • 无需复杂性的安全性
  • 服务级别身份验证(非按用户)
  • 快速实现,开销最小

当你构建以下内容时,选择无身份验证:

  • 开放的公共服务或 API
  • 社区工具和实用程序
  • 受益于无限制访问的服务
  • 需要最高性能的简单集成

结论

QuickNode 灵活的身份验证选项使你的服务比以往更容易与 Marketplace 集成。 HTTP 基本身份验证 为大多数私有服务提供了最佳选择,在提供安全性的同时又不失复杂性。 无身份验证 使开放服务能够无缝集成,而传统的 配置 API 继续支持需要自定义用户管理的高级用例。

准备好构建你的 QuickNode Marketplace 插件了吗? 查看以下资源以开始使用。 如果你有任何疑问,请随时使用我们在 Discord 上的专用频道,或使用下面的表格提供反馈。 通过在 X 和我们的 Telegram 公告频道 上关注我们,及时了解最新信息。

我们 ❤️ 反馈!

如果你有任何反馈或对新主题的要求,请告诉我们。 我们很乐意听取你的意见。

更多资源

  • 原文链接: quicknode.com/guides/mar...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
QuickNode
QuickNode
江湖只有他的大名,没有他的介绍。