ory / ory/hydra

Wrong KID in headers of ID Token for a Refresh Token

Open
#3,573 9 comments 1 reaction 0 assignees View on GitHub

Nobody has claimed this yet.

bug
Dominant language
Go
Stars
17.6k
Forks
1.6k
PR merge metrics
No merged PRs in 30d

Description

Preflight checklist
Describe the bug

When requesting a refresh token we are seeing a case where the headers of the included id_token state one KID value, but in reality it is signed by a newer KID. This behavior occurs with refresh tokens that existed before we added a new keyset for "hydra.openid.id-token". I have been trying to parse through the source code, but I think the crux of the issues is KID is saved in the session and when a new keyset is added it is unaware. If this was a bug that you fixed in a newer version that would be great to know as well. I acknowledge that this may be user error on our part, but I can't figure out how it could be.

Reproducing the bug

For us the steps to reproduce are:

  1. Go through an authcode flow and log in process that gives back an refresh token and id token
  2. Add a new keyset for “hydra.openid.id-token”
  3. Use the refresh token to get a new access token and id token
  4. Inspect the id token and validate that the KID and signature do not work together
Relevant log output

No response

Relevant configuration

No response

Version

1.11.8

On which operating system are you observing this issue?

Linux

In which environment are you deploying?

Docker

Additional Context

No response

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by tracing the refresh-token flow that creates the returned ID token, focusing on how the session's KID and the hydra.openid.id-token keyset are selected. Reproduce the authcode, keyset rotation, and refresh-token steps described in the issue, then verify that the ID token header KID corresponds to the key used for its signature.

Written by the indexing model from the issue text.

Assessment

Tech stack
go
Domain
authentication, security
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.