Skip to content

Commit 5ed5f67

Browse files
committed
fix: add kid to verifiable credential header
1 parent c004fee commit 5ed5f67

File tree

2 files changed

+21
-2
lines changed

2 files changed

+21
-2
lines changed

oauth2/handler.go

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1340,8 +1340,14 @@ func (h *Handler) createVerifiableCredential(w http.ResponseWriter, r *http.Requ
13401340
"id": fmt.Sprintf("did:jwk:%s", base64.RawURLEncoding.EncodeToString(proofJWKJSON)),
13411341
},
13421342
})
1343-
1344-
rawToken, _, err := h.r.OpenIDJWTStrategy().Generate(ctx, session.Claims.ToMapClaims(), jwt.NewHeaders())
1343+
signingKeyID, err := h.r.OpenIDJWTStrategy().GetPublicKeyID(ctx)
1344+
if err != nil {
1345+
h.r.Writer().WriteError(w, r, errorsx.WithStack(err))
1346+
return
1347+
}
1348+
headers := jwt.NewHeaders()
1349+
headers.Add("kid", signingKeyID)
1350+
rawToken, _, err := h.r.OpenIDJWTStrategy().Generate(ctx, session.Claims.ToMapClaims(), headers)
13451351
if err != nil {
13461352
h.r.Writer().WriteError(w, r, errorsx.WithStack(err))
13471353
return

oauth2/oauth2_auth_code_test.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"context"
99
"encoding/base64"
1010
"encoding/json"
11+
"errors"
1112
"fmt"
1213
"io"
1314
"net/http"
@@ -1164,6 +1165,18 @@ func assertCreateVerifiableCredential(t *testing.T, reg driver.Registry, nonce s
11641165
func assertVerifiableCredentialContainsPublicKey(t *testing.T, reg driver.Registry, vc *hydraoauth2.VerifiableCredentialResponse, pubKeyJWK *jose.JSONWebKey) {
11651166
ctx := context.Background()
11661167
token, err := jwt.Parse(vc.Credential, func(token *jwt.Token) (interface{}, error) {
1168+
kid, found := token.Header["kid"]
1169+
if !found {
1170+
return nil, errors.New("missing kid header")
1171+
}
1172+
openIDKey, err := reg.OpenIDJWTStrategy().GetPublicKeyID(ctx)
1173+
if err != nil {
1174+
return nil, err
1175+
}
1176+
if kid != openIDKey {
1177+
return nil, errors.New("invalid kid header")
1178+
}
1179+
11671180
return x.Must(reg.OpenIDJWTStrategy().GetPublicKey(ctx)).Key, nil
11681181
})
11691182
require.NoError(t, err)

0 commit comments

Comments
 (0)