コンテンツにスキップ
Zenn Dev Snowcait Articles E2361b3827d517

Nostr で認証バッジを付ける

  • URL: https://zenn.dev/snowcait/articles/e2361b3827d517
  • 日付: 2026-06-26
  • Tier: Tier 3
  • 要旨: Nostr は分散型 SNS プロトコルで、公開鍵・秘密鍵ベースのアカウント管理を採用し、メール登録不要でアカウントを作成できる。NIP-05 仕様に基づき DNS を使った認証バッジを取得でき、自分のドメインに /.well-known/nostr.json を公開することで設定できる。自前サーバーがなくても GitHub Pages を使って無料でホストする方法があり、GitHub アカウントで運用すれば一定の本人確認としても機能する。Jekyll が隠しフォルダをホストしない点に注意が必要で、.nojekyll ファイルの作成が必須となる。CORS 設定も必要だが GitHub Pages はデフォルトでワイルドカードを許可している。

詳細

Nostr の基本:

  • 公開鍵・秘密鍵でアカウント管理。メール登録不要
  • リレーサーバー経由でデータを中継。複数リレーへ接続して冗長化
  • 秘密鍵漏洩時の復旧手段なし。通信量が多い点に注意

GitHub Pages を使った NIP-05 認証バッジの設定手順:

  1. {USERNAME}.github.io という名前のリポジトリを作成
  2. /docs/.nojekyll を作成(Jekyll の隠しフォルダ除外を無効化)
  3. /docs/.well-known/nostr.json を作成: {“names”: {“ユーザー名”: “Hex公開鍵”}}
  4. Settings > Pages で /docs をホストソースに設定
  5. クライアントのプロフィール NIP-05 欄に {username}@{username}.github.io を設定

ユーザー名を _ にするとドメインだけの表示になる。 Hex 公開鍵は Iris の場合アカウント設定の Copy hex で取得可能。

動的サーバーを使う場合: クライアントは name クエリパラメーターを付けてアクセスするため、指定ユーザーのデータのみ返すよう実装すると効率的。Access-Control-Allow-Origin: * の CORS 設定が必要。