freeo opened a new issue, #11389:
URL: https://github.com/apache/apisix/issues/11389
### Current Behavior
Ory Hydra (auth server) reports this error:
**X-Forwarded-Proto header is missing**
And apisix reports this:
2024/07/04 10:33:42 [error] 50#50: *428 [lua] openid-connect.lua:503:
phase_func(): OIDC introspection failed: [...]
body={"error":"error","error_description":"The error is unrecognizable"}
This must be some kind of regression, because this official video uses Ory
Hydra with Apisix and I basically copied the ApisixRoute manifest from this
video:
https://www.youtube.com/watch?v=SqzS_CULxHQ&t=1203s
I tried this with Apisix 3.9.1 plugin openid-connect and pulling this plugin
from master because I saw this new object `introspection_addon_headers` which I
hoped might help me inject the X-Forwarded-Proto header. I still can't rule out
if I'm doing anything wrong (wrong usage of Apisix), but one thing is for sure:
This headers value is http and therefore Ory Hydra refuses to work with it at
all. 2 years ago this worked just fine. I tried all kinds of configs to run
Hydra in HTTP mode but to no avail.
I validated this as the core issue, because when I installed the plugin from
master as custom plugin and hardcoded this:
``` openid-connect.lua
525: core.request.set_header(ctx, "X-Forwarded-Proto", "https")
```
then Ory Hydra worked just fine with the config below.
Of course this hackery isn't secure, so I need a proper solution for the
openid-connect plugin.
Am I missing something here, or is this a regression in the plugin? Or a
result of security hardening? How should I actually get this header into the
introspection call? Considering I configured `introspection_endpoint:
http://...`, is it correct that `X-Forwarded-Proto: http` and not `https`? Must
I setup Ory Hydra with with own TLS? My assumption is that Apisix TLS
termination should be enough security-wise.
Some background:
Running k3s in local VM with a self signed cert. TLS termination at Apisix
works just fine.
### Expected Behavior
2024/07/04 18:37:28 [debug] 50#50: *261 [lua] openid-connect-wip.lua:425:
introspect(): token validate successfully by introspection
### Error Logs
Ory Hydra full output:
Could not serve http connection audience=application
error=map[message:X-Forwarded-Proto header is missing]
p content-length:666 content-type:application/json
user-agent:OpenAPI-Generator/1.0.0/go
x-forwarded-for:10.42.0.1
x-forwarded-host:hydra.admin
x-forwarded-port:9080
x-forwarded-proto:http
x-real-ip:10.42.0.1
host:hydra.admin
method:POST
path:/admin/clients query:<nil>
remote:10.42.0.160:58634
scheme:http
service_name=ORY Hydra
service_version=v1.10.7
### Steps to Reproduce
1. Install Ory Hydra
``` hydra-values.yaml for helm chart
image:
tag: latest-sqlite
hydra:
config:
dev: true
dsn: memory
ttl:
access_token: 8h
urls:
self:
issuer: https://hydra-public.default.svc.cluster.local/
login: http://wrong-on-purpose/login
consent: http://wrong-on-purpose/conset
secrets:
system:
- QTZvT09fuUYFSDUf0sudf09FmhvSFRWFY=
log:
level: debug
```
2. Configure ApisixRoute with openid-connect to secure any endpoint:
```
apiVersion: apisix.apache.org/v2
kind: ApisixRoute
metadata:
name: myapp
namespace: default
spec:
http:
- name: myapp-route
match:
hosts:
- myapp.cluster.local
paths:
- /*
backends:
- serviceName: myapp
servicePort: 8080
plugins:
- name: openid-connect
enable: true
config:
client_id: 989b6457-f5a7-422f-9f4d-7ab7b0d0f28a
client_secret: JnyoxL0Qs9LKSsV09aDi5KRT.q
discovery:
http://hydra-public.default.svc.cluster.local:4444/.well-known/openid-configuration
introspection_endpoint:
http://hydra-admin.default.svc.cluster.local:4445/oauth2/introspect
scope: openid
bearer_only: true
realm: master
introspection_endpoint_auth_method: client_secret_post
introspection_addon_headers:
- X-Forwarded-Proto
redirect_uri: https://httpbin.org/get
```
3. Try to request with curl, no need for a correct token, it doesn't get
that far. Hydra refuses to work with the request because of the missing
"X-Forwarded-Proto: https" Header.
### Environment
Running on k3s with Apisix Helm Chart 2.8.0, so Apisix 3.9.1
- APISIX version (run `apisix version`):
/usr/local/openresty//luajit/bin/luajit ./apisix/cli/apisix.lua version
3.9.1
- Operating system (run `uname -a`): Linux apisix-7d7f7b97cd-8888p
5.15.0-91-generic #101-Ubuntu SMP Tue Nov 14 13:30:08 UTC 2023 x86_64 GNU/Linux
- OpenResty / Nginx version (run `openresty -V` or `nginx -V`): nginx
version: openresty/1.25.3.1
built by gcc 10.2.1 20210110 (Debian 10.2.1-6)
built with OpenSSL 3.2.0 23 Nov 2023
- etcd version, if relevant (run `curl
http://127.0.0.1:9090/v1/server_info`):
- APISIX Dashboard version, if relevant:
- Plugin runner version, for issues related to plugin runners:
- LuaRocks version, for installation issues (run `luarocks --version`):
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]