ブログで使っている自分のドメイン(とサーバ)で NIP-05 認証する
2023-02-04-1
[Programming][WebTool]
Damus で Nostr の NIP-05 認証が chalow.net(このブログのドメイン)でできたのでメモ。
バッジが表示されるようになりました。
やったね!
(なんのこっちゃかわからない人は本記事はスルーしてください)
参考文献
以下、chalow.net で yto を NIP-05 認証した手順。
chalow.net のサーバ側でやること:
右辺のコードは Publick Key を hex 形式にしたもの。
hex 形式への変換方法: damus key converter (mehori記事より)
そのドメインで1ユーザ (yto) しか使わないのならば、上記の中身をそのまま ".well-known/nostr.json" に保存する。
Damus(アプリ)側でやること:
Profile → Edit の NIPS-05 VERIFICATION に
メアド形式だけどメアドじゃないよ。
とりあえず今回はこの方法で、Damus で認証に成功しました。
バッジが表示されるようになりました。
Damus ではうまく行きましたが、他のアプリでは nostr.json を返すときのヘッダーで "Access-Control-Allow-Origin: *" を出さないとうまくいかないことがあるかも。
chalow.net で使っているさくらのレンタルサーバ(500円サーバ)では .htaccess に下記を足せば OK でした。
確認方法 (nips/05.md より)
2/7に追記。
複数ユーザに対応する方法。
nostr.json
最初、複数ユーザを列記できることに気づかなかったのでプログラムでの雑な解決を書いていた。
バッジが表示されるようになりました。
やったね!
(なんのこっちゃかわからない人は本記事はスルーしてください)

参考文献
- ツイッターライクなSNS「Nostr」を Damus アプリで使う。初期の設定と、認証バッジを付ける手順 | Lifehacking.jp
- nips/05.md at master · nostr-protocol/nips · GitHub
- How To Get Your Nostr Account NIP-05 Verified - The Bitcoin Manual
以下、chalow.net で yto を NIP-05 認証した手順。
自分のサーバでやること
chalow.net のサーバ側でやること:
https://chalow.net/.well-known/nostr.json?name=ytoがきたら、これを返すようにする。
{ "names": { "yto": "df705aac787153c22d74aa78690c7adba1c084a594a496e5e64adc89b42d0c84" } }
右辺のコードは Publick Key を hex 形式にしたもの。
hex 形式への変換方法: damus key converter (mehori記事より)
そのドメインで1ユーザ (yto) しか使わないのならば、上記の中身をそのまま ".well-known/nostr.json" に保存する。
Damus でやること
Damus(アプリ)側でやること:
Profile → Edit の NIPS-05 VERIFICATION に
[email protected]を入力して Save。
メアド形式だけどメアドじゃないよ。
とりあえず今回はこの方法で、Damus で認証に成功しました。
バッジが表示されるようになりました。
アクセスコントロールまわり
Damus ではうまく行きましたが、他のアプリでは nostr.json を返すときのヘッダーで "Access-Control-Allow-Origin: *" を出さないとうまくいかないことがあるかも。
chalow.net で使っているさくらのレンタルサーバ(500円サーバ)では .htaccess に下記を足せば OK でした。
Header set Access-Control-Allow-Origin: "*"
確認方法 (nips/05.md より)
% curl -sI 'https://chalow.net/.well-known/nostr.json?name=yto' | grep -i '^Access-Control-' access-control-allow-origin: *
複数ユーザ対応
2/7に追記。
複数ユーザに対応する方法。
nostr.json
{ "names" : { "yto", "bfba4e19f9080450476d2275...", "foobar", "2f6d3590caf1ad5548b07644...", "hogehoge", "1af2b6ff36ba5b401b8d36972..." } }
以下、oboslete:
最初、複数ユーザを列記できることに気づかなかったのでプログラムでの雑な解決を書いていた。
- PHP
.well-known/nostr.php を置いて動くようにする。
<?php header("Content-Type: application/json; charset=utf-8"); $db = [ "yto" => "bfba4e19f9080450476d2275...", "foobar" => "2f6d3590caf1ad5548b07644...", "hogehoge" => "1af2b6ff36ba5b401b8d36972...", ]; $name = $_GET['name']; $code = $db[$name]; if ($code) echo "{\"names\":{\"$name\":\"$code\"}}"; ?>
RewriteEngine on RewriteRule ^.well-known/nostr.json$ /.well-known/nostr.php
- Perl
.well-known/nostr.cgi を置いて動くようにする。
#!/usr/bin/env perl use strict; use warnings; use CGI; my %db = ( "yto" => "bfba4e19f9080450476d2275...", "foobar" => "2f6d3590caf1ad5548b07644...", "hogehoge" => "1af2b6ff36ba5b401b8d36972...", ); my $q = new CGI; my $name = $q->param('name') || ""; print "Content-type: applecation/json; charset=utf-8\n\n"; print qq({"names":{"$name":"$db{$name}"}}\n) if $db{$name};
RewriteEngine on RewriteRule ^.well-known/nostr.json$ /.well-known/nostr.cgi
この記事に言及しているこのブログ内の記事