upleb.uk

Public git repos — served from a NIP-34 GRASP relay at git.upleb.uk

summaryrefslogtreecommitdiff
path: root/98.md
diff options
context:
space:
mode:
authorKieran <kieran@harkin.me>2023-04-24 10:32:03 +0100
committerKieran <kieran@harkin.me>2023-05-08 12:22:53 +0100
commit29f26e72b5fd4e918c8d0d9f9d9ae384f7052a0a (patch)
treeb887d4b7f1dac6178dd136be815444af2f725daa /98.md
parent1678c53dcd3a2cefcf953722d501c03920ce6092 (diff)
NIP-98
Diffstat (limited to '98.md')
-rw-r--r--98.md64
1 files changed, 64 insertions, 0 deletions
diff --git a/98.md b/98.md
new file mode 100644
index 0000000..48d079e
--- /dev/null
+++ b/98.md
@@ -0,0 +1,64 @@
1NIP-98
2======
3
4HTTP Auth
5-------------------------
6
7`draft` `optional` `author:kieran` `author:melvincarvalho`
8
9This NIP defines and ephemerial event used to authenticate requests to HTTP servers using nostr events.
10
11This is useful for HTTP services which are build for Nostr and deal with Nostr user accounts.
12
13## Nostr event
14
15A `kind 27235` (In reference to [RFC 7235](https://www.rfc-editor.org/rfc/rfc7235)) event is used.
16
17The `content` SHOULD be empty.
18
19The following tags are defined as REQUIRED.
20
21* `url` - absolute URL
22* `method` - HTTP Request Method
23
24Example event:
25```json
26{
27 "id": "fe964e758903360f28d8424d092da8494ed207cba823110be3a57dfe4b578734",
28 "pubkey": "63fe6318dc58583cfe16810f86dd09e18bfd76aabc24a0081ce2856f330504ed",
29 "content": "",
30 "kind": 27235,
31 "created_at": 1682327852,
32 "tags": [
33 [
34 "url",
35 "https://api.snort.social/api/v1/n5sp/list"
36 ],
37 [
38 "method",
39 "GET"
40 ]
41 ],
42 "sig": "5ed9d8ec958bc854f997bdc24ac337d005af372324747efe4a00e24f4c30437ff4dd8308684bed467d9d6be3e5a517bb43b1732cc7d33949a3aaf86705c22184"
43}
44```
45
46Servers MUST perform the following checks in order to validate the event:
471. The `kind` MUST be `27235`.
482. The `created_at` MUST be within a reasonable time window (suggestion 60 seconds).
493. The `url` tag MUST be exactly the same as the absolute request URL (including query parameters).
504. The `method` tag MUST be the same HTTP method used for the requested resource.
51
52All other checks which server MAY do are OPTIONAL, and implementation specific.
53
54## Request Flow
55
56Using the `Authorization` header, the `kind 27235` event MUST be `base64` encoded and use the Authorization scheme `Nostr`
57
58Example HTTP Authorization header:
59```
60Authorization: Nostr eyJpZCI6ImZlOTY0ZTc1ODkwMzM2MGYyOGQ4NDI0ZDA5MmRhODQ5NGVkMjA3Y2JhODIzMTEwYmUzYTU3ZGZlNGI1Nzg3MzQiLCJwdWJrZXkiOiI2M2ZlNjMxOGRjNTg1ODNjZmUxNjgxMGY4NmRkMDllMThiZmQ3NmFhYmMyNGEwMDgxY2UyODU2ZjMzMDUwNGVkIiwiY29udGVudCI6IiIsImtpbmQiOjI3MjM1LCJjcmVhdGVkX2F0IjoxNjgyMzI3ODUyLCJ0YWdzIjpbWyJ1cmwiLCJodHRwczovL2FwaS5zbm9ydC5zb2NpYWwvYXBpL3YxL241c3AvbGlzdCJdLFsibWV0aG9kIiwiR0VUIl1dLCJzaWciOiI1ZWQ5ZDhlYzk1OGJjODU0Zjk5N2JkYzI0YWMzMzdkMDA1YWYzNzIzMjQ3NDdlZmU0YTAwZTI0ZjRjMzA0MzdmZjRkZDgzMDg2ODRiZWQ0NjdkOWQ2YmUzZTVhNTE3YmI0M2IxNzMyY2M3ZDMzOTQ5YTNhYWY4NjcwNWMyMjE4NCJ9
61```
62
63## References
64- C# ASP.NET `AuthenticationHandler` [NostrAuth.cs](https://gist.github.com/v0l/74346ae530896115bfe2504c8cd018d3) \ No newline at end of file