Skip to content

Commit b2bbd69

Browse files
committed
added a check when generating creds that the specified key is valid for the JWT provided.
1 parent a2c583b commit b2bbd69

File tree

2 files changed

+28
-0
lines changed

2 files changed

+28
-0
lines changed

v2/creds_utils.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,18 @@ func FormatUserConfig(jwtString string, seed []byte) ([]byte, error) {
138138
return nil, fmt.Errorf("nkey seed is not an user seed")
139139
}
140140

141+
kp, err := nkeys.FromSeed(seed)
142+
if err != nil {
143+
return nil, err
144+
}
145+
pk, err := kp.PublicKey()
146+
if err != nil {
147+
return nil, err
148+
}
149+
if pk != gc.Claims().Subject {
150+
return nil, fmt.Errorf("nkey seed does not match the jwt subject")
151+
}
152+
141153
d, err := DecorateSeed(seed)
142154
if err != nil {
143155
return nil, err

v2/creds_utils_test.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -291,6 +291,22 @@ func Test_ParseCreds(t *testing.T) {
291291
}
292292
}
293293

294+
func Test_FormatUserConfigMismatchedNKey(t *testing.T) {
295+
token, _ := makeJWT(t)
296+
297+
// different user nkey that doesn't match the JWT subject
298+
otherKp := createUserNKey(t)
299+
otherSeed := seedKey(otherKp, t)
300+
301+
_, err := FormatUserConfig(token, otherSeed)
302+
if err == nil {
303+
t.Fatal("expected error for mismatched nkey")
304+
}
305+
if !strings.Contains(err.Error(), "does not match") {
306+
t.Fatalf("unexpected error: %v", err)
307+
}
308+
}
309+
294310
func Test_ParseCredsWithCrLfs(t *testing.T) {
295311
token, kp := makeJWT(t)
296312
d, err := FormatUserConfig(token, seedKey(kp, t))

0 commit comments

Comments
 (0)