comparison mod_client_management/README.md @ 5650:0eb2d5ea2428

merge
author Stephen Paul Weber <singpolyma@singpolyma.net>
date Sat, 06 May 2023 19:40:23 -0500
parents 7c123d3285de
children e9af6abf2b1e
comparison
equal deleted inserted replaced
5649:2c69577b28c2 5650:0eb2d5ea2428
1 ---
2 labels:
3 - Stage-Beta
4 summary: "Manage clients with access to your account"
5 rockspec:
6 dependencies:
7 - mod_sasl2_fast
8 ---
9
10 This module allows a user to identify what currently has access to their
11 account.
12
13 This module depends on [mod_sasl2_fast] and mod_tokenauth (bundled with
14 Prosody). Both will be automatically loaded if this module is loaded.
15
16 ## Configuration
17
18 | Name | Description | Default |
19 |---------------------------|--------------------------------------------------------|-----------------|
20 | enforce_client_ids | Only allow SASL2-compatible clients | `false` |
21
22 When `enforce_client_ids` is not enabled, the client listing may be less accurate due to legacy clients,
23 which can only be tracked by their resource, which is public information, not necessarily unique to a
24 client instance, and is also exposed to other XMPP entities the user communicates with.
25
26 When `enforce_client_ids` is enabled, clients that don't support SASL2 and provide a client id will be
27 denied access.
28
29 ## Shell usage
30
31 You can use this module via the Prosody shell. For example, to list a user's
32 clients:
33
34 ```shell
35 prosodyctl shell user clients user@example.com
36 ```
37
38 ## Compatibility
39
40 Requires Prosody trunk (as of 2023-03-29). Not compatible with Prosody 0.12
41 and earlier.
42
43 ## Developers
44
45 ### Protocol
46
47 #### Listing clients
48
49 To list clients that have access to the user's account, send the following
50 stanza:
51
52 ```xml
53 <iq id="p" type="get">
54 <list xmlns="xmpp:prosody.im/protocol/manage-clients"/>
55 </iq>
56 ```
57
58 The server will respond with a list of clients:
59
60 ```xml
61 <iq id="p" to="mattj-gajim@auth2.superxmpp.com/gajim.UYJKBHKT" type="result" xmlns="jabber:client">
62 <clients xmlns="xmpp:prosody.im/protocol/manage-clients">
63 <client connected="true" id="client/zeiP41HLglIu" type="session">
64 <first-seen>2023-04-06T14:26:08Z</first-seen>
65 <last-seen>2023-04-06T14:37:25Z</last-seen>
66 <auth>
67 <password/>
68 </auth>
69 <user-agent>
70 <software>Gajim</software>
71 <uri>https://gajim.org/</uri>
72 <device>Juliet's laptop</device>
73 </user-agent>
74 </client>
75 <client connected="false" id="grant/HjEEr45_LQr" type="access">
76 <first-seen>2023-03-27T15:16:09Z</first-seen>
77 <last-seen>2023-03-27T15:37:24Z</last-seen>
78 <user-agent>
79 <software>REST client</software>
80 </user-agent>
81 </client>
82 </clients>
83 </iq>
84 ```
85
86 On the `<client/>` tag most things are self-explanatory. The following attributes
87 are defined:
88
89 - 'connected': a boolean that reflects whether this client has an active session
90 on the server (i.e. this includes connected and "hibernating" sessions).
91 - 'id': an opaque reference for the client, which can be used to revoke access.
92 - 'type': either `"session"` if this client is known to have an active or inactive
93 client session on the server, or "access" if no session has been established (e.g.
94 it may have been granted access to the account, but only used non-XMPP APIs or
95 never logged in).
96
97 The `<first-seen/>` and `<last-seen/>` elements contain timestamps that reflect
98 when a client was first granted access to the user's account, and when it most
99 recently used that access. For active sessions, it may reflect the current
100 time or the time of the last login.
101
102 The `<user-agent/>` element contains information about the client software. It
103 may contain any of three optional child elements, each containing text content:
104
105 - `<software/>` - the name of the software
106 - `<uri/>` - a URI/URL for the client, such as a homepage
107 - `<device/>` - a human-readable identifier/name for the device where the client
108 runs
109
110 The `<auth/>` element lists the known authentication methods that the client
111 has used to gain access to the account. The following elements are defined:
112
113 - `<password/>` - the client has presented a valid password
114 - `<grant/>` - the client has a valid authorization grant (e.g. via OAuth)
115 - `<fast/>` - the client has active FAST tokens
116
117 #### Revoking access
118
119 To revoke a client's access, send a `<revoke/>` element with an 'id' attribute
120 containing one of the client ids fetched from the list:
121
122 ```xml
123 <iq id="p" type="set">
124 <revoke xmlns="xmpp:prosody.im/protocol/manage-clients" id="grant/HjEEr45_LQr" />
125 </iq>
126 ```
127
128 The server will respond with an empty result if the revocation succeeds:
129
130 ```xml
131 <iq id="p" type="result" />
132 ```
133
134 If the client has previously authenticated with a password, there is no way to
135 revoke access except by changing the user's password. If you request
136 revocation of such a client, the server will respond with a 'service-unavailable'
137 error, with the 'password-reset-required' application error:
138
139 ```xml
140 <iq id="p" type="error">
141 <error type="cancel">
142 <service-unavailable xmlns="xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'">
143 <password-reset-required xmlns="xmpp:prosody.im/protocol/manage-clients"/>
144 </error>
145 </iq>
146 ```