File

mod_auth_http/README.md @ 6120:bd3ff802d883

mod_anti_spam: Fix another traceback for origin sessions without an IP This is likely to be the case for stanzas originating from local hosts, for example (so not true s2s). It should be safe to bypass the IP check for those.
author Matthew Wild <mwild1@gmail.com>
date Sat, 28 Dec 2024 21:02:08 +0000
parent 6040:889d24be0a49
child 6211:750d64c47ec6
line wrap: on
line source

---
labels:
- Stage-Alpha
summary: "Authenticate users against an external HTTP API"
...

# Overview

This authentication module allows Prosody to authenticate users against
an external HTTP service.

# Configuration

``` lua
VirtualHost "example.com"
  authentication = "http"
  http_auth_url = "http://example.com/auth"
```

If the API requires Prosody to authenticate, you can provide static
credentials using HTTP Basic authentication, like so:

```
http_auth_credentials = "prosody:secret-password"
```

# Developers

This section contains information for developers who wish to implement a
HTTP service that Prosody can use for authentication.

## Protocol

Prosody will make a HTTP request to the configured API URL with an
appended `/METHOD` where `METHOD` is one of the methods described below.

GET methods must expect a series of URL-encoded query parameters, while
POST requests will receive an URL-encoded form (i.e.
`application/x-www-form-urlencoded`).

## Parameters

user
: The username, e.g. `stephanie` for the JID `stephanie@example.com`.

server
: The host part of the user's JID, e.g. `example.com` for the JID
  `stephanie@example.com`.

pass
: For methods that verify or set a user's password, the password will
  be supplied in this parameter, otherwise it is not set.

## Methods

The only mandatory methods that the service must implement are `check_password`
and `user_exists`. Unsupported methods should return a HTTP status code
of `501 Not Implemented`, but other error codes will also be handled by
Prosody.

  Method          HTTP method Success codes   Error codes       Response
  --------        ----        ---             ----------------- -----------------------------------------------------------------
  register        POST        201             409 (user exists)
  check\_password GET         200                               A text string of `true` if the user exists, or `false` otherwise.
  user\_exists    GET         200                               A text string of `true` if the user exists, or `false` otherwise.
  set\_password   POST        200, 201 or 204
  remove\_user    POST        200, 201 or 204

## Examples

With the following configuration:

``` lua
authentication = "http"
http_auth_url = "https://auth.example.net/api"
```

If a user connects and tries to log in to Prosody as "romeo@example.net"
with the password "iheartjuliet", Prosody would make the following HTTP
request:

    https://auth.example.net/api/check_password?user=romeo&server=example.net&pass=iheartjuliet

# Compatibility

Requires Prosody 0.11.0 or later.