Commit Graph

73 Commits

Author SHA1 Message Date
Ralf Haferkamp
8ee8842e88 proxy: Avoid sorting endpoints for every single request
The endpoints are no longer hashed by path name in the directors map since
that made iterating over the endpoints unstable. They are now stored in a
slice in the order in which the are defined in the configuration.

Closes: #4497
2022-09-07 14:30:19 +02:00
Ralf Haferkamp
2c6eb888a8 proxy: Clarify comment 2022-09-07 14:30:19 +02:00
Ralf Haferkamp
ab0c82311a proxy: Fix archiver for public links
Allows /archiver to be used the "public-token" auth middleware. The
archiver is a bit of a special case, because it can be uses in several
ways: using 'normal' authentication (basic, oidc), using signed-urls or
using sharetokens. As only the "sharetoken" part is handled by the
"PublicShareAuth" middleware, we needed to special-case it a bit.
2022-09-07 14:30:19 +02:00
Ralf Haferkamp
30f4d788f3 proxy: Initialize logger for router 2022-09-07 14:30:19 +02:00
Ralf Haferkamp
fed62d4a1e Evaluate routing rules ordered by path-length
This is a quickfix for #4497. Before evaluating, we now sort the rules
of a specific type by the length of the endpoints and start evaluation
with the most specific endpoint first. There's obviously quite a bit
room for optimization here and this will only fix the issue for routes
of type `PrefixRoute`. But it should solve the immediate issue.
2022-09-01 17:07:17 +02:00
David Christofas
bfb26cc660 update tests 2022-09-01 12:43:32 +02:00
David Christofas
e20b2b1536 fix default policy and add changelog 2022-09-01 12:43:32 +02:00
David Christofas
69de4616b5 fix linting issues 2022-09-01 12:43:32 +02:00
David Christofas
90574268d9 add missing unprotected flag and fix proxy test 2022-09-01 12:43:32 +02:00
David Christofas
69ba80562e add unprotected flag to the proxy routes
I added an unprotected flag to the proxy routes which is evaluated by
the authentication middleware. This way we won't have to maintain a
hardcoded list of unprotected paths and path prefixes and we will
hopefully reduce the times we encounter the basic auth prompt by web
browsers.
2022-09-01 12:43:32 +02:00
David Christofas
4d4f3a16e1 refactor proxy code
I refactored the proxy so that we execute the routing before the
authentication middleware. This is necessary so that we can determine
which routes are considered unprotected i.e. which routes don't need
authentication.
2022-09-01 12:43:32 +02:00
Benedikt Kulmann
6fc87613d5 fix: add index.html to unprotected paths 2022-08-26 10:37:46 +02:00
Benedikt Kulmann
9d67ab3292 fix: set /external path prefix to unprotected 2022-08-25 10:47:46 +02:00
Benedikt Kulmann
9c9a81026c fix: add index.html to unprotected paths in auth middleware 2022-08-25 10:39:55 +02:00
David Christofas
0d2b7e350b add missing unprotected paths 2022-08-24 16:32:25 +02:00
David Christofas
e65eb15f2c add the settings path to the unprotected paths 2022-08-24 11:04:18 +02:00
David Christofas
28a9bf357e end unprotected path prefixes with a slash 2022-08-24 10:12:34 +05:45
David Christofas
6043e019f4 add the fonts path to the unprotected path prefixes 2022-08-24 10:12:34 +05:45
David Christofas
c4881f5736 Merge pull request #4374 from owncloud/rewrite-auth-middleware
[full-ci] Rewrite of the authentication middleware
2022-08-22 16:39:03 +02:00
David Christofas
dfe703291f replace strings.Title with cases.Title 2022-08-22 15:26:00 +02:00
David Christofas
12d42e0074 add missing comments 2022-08-22 14:24:12 +02:00
Willy Kloucek
9f2be9f4f9 remove Log prefix from configlog functions 2022-08-22 08:08:18 +02:00
Willy Kloucek
e58eaabdeb move config parse error logging into function to ensure new lines and don't parse config for help 2022-08-18 15:27:28 +02:00
Willy Kloucek
60689c9c1a improve unsupervised description 2022-08-18 10:59:35 +02:00
Willy Kloucek
6154466bbc rename extensions to services (leftover occurences) 2022-08-17 15:36:52 +02:00
David Christofas
b5ef10dc2b add missing comments and changelog 2022-08-16 16:53:27 +02:00
David Christofas
3f25ca2059 add unprotected path prefix for parallel deployment 2022-08-16 15:45:22 +02:00
David Christofas
905ead629c add unprotected path prefix for external apps 2022-08-16 15:16:48 +02:00
David Christofas
78d85b683d add missing comments 2022-08-16 12:47:44 +02:00
David Christofas
864438b2de add missing unprotected path 2022-08-15 16:04:14 +02:00
David Christofas
3ebfcbff1e add missing unprotected path 2022-08-15 11:38:04 +02:00
David Christofas
5d45f0e856 fix logic of when to add the www-authenticate headers 2022-08-12 10:48:37 +02:00
David Christofas
036c466425 add missing unprotected paths 2022-08-12 10:48:33 +02:00
David Christofas
32f68f91ff add missing www-authentication header on failed authentication 2022-08-12 10:48:29 +02:00
David Christofas
d271ae2451 fix some authentication cases 2022-08-12 10:48:25 +02:00
David Christofas
06ffd9cf8a some more cleaning up 2022-08-12 10:48:21 +02:00
David Christofas
9347657370 remove the oidc tests since they aren't testing anything at the moment
I admit it would be better to implement the tests but I tried and it is a bit tricky since we can't mock everything we would need to mock. I'll wan to get these changes in first and later in the near future we should revisit the auth middleware architecture and refactor it a bit more to be more testable and future proof.
2022-08-12 10:48:17 +02:00
David Christofas
17a4e65f08 add tests for the public share auth middleware 2022-08-12 10:48:13 +02:00
David Christofas
7bc1305cb4 add tests for the basic auth middleware 2022-08-12 10:48:09 +02:00
David Christofas
ef020920e8 update authentication tests 2022-08-12 10:48:04 +02:00
David Christofas
ddfc01bff9 refactor unprotected paths check 2022-08-12 10:47:51 +02:00
David Christofas
f35c8b9205 clean up the authenticators middlewares 2022-08-12 10:47:48 +02:00
David Christofas
e96819bce8 rewrite the auth middleware
The old approach of the authentication middlewares had the problem that when an authenticator could not authenticate a request it would still send it to the next handler, in case that the next one can authenticate it. But if no authenticator could successfully authenticate the request, it would still be handled, which leads to unauthorized access.
2022-08-12 10:47:43 +02:00
Willy Kloucek
94646c8060 add middleware to rewrite the /.well-known/openid-configuration endpoint for external idps 2022-08-05 14:12:01 +02:00
Willy Kloucek
58ccdaca08 improve PROXY_USER_CS3_CLAIM description 2022-08-05 10:47:51 +02:00
Ralf Haferkamp
6e848c7254 Use mutex for lazy init function
To avoid possible threading issues
2022-08-03 12:00:31 +02:00
Ralf Haferkamp
74d9d0f3e0 Apply suggestions from code review
Co-authored-by: Martin <github@diemattels.at>
2022-08-03 12:00:31 +02:00
Ralf Haferkamp
8229567213 Allow to configure the JWKS refresh settings
This exposes a couple for knobs for the jwks keyfunc module to adjust
timeout and refresh intervals.
2022-08-03 12:00:31 +02:00
Ralf Haferkamp
eb94530433 Add option to configure access token verification
Allow to switch jwt access token verification and off. Many (most?) IDP
provide JWT encoded access tokens. If ocis is configure to assume jwt
access tokens (access_token_verify_method==jwt) we now properly verify
the tokens signature and a set of standard claims ("exp", "iat" and nbf"
by way of the jwt module's standard verification and "iss" explicitliy).

This change also allows for introduction of other access token verification
mechanism in the future (e.g. through introspection (RFC7662).
2022-08-03 12:00:31 +02:00
Ralf Haferkamp
454cea8a1c Try to verify access_token as JWT and extract expiry
We try to parse the access token as a JWT now. Verifying the signature
using the keys downloaded from the jwks_uri of the IDP. Currently we
only use it to extract the expiry information from the JWT. This could
be reworked to extract other claims from the token for authorization
purposes.

Fixes: #3841
2022-08-03 12:00:31 +02:00