comparison mod_auth_external/README.wiki @ 1782:29f3d6b7ad16

Import wiki pages
author Kim Alvefur <zash@zash.se>
date Mon, 24 Aug 2015 16:43:56 +0200
parents
children
comparison
equal deleted inserted replaced
1781:12ac88940fe3 1782:29f3d6b7ad16
1 #summary Authentication via external script/process
2 #labels Stage-Alpha,Type-Auth
3
4 = Introduction =
5
6 Allow client authentication to be handled by an external script/process.
7
8 = Installation =
9
10 mod_auth_external depends on a Lua module called [http://www.tset.de/lpty/ lpty]. You can install it on many platforms using [http://luarocks.org/ LuaRocks], for example:
11
12 {{{
13 sudo luarocks install lpty
14 }}}
15
16 Note: Earlier versions of the module did not depend on lpty. While using the newer version is strongly recommended, you can find the [https://prosody-modules.googlecode.com/hg-history/50ee38e95e754bf1034d980364f93564028b2f34/mod_auth_external/mod_auth_external.lua older version here] if you need it (revision 50ee38e95e75 of the repository).
17
18 = Configuration =
19
20 As with all auth modules, there is no need to add this to modules_enabled. Simply add in the global section, or for the relevant hosts:
21
22 {{{
23 authentication = "external"
24 }}}
25
26 These options are specific to mod_auth_external:
27
28 ||external_auth_protocol||May be "generic" or "ejabberd" (the latter for compatibility with ejabberd external auth scripts. Default is "generic".||
29 ||external_auth_command||The command/script to execute.||
30
31 Two other options are also available, depending on whether the module is running in 'blocking' or 'non-blocking' mode:
32 ||external_auth_timeout||blocking||The number of seconds to wait for a response from the auth process. Default is 5.||
33 ||external_auth_processes||non-blocking||The number of concurrent processes to spawn. Default is 1, increase to handle high connection rates efficiently.||
34
35 == Blocking vs non-blocking ==
36
37 Non-blocking mode is automatically activated when:
38
39 * Running Prosody trunk ([http://prosody.im/nightly/ nightly] build 414+).
40 * [http://prosody.im/doc/libevent libevent] is enabled in the config, and LuaEvent is available.
41 * lpty (see installation above) is version 1.0.1 or later.
42
43 = Protocol =
44
45 Prosody executes the given command/script, and sends it queries.
46
47 Your auth script should simply read a line from standard input, and write the result to standard output.
48 It must do this in a loop, until there's nothing left to read. Prosody can keep sending more lines to the script,
49 with a command on each line.
50
51 Each command is one line, and the response is expected to be a single line containing "0" for failure or "1" for success.
52 Your script must respond with "0" for anything it doesn't understand.
53
54 There are three commands used at the moment:
55
56 == auth ==
57 Check if a user's password is valid.
58
59 Example: {{{auth:username:example.com:abc123}}}
60
61 Note: The password can contain colons. Make sure to handle that.
62
63 == isuser ==
64 Check if a user exists.
65
66 Example: {{{isuser:username:example.com}}}
67
68 == setpass ==
69 Set a new password for the user. Implementing this is optional.
70
71 Example: {{{setpass:username:example.com:abc123}}}
72
73 Note: The password can contain colons. Make sure to handle that.
74
75 == ejabberd compatibilty ==
76 ejabberd implements a similar protocol. The main difference is that Prosody's protocol is line-based, while ejabberd's is length-prefixed.
77
78 Add this to your config if you need to use an ejabberd auth script:
79 {{{
80 external_auth_protocol = "ejabberd"
81 }}}
82
83 = Compatibility =
84 ||0.8||Works||
85 ||0.9||Works||