You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现NIP-05规范下nostr.json的安全GET请求响应?

NIP-05 接口最佳实现方案

根据NIP-05(将Nostr密钥映射到基于DNS的互联网标识符)的要求,我们需要实现一个能处理GET请求的接口,仅当请求的name存在时返回对应JSON数据,否则返回错误。以下是具体实现思路和代码示例:

核心逻辑步骤

  • 接收GET请求,解析URL中的name查询参数
  • 参数校验:
    • 若缺少name参数,返回{"error":"Missing name parameter"}
    • 若name不在预设的用户列表中,返回{"error":"user not found"}
    • 若name存在,提取该用户的公钥及对应的中继地址,构造符合要求的JSON响应返回

推荐实现(Node.js + Express)

1. 初始化项目并安装依赖

npm init -y
npm install express fs path

2. 编写核心代码

创建server.js文件:

const express = require('express');
const fs = require('fs');
const path = require('path');

const app = express();
const PORT = process.env.PORT || 3000;

// 读取本地nostr.json文件
const nostrData = JSON.parse(fs.readFileSync(path.join(__dirname, 'nostr.json'), 'utf8'));

// 处理.well-known/nostr.json请求
app.get('/.well-known/nostr.json', (req, res) => {
  res.setHeader('Content-Type', 'application/json');
  
  const name = req.query.name;
  
  // 缺少name参数
  if (!name) {
    return res.status(400).json({ error: 'Missing name parameter' });
  }
  
  // 检查name是否存在
  const pubkey = nostrData.names[name];
  if (!pubkey) {
    return res.status(404).json({ error: 'user not found' });
  }
  
  // 构造响应数据
  const response = {
    names: { [name]: pubkey },
    relays: { [pubkey]: nostrData.relays[pubkey] || [] }
  };
  
  res.json(response);
});

app.listen(PORT, () => {
  console.log(`Server running on port ${PORT}`);
});

3. 放置nostr.json文件

将你的nostr.json文件放在项目根目录下,结构如下:

{
  "names": {
    "user_name_1": "user_pubkey_1",
    "user_name_2": "user_pubkey_2"
  },
  "relays": {
    "user_pubkey_1": [ "wss://relay1", "wss://relay2" ],
    "user_pubkey_2": [ "wss://relay3", "wss://relay4" ]
  }
}

其他注意事项

  • 若你的部署环境是静态托管(如GitHub Pages),无法直接处理动态请求,建议改用Serverless函数(如Vercel Functions、Netlify Functions)实现相同逻辑
  • 可根据需求将用户数据从文件迁移到数据库(如SQLite、PostgreSQL),方便批量管理用户
  • 注意设置正确的CORS头,避免跨域请求问题

内容的提问来源于stack exchange,提问作者qpaycm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 16:50:21