古い記事
ランダムジャンプ
新しい記事
Damus で Nostr の NIP-05 認証が chalow.net(このブログのドメイン)でできたのでメモ。
バッジが表示されるようになりました。
やったね!

(なんのこっちゃかわからない人は本記事はスルーしてください)

NIP-05 認証 自前サーバでできた

参考文献

以下、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 に
yto@chalow.net
を入力して 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\"}}";
    ?>
    
    .htaccess に追加。
    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};
    
    .htaccess に追加。
    RewriteEngine on
    RewriteRule ^.well-known/nostr.json$ /.well-known/nostr.cgi