本文介绍了 QuickNode Marketplace add-on 的三种身份验证方法:Provisioning APIs、HTTP Basic Auth 和 No Authentication。
想要构建一个插件但不知道如何管理用户访问? QuickNode 现在支持三种身份验证方法,每种方法都针对不同的用例和安全需求而设计。 无论你是构建开放的公共服务、需要简单的访问控制,还是需要复杂的用户管理,总有一种身份验证选项可以满足你的需求。
本指南探讨了 QuickNode Marketplace 插件可用的不同身份验证方法:传统的 配置 API,HTTP 基本身份验证 和 无身份验证。本指南将介绍每种方法,帮助你根据具体需求选择最适合你服务的方法。
QuickNode 合作伙伴帐户
如果你还没有 QuickNode 合作伙伴帐户,可以很容易地开始。 登录到你的 QuickNode 仪表板后,点击左上角的头像图标,然后选择 切换到合作伙伴 选项卡,然后完成 Marketplace 帐户申请。 新的 Marketplace 合作伙伴的审批流程可能需要最多 7 个工作日,但是,通常你可以在 1-2 个工作日内收到回复。
准备好构建了吗?
本指南侧重于身份验证,但 QuickNode 提供了丰富的资源来从头开始构建插件。查看以下资源:
入门代码仓库:
在深入了解每种方法的细节之前,这里先快速概括一下 QuickNode Marketplace 插件可用的三种身份验证选项:
身份验证方法 | 最适合 | 安全级别 | 实现复杂度 | 用户管理 |
---|---|---|---|---|
配置 API | 使用情况跟踪,精细的用户管理 | 高 | 中 | 每个用户的完全控制 |
HTTP 基本身份验证 | 具有简单访问控制的私有服务 | 中 | 低 | 仅限服务级别 |
无身份验证 | 开放服务、公共 API、社区工具 | 无 | 无 | 不适用 |
注意: QuickNode 处理所有身份验证方法的速率限制,因此你无需实现自己的速率限制逻辑。
传统的配置 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 基本身份验证提供了一种轻量级且安全的方式来保护你的 Marketplace 插件端点,而无需自定义配置 API。 当你选择此选项时,QuickNode 会在转发到你的插件服务终结点的每个请求中包含一个标准 HTTP 基本身份验证标头。
如果你选择 HTTP 基本身份验证保护,则转发到你的服务终结点的请求将包含一个基本身份验证 HTTP 标头。 此标头的格式为 Authorization: Basic <credentials>
,其中 <credentials>
是由一个冒号连接的 username
和 password
的 Base64 编码(例如,username:password
)。 你的插件服务负责验证每个传入请求的这些凭据。
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 基本身份验证:
当你构建以下内容时,选择无身份验证:
QuickNode 灵活的身份验证选项使你的服务比以往更容易与 Marketplace 集成。 HTTP 基本身份验证 为大多数私有服务提供了最佳选择,在提供安全性的同时又不失复杂性。 无身份验证 使开放服务能够无缝集成,而传统的 配置 API 继续支持需要自定义用户管理的高级用例。
准备好构建你的 QuickNode Marketplace 插件了吗? 查看以下资源以开始使用。 如果你有任何疑问,请随时使用我们在 Discord 上的专用频道,或使用下面的表格提供反馈。 通过在 X 和我们的 Telegram 公告频道 上关注我们,及时了解最新信息。
如果你有任何反馈或对新主题的要求,请告诉我们。 我们很乐意听取你的意见。
- 原文链接: quicknode.com/guides/mar...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!