generated at
NIP-05認証バッジの付け方

自分のホームページなどをお持ちの方は、 https://あなたのドメイン名/.well-known/nostr.json にファイルを設置することで自分のプロフィールに認証バッジを付けることができます。

認証バッジをつけると、本人であることを証明したり、スパムでないことを照明したりすることができます。詳しくはドメイン認証のページをお読みください。

1. 自分の公開鍵(npub1...)を見つけて、16進数表記に変換する
自分のプロフィールを開き、自分の公開鍵( npub1... )をコピーしましょう。
コピーの方法はクライアントによって異なります。「IDをコピーする」というようなボタンがある場合もあれば、 npub1... のような表記の横にコピーボタンがある場合もあります。

※秘密鍵( nsec1... )と間違えないように!秘密鍵は誰にも教えてはいけません。

コピーが終わったら、 npub... 形式の公開鍵を HEX公開鍵 (16進文字列)に変換する必要があります。
公開鍵⇔16進数表記のページを参考にして、変換してください。
(一部のクライアントはHexと書いてあるボタンから直接コピーできます)

2. ファイルを設置する
https://自分のドメイン/.well-known/nostr.json にファイルをアップロードします。
外部からアクセスできるディレクトリに .well-known/nostr.json をつくり、以下の内容を書いてください。
json:nostr.json
{ "names": { "ここにあなたのID": "ここにあなたのHEX公開鍵 - npubじゃないよ" } }
あなたのIDの部分には、TwitterのIDのような自分を表すテキストを設定できます。
使える文字は a-z 0-9 - _ . のみです。英大文字や日本語は利用できません。

IDを複数個記述することもできます。
nostr.json
{ "names": { "ここにあなたのID": "ここにあなたのHEX公開鍵 - npub...の形式は使えないので注意", "ここに二人目のID": "ここに二人目のHEX公開鍵 - npub...の形式は使えないので注意" } }

なお、IDを _ (アンダースコア)にすれば、クライアントで表示されるときにドメイン名だけが表示されるようになります。
(対応しているクライアントのみ)
nostr.json
{ "names": { "_": "ここにあなたのHEX公開鍵。npub...の形式は使えないので、後述のツールで変換" } }

実際の例
nostr.json
{ "names": { "jack": "82341f882b6eabcd2ba7f1ef90aad961cf074af15b9ef44a09f9d2a8fbfbe6a2" } }

うまくアップロードできたかどうかを確認するには、ブラウザで https://自分のドメイン/.well-known/nostr.json を開き、問題なく表示できるかを確認するとよいでしょう。

3. プロフィールの設定
その後、お使いのNostrクライアントのプロフィール設定の NIP-05 欄または Nostrアドレス 欄に
JSONに記述したID@あなたのドメイン を入力します。
例えば筆者の場合、 h2so4@personal-portal.vercel.app になりましたh2so4
上の例だと jack@nostr.directory

うまく設定できているかどうか
スマートフォンクライアントでバッジが付いているかを確認
Webクライアントでもバッジが付いているかを確認
https://nostter.app/jack@nostr.directory

よくあるミス
公開鍵がHEXでなくnpubになっている
公開鍵⇔16進数表記から変換してください
アクセス可能なディレクトリの直下に nostr.json を作っている
404 Not Foundのようなエラーが表示される場合は、適切な場所にファイルを設置できていません。
.well-known フォルダを作成しその下に格納する必要があります
公開鍵ではなく秘密鍵を置いてしまっている
これまでに複数の事例あり、秘密鍵流出事案となるためすべてアカウント作り直しとなった yto
変換サイトに入力するときは、必ずnpub〜から始まる文字列を貼り付けましょう。間違ってもnsec〜から始まるものを使わないように… heguro
IDに英大文字を使ってしまっている
IDに使える文字は a-z 0-9 - _ . のみです (仕様) yto
Github Pages で認証されない
理由: GitHub Pagesでは .well-known が無視されてしまう
GitHub Pagesのデフォルトの静的サイトジェネレータであるJekyllが、 . で始まるファイル、すなわち .well-known を無視するので、 .nojekyll という空ファイルを一番上のディレクトリに置いてJekyllを使用しない設定にした上で git push する必要がありました。GitHub docs takaria0
ルートに .nojekyll の名の空ファイルを置くと認証される。その他下記参照 koteitan
Jekyllを使っている人は _config.yml include: [".well-known"] と書くと含めると良いそうです 参照
CORSの設定ミス
Webクライアントでのみ認証が通らない場合は、CORSが正しく設定されていない可能性があります。アップロード先(WebサーバやWebホスティングサービス)のCORS設定を確認してください。
CORS 設定でハマっている人もよくみる気がしますhideyoshi
そうですね、認証を通すためにはCORSを有効にする必要がありますh2so4
CORSの設定についての公式の解説:Allowing access from JavaScript apps

自分のドメインを所有していない場合
自分のドメインを所有していなくても、github pages とか vercel とかでホストしたWebサイトのメディアとしてJsonを格納しても成功します。h2so4
この機にちょっとしたポートフォリオなど作成してみては?h2so4
認証を付けてくれるWebサービスがいくつか存在します
nostr.directory:Twitter等のアカウントの所有証明を行い、本人だと証明してくれます。
nosutora.com:登録ユーザ(メールアドレスを確認)であることを証明してくれます
Nostr Plebs:登録ユーザ(一定額の支払いを確認)であることを証明してくれます。
Iris( iris.to ): 登録ユーザ(一定額の支払いを確認)であることを証明してくれます。

その他Tips
nostr.jsonへはhttpsにて取得しにくるようなので、格納するサーバにSSL必須TKG3
NIP-05欄を 識別子@ドメイン/hoge とした場合には ドメイン/hoge/.well-known/ を見に行ってくれるクライアントが多いです heguro
実装によっては表示にも反映されるので、 .well-known までのパスを絵文字にして遊べたりします
本来 .well-known はドメインのトップに置く必要がある(RFC8615)ため、全てのクライアントが同様の挙動をしてくれるとは限らず、あまり推奨はされません
一部のレンタルサーバは、Cookieがないとレスポンスを返さない?
nostr.json generator NIP-05ブラウザ拡張から設定を読み取ってnostr.jsonを生成してくれます

解説記事

過去の情報
「認証を付けてくれるWebサービス」のたぐいは、有名なものは一部クライアントではバッジがつかない or 横線が引かれる、など検知されることがあります。 →CORSの設定ミスの模様です
Snortでは取り消し線が引かれるらしい?
されないサービスもあるかも知れませんが、いずれされるでしょう
あれ、そうなんですか?少なくとも iris.to では横線が引かれるのは認証が通っていない(正しい公開鍵でない・CORS設定等でアクセスできない)ときの表示だと思うのですが、仕様に準拠していてもそのような表示になることはあるのでしょうか?hideyoshi
クライアント独自でそのような機能を作ることはできると思いますが、だとしたらそのような blocklist を公開していそうな気がしますhideyoshi
Snortで横線が引かれているというPostを見た気がしたのですが、検索しても見つけられずorz もしかしたら誤りかもしれません。h2so4
有名だったWeb認証サービスのnost.vipCORS対応していないことによるものでした heguro
でも、 .co.jp .gov といったドメイン以外でこの認証によってバッジをつける意味はあまりない気がするので、他におもしろい使い方を考えられると楽しそうですねhideyoshi