b01e4c3241
Authentik advertises the token endpoint with a trailing slash, but some OIDC clients (the ArgoCD iOS app) POST to /application/o/token without one; Django's APPEND_SLASH will not redirect a POST, so the token exchange gets 405 and login fails. - Add an exact-match rule on /application/o/token to the authentik and authentik-internal HTTPRoutes. - Rewrite it to /application/o/token/ with a URLRewrite ReplaceFullPath filter, preserving the method and the authentik-server backend. - Leave the catch-all PathPrefix rule untouched; exact matches outrank it in Gateway API precedence. Reviewed-on: #478 Co-authored-by: unkin-agent <unkin-agent@unkin.net> Co-committed-by: unkin-agent <unkin-agent@unkin.net>
131 lines
2.8 KiB
YAML
131 lines
2.8 KiB
YAML
---
|
|
apiVersion: gateway.networking.k8s.io/v1
|
|
kind: HTTPRoute
|
|
metadata:
|
|
name: authentik-http-redirect
|
|
namespace: authentik
|
|
spec:
|
|
hostnames:
|
|
- identity.unkin.net
|
|
parentRefs:
|
|
- group: gateway.networking.k8s.io
|
|
kind: Gateway
|
|
name: authentik
|
|
sectionName: http
|
|
rules:
|
|
- filters:
|
|
- type: RequestRedirect
|
|
requestRedirect:
|
|
scheme: https
|
|
statusCode: 301
|
|
matches:
|
|
- path:
|
|
type: PathPrefix
|
|
value: /
|
|
---
|
|
apiVersion: gateway.networking.k8s.io/v1
|
|
kind: HTTPRoute
|
|
metadata:
|
|
name: authentik
|
|
namespace: authentik
|
|
spec:
|
|
hostnames:
|
|
- identity.unkin.net
|
|
parentRefs:
|
|
- group: gateway.networking.k8s.io
|
|
kind: Gateway
|
|
name: authentik
|
|
sectionName: https
|
|
rules:
|
|
- backendRefs:
|
|
- group: ""
|
|
kind: Service
|
|
name: authentik-server
|
|
port: 80
|
|
weight: 1
|
|
filters:
|
|
- type: URLRewrite
|
|
urlRewrite:
|
|
path:
|
|
type: ReplaceFullPath
|
|
replaceFullPath: /application/o/token/
|
|
matches:
|
|
- path:
|
|
type: Exact
|
|
value: /application/o/token
|
|
- backendRefs:
|
|
- group: ""
|
|
kind: Service
|
|
name: authentik-server
|
|
port: 80
|
|
weight: 1
|
|
matches:
|
|
- path:
|
|
type: PathPrefix
|
|
value: /
|
|
---
|
|
apiVersion: gateway.networking.k8s.io/v1
|
|
kind: HTTPRoute
|
|
metadata:
|
|
name: authentik-http-redirect-internal
|
|
namespace: authentik
|
|
spec:
|
|
hostnames:
|
|
- identity.k8s.syd1.au.unkin.net
|
|
parentRefs:
|
|
- group: gateway.networking.k8s.io
|
|
kind: Gateway
|
|
name: authentik-internal
|
|
sectionName: http
|
|
rules:
|
|
- filters:
|
|
- type: RequestRedirect
|
|
requestRedirect:
|
|
scheme: https
|
|
statusCode: 301
|
|
matches:
|
|
- path:
|
|
type: PathPrefix
|
|
value: /
|
|
---
|
|
apiVersion: gateway.networking.k8s.io/v1
|
|
kind: HTTPRoute
|
|
metadata:
|
|
name: authentik-internal
|
|
namespace: authentik
|
|
spec:
|
|
hostnames:
|
|
- identity.k8s.syd1.au.unkin.net
|
|
parentRefs:
|
|
- group: gateway.networking.k8s.io
|
|
kind: Gateway
|
|
name: authentik-internal
|
|
sectionName: https
|
|
rules:
|
|
- backendRefs:
|
|
- group: ""
|
|
kind: Service
|
|
name: authentik-server
|
|
port: 80
|
|
weight: 1
|
|
filters:
|
|
- type: URLRewrite
|
|
urlRewrite:
|
|
path:
|
|
type: ReplaceFullPath
|
|
replaceFullPath: /application/o/token/
|
|
matches:
|
|
- path:
|
|
type: Exact
|
|
value: /application/o/token
|
|
- backendRefs:
|
|
- group: ""
|
|
kind: Service
|
|
name: authentik-server
|
|
port: 80
|
|
weight: 1
|
|
matches:
|
|
- path:
|
|
type: PathPrefix
|
|
value: /
|