draft
optional
This NIP defines a way for clients to authenticate to relays by signing an ephemeral event.
A relay may want to require clients to authenticate to access restricted resources. For example,
- A relay may request payment or other forms of whitelisting to publish events -- this can naïvely be achieved by limiting publication to events signed by the whitelisted key, but with this NIP they may choose to accept any events as long as they are published from an authenticated user;
- A relay may limit access to
kind: 4
DMs to only the parties involved in the chat exchange, and for that it may require authentication before clients can query for that kind. - A relay may limit subscriptions of any kind to paying users or users whitelisted through any other means, and require authentication.
This NIP defines a new message, AUTH
, which relays CAN send when they support authentication and clients can send to relays when they want to authenticate. When sent by relays the message has the following form:
["AUTH", <challenge-string>]
And, when sent by clients, the following form:
["AUTH", <signed-event-json>]
AUTH
messages sent by clients MUST be answered with an OK
message, like any EVENT
message.
The signed event is an ephemeral event not meant to be published or queried, it must be of kind: 22242
and it should have at least two tags, one for the relay URL and one for the challenge string as received from the relay. Relays MUST exclude kind: 22242
events from being broadcasted to any client. created_at
should be the current time. Example:
{
"kind": 22242,
"tags": [
["relay", "wss://relay.example.com/"],
["challenge", "challengestringhere"]
],
// other fields...
}