diff options
Diffstat (limited to '98.md')
| -rw-r--r-- | 98.md | 64 |
1 files changed, 64 insertions, 0 deletions
| @@ -0,0 +1,64 @@ | |||
| 1 | NIP-98 | ||
| 2 | ====== | ||
| 3 | |||
| 4 | HTTP Auth | ||
| 5 | ------------------------- | ||
| 6 | |||
| 7 | `draft` `optional` `author:kieran` `author:melvincarvalho` | ||
| 8 | |||
| 9 | This NIP defines and ephemerial event used to authenticate requests to HTTP servers using nostr events. | ||
| 10 | |||
| 11 | This is useful for HTTP services which are build for Nostr and deal with Nostr user accounts. | ||
| 12 | |||
| 13 | ## Nostr event | ||
| 14 | |||
| 15 | A `kind 27235` (In reference to [RFC 7235](https://www.rfc-editor.org/rfc/rfc7235)) event is used. | ||
| 16 | |||
| 17 | The `content` SHOULD be empty. | ||
| 18 | |||
| 19 | The following tags are defined as REQUIRED. | ||
| 20 | |||
| 21 | * `url` - absolute URL | ||
| 22 | * `method` - HTTP Request Method | ||
| 23 | |||
| 24 | Example 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 | |||
| 46 | Servers MUST perform the following checks in order to validate the event: | ||
| 47 | 1. The `kind` MUST be `27235`. | ||
| 48 | 2. The `created_at` MUST be within a reasonable time window (suggestion 60 seconds). | ||
| 49 | 3. The `url` tag MUST be exactly the same as the absolute request URL (including query parameters). | ||
| 50 | 4. The `method` tag MUST be the same HTTP method used for the requested resource. | ||
| 51 | |||
| 52 | All other checks which server MAY do are OPTIONAL, and implementation specific. | ||
| 53 | |||
| 54 | ## Request Flow | ||
| 55 | |||
| 56 | Using the `Authorization` header, the `kind 27235` event MUST be `base64` encoded and use the Authorization scheme `Nostr` | ||
| 57 | |||
| 58 | Example HTTP Authorization header: | ||
| 59 | ``` | ||
| 60 | Authorization: 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 | ||