NIP-05認証バッジの付け方
自分のホームページなどをお持ちの方は、 https://あなたのドメイン名/.well-known/nostr.json
にファイルを設置することで自分のプロフィールに認証バッジを付けることができます。
認証バッジをつけると、本人であることを証明したり、スパムでないことを照明したりすることができます。詳しくは
ドメイン認証のページをお読みください。
1. 自分の公開鍵(npub1...)を見つけて、16進数表記に変換する
自分のプロフィールを開き、自分の公開鍵( npub1...
)をコピーしましょう。
コピーの方法はクライアントによって異なります。「IDをコピーする」というようなボタンがある場合もあれば、 npub1...
のような表記の横にコピーボタンがある場合もあります。
※秘密鍵( nsec1...
)と間違えないように!秘密鍵は誰にも教えてはいけません。
コピーが終わったら、 npub...
形式の公開鍵を HEX公開鍵
(16進文字列)に変換する必要があります。
(一部のクライアントはHexと書いてあるボタンから直接コピーできます)
2. ファイルを設置する
https://自分のドメイン/.well-known/nostr.json
にファイルをアップロードします。
外部からアクセスできるディレクトリに .well-known/nostr.json
をつくり、以下の内容を書いてください。
あなたの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
になりました

上の例だと
jack@nostr.directory
うまく設定できているかどうか
スマートフォンクライアントでバッジが付いているかを確認
Webクライアントでもバッジが付いているかを確認
https://nostter.app/jack@nostr.directory
よくあるミス
公開鍵がHEXでなくnpubになっている
アクセス可能なディレクトリの直下に nostr.json
を作っている
404 Not Foundのようなエラーが表示される場合は、適切な場所にファイルを設置できていません。
.well-known
フォルダを作成しその下に格納する必要があります
公開鍵ではなく秘密鍵を置いてしまっている
これまでに複数の事例あり、秘密鍵流出事案となるためすべてアカウント作り直しとなった

変換サイトに入力するときは、必ず
npub〜から始まる文字列を貼り付けましょう。間違ってもnsec〜から始まるものを使わないように…

IDに英大文字を使ってしまっている
IDに使える文字は
a-z
と
0-9
と
-
_
.
のみです (
仕様)

Github Pages で認証されない
理由: GitHub Pagesでは .well-known が無視されてしまう
GitHub Pagesのデフォルトの静的サイトジェネレータである
Jekyllが、
.
で始まるファイル、すなわち
.well-known
を無視するので、
.nojekyll
という空ファイルを一番上のディレクトリに置いてJekyllを使用しない設定にした上で
git push
する必要がありました。
GitHub docs 
ルートに .nojekyll の名の空ファイルを置くと認証される。その他下記参照

Jekyllを使っている人は
_config.yml
に
include: [".well-known"]
と書くと含めると良いそうです
参照 CORSの設定ミス
Webクライアントでのみ認証が通らない場合は、
CORSが正しく設定されていない可能性があります。アップロード先(WebサーバやWebホスティングサービス)のCORS設定を確認してください。
CORS 設定でハマっている人もよくみる気がします

そうですね、
認証を通すためにはCORSを有効にする必要がありますね

自分のドメインを所有していない場合
自分のドメインを所有していなくても、github pages とか vercel とかでホストしたWebサイトのメディアとしてJsonを格納しても成功します。

この機にちょっとしたポートフォリオなど作成してみては?

認証を付けてくれるWebサービスがいくつか存在します
Iris(
iris.to
): 登録ユーザ(一定額の支払いを確認)であることを証明してくれます。
その他Tips
nostr.jsonへはhttpsにて取得しにくるようなので、格納するサーバにSSL必須

NIP-05欄を
識別子@ドメイン/hoge
とした場合には
ドメイン/hoge/.well-known/
を見に行ってくれるクライアントが多いです

実装によっては表示にも反映されるので、 .well-known
までのパスを絵文字にして遊べたりします
本来
.well-known
はドメインのトップに置く必要がある(
RFC8615)ため、全てのクライアントが同様の挙動をしてくれるとは限らず、あまり推奨はされません
一部のレンタルサーバは、Cookieがないとレスポンスを返さない?
解説記事
過去の情報
「認証を付けてくれるWebサービス」のたぐいは、有名なものは一部クライアントではバッジがつかない or 横線が引かれる、など検知されることがあります。 →CORSの設定ミスの模様です
Snortでは取り消し線が引かれるらしい?
されないサービスもあるかも知れませんが、いずれされるでしょう
あれ、そうなんですか?少なくとも iris.to では横線が引かれるのは認証が通っていない(正しい公開鍵でない・CORS設定等でアクセスできない)ときの表示だと思うのですが、仕様に準拠していてもそのような表示になることはあるのでしょうか?

クライアント独自でそのような機能を作ることはできると思いますが、だとしたらそのような blocklist を公開していそうな気がします

Snortで横線が引かれているというPostを見た気がしたのですが、検索しても見つけられずorz もしかしたら誤りかもしれません。
でも、
.co.jp
や
.gov
といったドメイン以外でこの認証によってバッジをつける意味はあまりない気がするので、他におもしろい使い方を考えられると楽しそうですね
