traefik-forward-auth
traefik-forward-auth copied to clipboard
Option to allow CORS/OPTIONS
Is it possible to add "Access-Control-Allow-Origin" in header on the redirect?
I get Access to fetch at 'https://some-url' from origin 'https://some-other-url' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.
Traefik headers middleware (https://docs.traefik.io/middlewares/headers/) seems not to work together with forward auth.
I think you could work around this by creating a rule:
rule.allow-cors.action = allow
rule.allow-cors.rule = Method(`OPTIONS`)
This will forward the OPTIONS request through to your app, could you test if something like that would work?
If may make sense to add a built in option to allow something like this
That's sounds like it could work for me.
I'll try.
Leaving this open to track the possible enhancement
@thomseddon , could you please help me understand in which file these rules needs to be added?
You can either add a configuration file, which you point to with the --config
parameter or $CONFIG env var (as documented in README)
Alternatively, you can specify rules as parameters like this: https://github.com/thomseddon/traefik-forward-auth/blob/6c6f75e80dcea7e4d5bd3fcdf638a0b016544f19/internal/config_test.go#L51-L54
Same problem here! i think OPTIONS request should not be authenticated. I think, by default should be disabled and enabled if desired.
I currently fixed this as mentioned. Here you have my piece of code for a kubernetes deployment:
apiVersion: apps/v1
kind: Deployment
metadata:
name: traefik-sso
labels:
app: traefik-sso
spec:
replicas: 1
selector:
matchLabels:
app: traefik-sso
template:
metadata:
labels:
name: traefik-sso
app: traefik-sso
spec:
containers:
- name: traefik-sso
image: thomseddon/traefik-forward-auth:2
args:
- "--rule.http-options-requests.action=allow"
- "--rule.http-options-requests.rule=Method(`OPTIONS`)"
Correspondingly, for a Docker {Swarm,Compose} deployment:
forward-auth:
image: "thomseddon/traefik-forward-auth:2"
command:
- "--rule.http-options-requests.action=allow"
- "--rule.http-options-requests.rule=Method(`OPTIONS`)"
We use traefik-forward-auth to put our staging environment behind an access control layer so only employees can access it. In there, we deploy feature branches on subdomains like foo.staging.bar.com
, which still talk to the staging API at staging.bar.com
- so now CORS is involved. When including credentials with the requests, things will mostly work, except for preflight requests - which are sent without credentials per the spec, thus forward-auth won't accept them. Configuring this exception solves the issue.
Maybe it would be good to add a paragraph to the Readme? I spent a while before landing here...