generated at
NIP-98

> HTTP Auth

このNIPは、nostrイベントによるHTTPサーバへの認証リクエストに利用する一時イベントを定義する。
これはNostrのために作られた、Nostrのユーザアカウントを扱うHTTPサービスにおいて有用である。

Nostrイベント
kind 27235 のイベントを用いる (RFC 7235にちなんで)。

content は空とすべき(SHOULD)。
以下のタグが必須(REQUIRED)。
u : 絶対URL
method : HTTPリクエストメソッド

イベント例:
27235.json
{ "id": "fe964e758903360f28d8424d092da8494ed207cba823110be3a57dfe4b578734", "pubkey": "63fe6318dc58583cfe16810f86dd09e18bfd76aabc24a0081ce2856f330504ed", "content": "", "kind": 27235, "created_at": 1682327852, "tags": [ [ "u", "https://api.snort.social/api/v1/n5sp/list" ], [ "method", "GET" ] ], "sig": "5ed9d8ec958bc854f997bdc24ac337d005af372324747efe4a00e24f4c30437ff4dd8308684bed467d9d6be3e5a517bb43b1732cc7d33949a3aaf86705c22184" }

サーバは、このイベントを検証するために以下のチェックを行わなければならない(MUST)。
1. kind 27235 でなければならない(MUST)
2. created_at は正当な範囲内でなければならない(MUST) (60秒程度がおすすめ)
3. u タグの値は(クエリパラメータを含めて)リクエスト対象のURLと正確に一致していなければならない(MUST)
4. method タグの値はリソースのリクエストに用いられたものと同じでなければならない(MUST)

リクエストがボディを持つ場合(POST/PUT/PATCHメソッド)、クライアントはそのリクエストボディのSHA256ハッシュ(hex形式)を payload タグに含めるべき(SHOULD) ( ["payload", "<sha256-hex>"] )。サーバは、リクエストのペイロードが正当であることを検証するためにこれを確認してもよい(MAY)。

どれか1つでも確認に失敗した場合、サーバは 401 Unauthorized レスポンスコードで応答すべきである(SHOULD)。

サーバは上記以外のチェックを行ってもよい(MAY)が、それらはすべて任意(OPTIONAL)で、実装固有のものである。

リクエストの流れ
Authorization ヘッダを用いる。 kind 27235 のイベントはbase64エンコードし、認証方式(※)には Nostr を用いなければならない(MUST)。
(※) NIP原文では Authorization scheme となっているが、RFC 7235上の正式名称は Authentication scheme。MDN の訳語にならって「認証方式」とする。

HTTP Authorizationヘッダの例:
Authorization Header
Authorization: Nostr eyJpZCI6ImZlOTY0ZTc1ODkwMzM2MGYyOGQ4NDI0ZDA5MmRhODQ5NGVkMjA3Y2JhODIzMTEwYmUzYTU3ZGZlNGI1Nzg3MzQiLCJwdWJrZXkiOiI2M2ZlNjMxOGRjNTg1ODNjZmUxNjgxMGY4NmRkMDllMThiZmQ3NmFhYmMyNGEwMDgxY2UyODU2ZjMzMDUwNGVkIiwiY29udGVudCI6IiIsImtpbmQiOjI3MjM1LCJjcmVhdGVkX2F0IjoxNjgyMzI3ODUyLCJ0YWdzIjpbWyJ1cmwiLCJodHRwczovL2FwaS5zbm9ydC5zb2NpYWwvYXBpL3YxL241c3AvbGlzdCJdLFsibWV0aG9kIiwiR0VUIl1dLCJzaWciOiI1ZWQ5ZDhlYzk1OGJjODU0Zjk5N2JkYzI0YWMzMzdkMDA1YWYzNzIzMjQ3NDdlZmU0YTAwZTI0ZjRjMzA0MzdmZjRkZDgzMDg2ODRiZWQ0NjdkOWQ2YmUzZTVhNTE3YmI0M2IxNzMyY2M3ZDMzOTQ5YTNhYWY4NjcwNWMyMjE4NCJ9

参照実装
C# ASP.NET AuthenticationHandler NostrAuth.cs