Skip to content
This repository was archived by the owner on Dec 7, 2020. It is now read-only.

Added opentracing jaeger middleware #643

Open
wants to merge 9 commits into
base: master
Choose a base branch
from

Conversation

sam-burrell
Copy link

@sam-burrell sam-burrell commented Jun 11, 2020

Added opentracing jaeger middleware

Summary

Discussion here: https://groups.google.com/forum/#!topic/louketo/Dach4U_Iza8

Proposal
Introduce a flag to enable opentracing, under this flag:
Write some middleware to add extraction and injection of traces with some basic debug tags
Initialise a jaeger client to report spans

Type

[] Bug fix
[] Feature request
[x] Enhancement
[] Docs

Why?

Keycloak itself uses wildfly. Wildfly introduced support for open tracing https://wildfly.org/news/tags/wildfly/page/2/. There is talk of introducing support to Keycloak
It would be good see the auth flow through opentracing for debugging.
For us, we would like to integrate the gatekeeper into our auth flow for debugging.

Requirements

Configured using the standard jaeger client env variables

How to try it?

Use jaeger-all-in-one https://www.jaegertracing.io/docs/1.18/getting-started/ to test locally.

Documentation

Can write this as needed.

Additional Information

I can't see a clean way the proxy closes so right now this is not cleanly closing the jaeger client. Is cleanly shutting down also something worth thinking about?

Checklist:

Happy to help with anything the further this.

  • My change requires a change to the documentation or CHANGELOG.
  • I have updated the documentation/CHANGELOG accordingly.

@abstractj abstractj requested a review from stianst June 15, 2020 18:47
@abstractj abstractj self-assigned this Jun 15, 2020
@abstractj abstractj added this to the 1.0.x milestone Jun 19, 2020
@asomervell
Copy link

Why does this introduce so many new dependencies? @sam-burrell it's security software, does it need all that?

@abstractj abstractj removed their assignment Aug 26, 2020
dosyara and others added 8 commits January 19, 2021 17:08
Louketo has a bug revolving around this PR: coreos/go-oidc#97
essentially, the JWT verification function first checks the claims of the JWT are valid (including expiry times), then checks the signature of the token is valid.
Louketo checks the response of this and returns a custom error if the token has expired to allow the auth middleware to use a refresh token to regenerate an access token.
Unfortunately, the access token it generates uses the user context for the incoming request. This user context is parsed from the access token JWT but is not verified, meaning it is blindly trusted.
Louketo will then regenerate a correct accessToken from Keycloak, which will be valid and have the correct claim/scopes as generated in Keycloak. I think the issue is that for the rest of the request, it has this new token in the context but still has the leftover rubbish user context parsed from the fake user we injected earlier.
Prevent privilege escalations through invalid JWTs
This results in 401s even for expired tokens
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

7 participants