NIP-98
HTTP Auth
このNIPは、nostrイベントによるHTTPサーバへの認証リクエストに利用する一時イベントを定義する。
これはNostrのために作られた、Nostrのユーザアカウントを扱うHTTPサービスにおいて有用である。
Nostrイベント
contentは空とすべき(SHOULD)。
以下のタグが必須(REQUIRED)。
u: 絶対URL
method: HTTPリクエストメソッド
イベント例:
code:27235.json
{
"id": "fe964e758903360f28d8424d092da8494ed207cba823110be3a57dfe4b578734",
"pubkey": "63fe6318dc58583cfe16810f86dd09e18bfd76aabc24a0081ce2856f330504ed",
"content": "",
"kind": 27235,
"created_at": 1682327852,
"tags": [
[
"u",
],
[
"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ヘッダの例:
code:Authorization Header
Authorization: Nostr eyJpZCI6ImZlOTY0ZTc1ODkwMzM2MGYyOGQ4NDI0ZDA5MmRhODQ5NGVkMjA3Y2JhODIzMTEwYmUzYTU3ZGZlNGI1Nzg3MzQiLCJwdWJrZXkiOiI2M2ZlNjMxOGRjNTg1ODNjZmUxNjgxMGY4NmRkMDllMThiZmQ3NmFhYmMyNGEwMDgxY2UyODU2ZjMzMDUwNGVkIiwiY29udGVudCI6IiIsImtpbmQiOjI3MjM1LCJjcmVhdGVkX2F0IjoxNjgyMzI3ODUyLCJ0YWdzIjpbWyJ1cmwiLCJodHRwczovL2FwaS5zbm9ydC5zb2NpYWwvYXBpL3YxL241c3AvbGlzdCJdLFsibWV0aG9kIiwiR0VUIl1dLCJzaWciOiI1ZWQ5ZDhlYzk1OGJjODU0Zjk5N2JkYzI0YWMzMzdkMDA1YWYzNzIzMjQ3NDdlZmU0YTAwZTI0ZjRjMzA0MzdmZjRkZDgzMDg2ODRiZWQ0NjdkOWQ2YmUzZTVhNTE3YmI0M2IxNzMyY2M3ZDMzOTQ5YTNhYWY4NjcwNWMyMjE4NCJ9
参照実装