comparison mod_http_oauth2/README.markdown @ 5650:0eb2d5ea2428

merge
author Stephen Paul Weber <singpolyma@singpolyma.net>
date Sat, 06 May 2023 19:40:23 -0500
parents 2393dbae51ed
children 2a11f590c5c8
comparison
equal deleted inserted replaced
5649:2c69577b28c2 5650:0eb2d5ea2428
1 --- 1 ---
2 labels: 2 labels:
3 - Stage-Alpha 3 - Stage-Alpha
4 summary: 'OAuth2 API' 4 summary: 'OAuth2 API'
5 rockspec:
6 build:
7 copy_directories:
8 - html
5 ... 9 ...
6 10
7 Introduction 11 ## Introduction
8 ============
9 12
10 This module is a work-in-progress intended for developers only! 13 This module implements an [OAuth2](https://oauth.net/2/)/[OpenID Connect
14 (OIDC)](https://openid.net/connect/) provider HTTP frontend on top of
15 Prosody's usual internal authentication backend.
11 16
12 Configuration 17 OAuth and OIDC are web standards that allow you to provide clients and
13 ============= 18 third-party applications limited access to your account, without sharing your
19 password with them.
14 20
15 None currently. 21 With this module deployed, software that supports OAuth can obtain "access
22 tokens" from Prosody which can then be used to connect to XMPP accounts using
23 the 'OAUTHBEARER' SASL mechanism or via non-XMPP interfaces such as [mod_rest].
16 24
17 Compatibility 25 Although this module has been around for some time, it has recently been
18 ============= 26 significantly extended and largely rewritten to support OAuth/OIDC more fully.
19 27
20 Requires Prosody 0.12+ or trunk. 28 As of April 2023, it should be considered **alpha** stage. It works, we have
29 tested it, but it has not yet seen wider review, testing and deployment. At
30 this stage we recommend it for experimental and test deployments only. For
31 specific information, see the [deployment notes section](#deployment-notes)
32 below.
33
34 Known client implementations:
35
36 - [example shell script for mod_rest](https://hg.prosody.im/prosody-modules/file/tip/mod_rest/example/rest.sh)
37 - *(we need you!)*
38
39 Support for OAUTHBEARER has been added to the Lua XMPP library, [verse](https://code.matthewwild.co.uk/verse).
40 If you know of additional implementations, or are motivated to work on one,
41 please let us know! We'd be happy to help (e.g. by providing a test server).
42
43 ## Standards support
44
45 Notable supported standards:
46
47 - [RFC 6749: The OAuth 2.0 Authorization Framework](https://www.rfc-editor.org/rfc/rfc6749)
48 - [RFC 7009: OAuth 2.0 Token Revocation](https://www.rfc-editor.org/rfc/rfc7009)
49 - [RFC 7628: A Set of Simple Authentication and Security Layer (SASL) Mechanisms for OAuth](https://www.rfc-editor.org/rfc/rfc7628)
50 - [RFC 7636: Proof Key for Code Exchange by OAuth Public Clients](https://www.rfc-editor.org/rfc/rfc7636)
51 - [OpenID Connect Core 1.0](https://openid.net/specs/openid-connect-core-1_0.html)
52 - [OpenID Connect Dynamic Client Registration 1.0](https://openid.net/specs/openid-connect-registration-1_0.html) & [RFC 7591: OAuth 2.0 Dynamic Client Registration](https://www.rfc-editor.org/rfc/rfc7591.html)
53 - [OpenID Connect Discovery 1.0](https://openid.net/specs/openid-connect-discovery-1_0.html)
54
55 ## Configuration
56
57 ### Interface
58
59 The module presents a web page to users to allow them to authenticate when
60 a client requests access. Built-in pages are provided, but you may also theme
61 or entirely override them.
62
63 This module honours the 'site_name' configuration option that is also used by
64 a number of other modules:
65
66 ```lua
67 site_name = "My XMPP Server"
68 ```
69
70 To provide custom templates, specify the path to the template directory:
71
72 ```lua
73 oauth2_template_path = "/etc/prosody/custom-oauth2-templates"
74 ```
75
76 Some templates support additional variables, that can be provided by the
77 'oauth2_template_style' option:
78
79 ```lua
80 oauth2_template_style = {
81 background_colour = "#ffffff";
82 }
83 ```
84
85 ### Token parameters
86
87 The following options configure the lifetime of tokens issued by the module.
88 The defaults are recommended.
89
90 ```lua
91 oauth2_access_token_ttl = 86400 -- 24 hours
92 oauth2_refresh_token_ttl = nil -- unlimited unless revoked by the user
93 ```
94
95 ### Dynamic client registration
96
97 To allow users to connect any compatible software, you should enable dynamic
98 client registration.
99
100 Dynamic client registration can be enabled by configuring a JWT key. Algorithm
101 defaults to *HS256* lifetime defaults to forever.
102
103 ```lua
104 oauth2_registration_key = "securely generated JWT key here"
105 oauth2_registration_algorithm = "HS256"
106 oauth2_registration_ttl = nil -- unlimited by default
107 ```
108
109 ### Supported flows
110
111 Various flows can be disabled and enabled with
112 `allowed_oauth2_grant_types` and `allowed_oauth2_response_types`:
113
114 ```lua
115 allowed_oauth2_grant_types = {
116 "authorization_code"; -- authorization code grant
117 "password"; -- resource owner password grant
118 }
119
120 allowed_oauth2_response_types = {
121 "code"; -- authorization code flow
122 -- "token"; -- implicit flow disabled by default
123 }
124 ```
125
126 The [Proof Key for Code Exchange][RFC 7636] mitigation method can be
127 made required:
128
129 ```lua
130 oauth2_require_code_challenge = true
131 ```
132
133 Further, individual challenge methods can be enabled or disabled:
134
135 ```lua
136 allowed_oauth2_code_challenge_methods = {
137 "plain"; -- the insecure one
138 "S256";
139 }
140 ```
141
142 ### Policy documents
143
144 Links to Terms of Service and Service Policy documents can be advertised
145 for use by OAuth clients:
146
147 ```lua
148 oauth2_terms_url = "https://example.com/terms-of-service.html"
149 oauth2_policy_url = "https://example.com/service-policy.pdf"
150 ```
151
152 ## Deployment notes
153
154 ### Access management
155
156 This module does not provide an interface for users to manage what they have
157 granted access to their account! (e.g. to view and revoke clients they have
158 previously authorized). It is recommended to join this module with
159 mod_client_management to provide such access. However, at the time of writing,
160 no XMPP clients currently support the protocol used by that module. We plan to
161 work on additional interfaces in the future.
162
163 ### Scopes
164
165 OAuth supports "scopes" as a way to grant clients limited access.
166
167 There are currently no standard scopes defined for XMPP. This is something
168 that we intend to change, e.g. by definitions provided in a future XEP. This
169 means that clients you authorize currently have unrestricted access to your
170 account (including the ability to change your password and lock you out!). So,
171 for now, while using OAuth clients can prevent leaking your password to them,
172 it is not currently suitable for connecting untrusted clients to your account.
173
174 ## Compatibility
175
176 Requires Prosody trunk (April 2023), **not** compatible with Prosody 0.12 or
177 earlier.