You've already forked oauth2-proxy
mirror of
https://github.com/oauth2-proxy/oauth2-proxy.git
synced 2025-06-29 01:01:36 +02:00
Support Traefik ForwardAuth without a 401 handler (#1023)
* GH-1015 Adds support for Traefik to OauthStart on '/oauth2/auth' endpoint * Fix incorrect reference to signout path and point to signin path - remove commented out alternative solutions and debug log statements * Remove skip provider button check as SignIn method already does this * Updated traefik example to match existing file configuration reference, updated tests * Update doc and refactor nested conditional statements * Revert code changes as static upstream provides the same functionality - Add doc on using static upstream with Traefik ForwardAuth middleware * update changelog * Move the doc changes to 7.0.x versioned docs * Re-add traefik docs update in the main docs overview.md * add missing oauth2-proxy routing Co-authored-by: Praveen Chinthala <PraveenChinthala@hollandandbarrett.com>
This commit is contained in:
committed by
GitHub
parent
845235185d
commit
76269a13b7
@ -13,6 +13,7 @@
|
|||||||
- [#1028](https://github.com/oauth2-proxy/oauth2-proxy/pull/1028) Refactor templates, update theme and provide styled error pages (@JoelSpeed)
|
- [#1028](https://github.com/oauth2-proxy/oauth2-proxy/pull/1028) Refactor templates, update theme and provide styled error pages (@JoelSpeed)
|
||||||
- [#1039](https://github.com/oauth2-proxy/oauth2-proxy/pull/1039) Ensure errors in tests are logged to the GinkgoWriter (@JoelSpeed)
|
- [#1039](https://github.com/oauth2-proxy/oauth2-proxy/pull/1039) Ensure errors in tests are logged to the GinkgoWriter (@JoelSpeed)
|
||||||
- [#980](https://github.com/oauth2-proxy/oauth2-proxy/pull/980) Add Prometheus metrics endpoint
|
- [#980](https://github.com/oauth2-proxy/oauth2-proxy/pull/980) Add Prometheus metrics endpoint
|
||||||
|
- [#1023](https://github.com/oauth2-proxy/oauth2-proxy/pull/1023) Update docs on Traefik ForwardAuth support without the use of Traefik 'errors' middleware
|
||||||
|
|
||||||
# V7.0.1
|
# V7.0.1
|
||||||
|
|
||||||
|
@ -362,6 +362,8 @@ You have to substitute *name* with the actual cookie name you configured via --c
|
|||||||
|
|
||||||
**This option requires `--reverse-proxy` option to be set.**
|
**This option requires `--reverse-proxy` option to be set.**
|
||||||
|
|
||||||
|
### ForwardAuth with 401 errors middleware
|
||||||
|
|
||||||
The [Traefik v2 `ForwardAuth` middleware](https://doc.traefik.io/traefik/middlewares/forwardauth/) allows Traefik to authenticate requests via the oauth2-proxy's `/oauth2/auth` endpoint on every request, which only returns a 202 Accepted response or a 401 Unauthorized response without proxying the whole request through. For example, on Dynamic File (YAML) Configuration:
|
The [Traefik v2 `ForwardAuth` middleware](https://doc.traefik.io/traefik/middlewares/forwardauth/) allows Traefik to authenticate requests via the oauth2-proxy's `/oauth2/auth` endpoint on every request, which only returns a 202 Accepted response or a 401 Unauthorized response without proxying the whole request through. For example, on Dynamic File (YAML) Configuration:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
@ -425,6 +427,104 @@ http:
|
|||||||
query: "/oauth2/sign_in"
|
query: "/oauth2/sign_in"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### ForwardAuth with static upstreams configuration
|
||||||
|
|
||||||
|
Redirect to sign_in functionality provided without the use of `errors` middleware with [Traefik v2 `ForwardAuth` middleware](https://doc.traefik.io/traefik/middlewares/forwardauth/) pointing to oauth2-proxy service's `/` endpoint
|
||||||
|
|
||||||
|
**Following options need to be set on `oauth2-proxy`:**
|
||||||
|
- `--upstream=static://202`: Configures a static response for authenticated sessions
|
||||||
|
- `--reverseproxy=true`: Enables the use of `X-Forwarded-*` headers to determine redirects correctly
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
http:
|
||||||
|
routers:
|
||||||
|
a-service-route-1:
|
||||||
|
rule: "Host(`a-service.example.com`, `b-service.example.com`) && PathPrefix(`/`)"
|
||||||
|
service: a-service-backend
|
||||||
|
middlewares:
|
||||||
|
- oauth-auth-redirect # redirects all unauthenticated to oauth2 signin
|
||||||
|
tls:
|
||||||
|
certResolver: default
|
||||||
|
domains:
|
||||||
|
- main: "example.com"
|
||||||
|
sans:
|
||||||
|
- "*.example.com"
|
||||||
|
a-service-route-2:
|
||||||
|
rule: "Host(`a-service.example.com`) && PathPrefix(`/no-auto-redirect`)"
|
||||||
|
service: a-service-backend
|
||||||
|
middlewares:
|
||||||
|
- oauth-auth-wo-redirect # unauthenticated session will return a 401
|
||||||
|
tls:
|
||||||
|
certResolver: default
|
||||||
|
domains:
|
||||||
|
- main: "example.com"
|
||||||
|
sans:
|
||||||
|
- "*.example.com"
|
||||||
|
services-oauth2-route:
|
||||||
|
rule: "Host(`a-service.example.com`, `b-service.example.com`) && PathPrefix(`/oauth2/`)"
|
||||||
|
middlewares:
|
||||||
|
- auth-headers
|
||||||
|
service: oauth-backend
|
||||||
|
tls:
|
||||||
|
certResolver: default
|
||||||
|
domains:
|
||||||
|
- main: "example.com"
|
||||||
|
sans:
|
||||||
|
- "*.example.com"
|
||||||
|
oauth2-proxy-route:
|
||||||
|
rule: "Host(`oauth.example.com`) && PathPrefix(`/`)"
|
||||||
|
middlewares:
|
||||||
|
- auth-headers
|
||||||
|
service: oauth-backend
|
||||||
|
tls:
|
||||||
|
certResolver: default
|
||||||
|
domains:
|
||||||
|
- main: "example.com"
|
||||||
|
sans:
|
||||||
|
- "*.example.com"
|
||||||
|
|
||||||
|
services:
|
||||||
|
a-service-backend:
|
||||||
|
loadBalancer:
|
||||||
|
servers:
|
||||||
|
- url: http://172.16.0.2:7555
|
||||||
|
b-service-backend:
|
||||||
|
loadBalancer:
|
||||||
|
servers:
|
||||||
|
- url: http://172.16.0.3:7555
|
||||||
|
oauth-backend:
|
||||||
|
loadBalancer:
|
||||||
|
servers:
|
||||||
|
- url: http://172.16.0.1:4180
|
||||||
|
|
||||||
|
middlewares:
|
||||||
|
auth-headers:
|
||||||
|
headers:
|
||||||
|
sslRedirect: true
|
||||||
|
stsSeconds: 315360000
|
||||||
|
browserXssFilter: true
|
||||||
|
contentTypeNosniff: true
|
||||||
|
forceSTSHeader: true
|
||||||
|
sslHost: example.com
|
||||||
|
stsIncludeSubdomains: true
|
||||||
|
stsPreload: true
|
||||||
|
frameDeny: true
|
||||||
|
oauth-auth-redirect:
|
||||||
|
forwardAuth:
|
||||||
|
address: https://oauth.example.com/
|
||||||
|
trustForwardHeader: true
|
||||||
|
authResponseHeaders:
|
||||||
|
- X-Auth-Request-Access-Token
|
||||||
|
- Authorization
|
||||||
|
oauth-auth-wo-redirect:
|
||||||
|
forwardAuth:
|
||||||
|
address: https://oauth.example.com/oauth2/auth
|
||||||
|
trustForwardHeader: true
|
||||||
|
authResponseHeaders:
|
||||||
|
- X-Auth-Request-Access-Token
|
||||||
|
- Authorization
|
||||||
|
```
|
||||||
|
|
||||||
:::note
|
:::note
|
||||||
If you set up your OAuth2 provider to rotate your client secret, you can use the `client-secret-file` option to reload the secret when it is updated.
|
If you set up your OAuth2 provider to rotate your client secret, you can use the `client-secret-file` option to reload the secret when it is updated.
|
||||||
:::
|
:::
|
||||||
|
@ -360,6 +360,8 @@ You have to substitute *name* with the actual cookie name you configured via --c
|
|||||||
|
|
||||||
**This option requires `--reverse-proxy` option to be set.**
|
**This option requires `--reverse-proxy` option to be set.**
|
||||||
|
|
||||||
|
### ForwardAuth with 401 errors middleware
|
||||||
|
|
||||||
The [Traefik v2 `ForwardAuth` middleware](https://doc.traefik.io/traefik/middlewares/forwardauth/) allows Traefik to authenticate requests via the oauth2-proxy's `/oauth2/auth` endpoint on every request, which only returns a 202 Accepted response or a 401 Unauthorized response without proxying the whole request through. For example, on Dynamic File (YAML) Configuration:
|
The [Traefik v2 `ForwardAuth` middleware](https://doc.traefik.io/traefik/middlewares/forwardauth/) allows Traefik to authenticate requests via the oauth2-proxy's `/oauth2/auth` endpoint on every request, which only returns a 202 Accepted response or a 401 Unauthorized response without proxying the whole request through. For example, on Dynamic File (YAML) Configuration:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
@ -423,6 +425,104 @@ http:
|
|||||||
query: "/oauth2/sign_in"
|
query: "/oauth2/sign_in"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### ForwardAuth with static upstreams configuration
|
||||||
|
|
||||||
|
Redirect to sign_in functionality provided without the use of `errors` middleware with [Traefik v2 `ForwardAuth` middleware](https://doc.traefik.io/traefik/middlewares/forwardauth/) pointing to oauth2-proxy service's `/` endpoint
|
||||||
|
|
||||||
|
**Following options need to be set on `oauth2-proxy`:**
|
||||||
|
- `--upstream=static://202`: Configures a static response for authenticated sessions
|
||||||
|
- `--reverseproxy=true`: Enables the use of `X-Forwarded-*` headers to determine redirects correctly
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
http:
|
||||||
|
routers:
|
||||||
|
a-service-route-1:
|
||||||
|
rule: "Host(`a-service.example.com`, `b-service.example.com`) && PathPrefix(`/`)"
|
||||||
|
service: a-service-backend
|
||||||
|
middlewares:
|
||||||
|
- oauth-auth-redirect # redirects all unauthenticated to oauth2 signin
|
||||||
|
tls:
|
||||||
|
certResolver: default
|
||||||
|
domains:
|
||||||
|
- main: "example.com"
|
||||||
|
sans:
|
||||||
|
- "*.example.com"
|
||||||
|
a-service-route-2:
|
||||||
|
rule: "Host(`a-service.example.com`) && PathPrefix(`/no-auto-redirect`)"
|
||||||
|
service: a-service-backend
|
||||||
|
middlewares:
|
||||||
|
- oauth-auth-wo-redirect # unauthenticated session will return a 401
|
||||||
|
tls:
|
||||||
|
certResolver: default
|
||||||
|
domains:
|
||||||
|
- main: "example.com"
|
||||||
|
sans:
|
||||||
|
- "*.example.com"
|
||||||
|
services-oauth2-route:
|
||||||
|
rule: "Host(`a-service.example.com`, `b-service.example.com`) && PathPrefix(`/oauth2/`)"
|
||||||
|
middlewares:
|
||||||
|
- auth-headers
|
||||||
|
service: oauth-backend
|
||||||
|
tls:
|
||||||
|
certResolver: default
|
||||||
|
domains:
|
||||||
|
- main: "example.com"
|
||||||
|
sans:
|
||||||
|
- "*.example.com"
|
||||||
|
oauth2-proxy-route:
|
||||||
|
rule: "Host(`oauth.example.com`) && PathPrefix(`/`)"
|
||||||
|
middlewares:
|
||||||
|
- auth-headers
|
||||||
|
service: oauth-backend
|
||||||
|
tls:
|
||||||
|
certResolver: default
|
||||||
|
domains:
|
||||||
|
- main: "example.com"
|
||||||
|
sans:
|
||||||
|
- "*.example.com"
|
||||||
|
|
||||||
|
services:
|
||||||
|
a-service-backend:
|
||||||
|
loadBalancer:
|
||||||
|
servers:
|
||||||
|
- url: http://172.16.0.2:7555
|
||||||
|
b-service-backend:
|
||||||
|
loadBalancer:
|
||||||
|
servers:
|
||||||
|
- url: http://172.16.0.3:7555
|
||||||
|
oauth-backend:
|
||||||
|
loadBalancer:
|
||||||
|
servers:
|
||||||
|
- url: http://172.16.0.1:4180
|
||||||
|
|
||||||
|
middlewares:
|
||||||
|
auth-headers:
|
||||||
|
headers:
|
||||||
|
sslRedirect: true
|
||||||
|
stsSeconds: 315360000
|
||||||
|
browserXssFilter: true
|
||||||
|
contentTypeNosniff: true
|
||||||
|
forceSTSHeader: true
|
||||||
|
sslHost: example.com
|
||||||
|
stsIncludeSubdomains: true
|
||||||
|
stsPreload: true
|
||||||
|
frameDeny: true
|
||||||
|
oauth-auth-redirect:
|
||||||
|
forwardAuth:
|
||||||
|
address: https://oauth.example.com/
|
||||||
|
trustForwardHeader: true
|
||||||
|
authResponseHeaders:
|
||||||
|
- X-Auth-Request-Access-Token
|
||||||
|
- Authorization
|
||||||
|
oauth-auth-wo-redirect:
|
||||||
|
forwardAuth:
|
||||||
|
address: https://oauth.example.com/oauth2/auth
|
||||||
|
trustForwardHeader: true
|
||||||
|
authResponseHeaders:
|
||||||
|
- X-Auth-Request-Access-Token
|
||||||
|
- Authorization
|
||||||
|
```
|
||||||
|
|
||||||
:::note
|
:::note
|
||||||
If you set up your OAuth2 provider to rotate your client secret, you can use the `client-secret-file` option to reload the secret when it is updated.
|
If you set up your OAuth2 provider to rotate your client secret, you can use the `client-secret-file` option to reload the secret when it is updated.
|
||||||
:::
|
:::
|
||||||
|
Reference in New Issue
Block a user