Skip to content

Commit

Permalink
fix: do not include nonce in ID tokens when not used (#570)
Browse files Browse the repository at this point in the history
Co-authored-by: hackerman <3372410+aeneasr@users.noreply.github.com>
  • Loading branch information
mitar and aeneasr committed May 14, 2021
1 parent 0366cfd commit 795dee2
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 21 deletions.
2 changes: 1 addition & 1 deletion token/jwt/claims_id_token.go
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ func (c *IDTokenClaims) ToMap() map[string]interface{} {
ret["aud"] = []string{}
}

if len(c.Nonce) >= 0 {
if len(c.Nonce) > 0 {
ret["nonce"] = c.Nonce
}

Expand Down
57 changes: 37 additions & 20 deletions token/jwt/claims_id_token_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,25 +30,6 @@ import (
. "github.com/ory/fosite/token/jwt"
)

var idTokenClaims = &IDTokenClaims{
JTI: "foo-id",
Subject: "peter",
IssuedAt: time.Now().UTC().Round(time.Second),
Issuer: "fosite",
Audience: []string{"tests"},
ExpiresAt: time.Now().UTC().Add(time.Hour).Round(time.Second),
AuthTime: time.Now().UTC(),
RequestedAt: time.Now().UTC(),
AccessTokenHash: "foobar",
CodeHash: "barfoo",
AuthenticationContextClassReference: "acr",
AuthenticationMethodsReference: "amr",
Extra: map[string]interface{}{
"foo": "bar",
"baz": "bar",
},
}

func TestIDTokenAssert(t *testing.T) {
assert.NoError(t, (&IDTokenClaims{ExpiresAt: time.Now().UTC().Add(time.Hour)}).
ToMapClaims().Valid())
Expand All @@ -59,14 +40,31 @@ func TestIDTokenAssert(t *testing.T) {
}

func TestIDTokenClaimsToMap(t *testing.T) {
idTokenClaims := &IDTokenClaims{
JTI: "foo-id",
Subject: "peter",
IssuedAt: time.Now().UTC().Round(time.Second),
Issuer: "fosite",
Audience: []string{"tests"},
ExpiresAt: time.Now().UTC().Add(time.Hour).Round(time.Second),
AuthTime: time.Now().UTC(),
RequestedAt: time.Now().UTC(),
AccessTokenHash: "foobar",
CodeHash: "barfoo",
AuthenticationContextClassReference: "acr",
AuthenticationMethodsReference: "amr",
Extra: map[string]interface{}{
"foo": "bar",
"baz": "bar",
},
}
assert.Equal(t, map[string]interface{}{
"jti": idTokenClaims.JTI,
"sub": idTokenClaims.Subject,
"iat": float64(idTokenClaims.IssuedAt.Unix()),
"rat": float64(idTokenClaims.RequestedAt.Unix()),
"iss": idTokenClaims.Issuer,
"aud": idTokenClaims.Audience,
"nonce": idTokenClaims.Nonce,
"exp": float64(idTokenClaims.ExpiresAt.Unix()),
"foo": idTokenClaims.Extra["foo"],
"baz": idTokenClaims.Extra["baz"],
Expand All @@ -76,4 +74,23 @@ func TestIDTokenClaimsToMap(t *testing.T) {
"acr": idTokenClaims.AuthenticationContextClassReference,
"amr": idTokenClaims.AuthenticationMethodsReference,
}, idTokenClaims.ToMap())

idTokenClaims.Nonce = "foobar"
assert.Equal(t, map[string]interface{}{
"jti": idTokenClaims.JTI,
"sub": idTokenClaims.Subject,
"iat": float64(idTokenClaims.IssuedAt.Unix()),
"rat": float64(idTokenClaims.RequestedAt.Unix()),
"iss": idTokenClaims.Issuer,
"aud": idTokenClaims.Audience,
"exp": float64(idTokenClaims.ExpiresAt.Unix()),
"foo": idTokenClaims.Extra["foo"],
"baz": idTokenClaims.Extra["baz"],
"at_hash": idTokenClaims.AccessTokenHash,
"c_hash": idTokenClaims.CodeHash,
"auth_time": idTokenClaims.AuthTime.Unix(),
"acr": idTokenClaims.AuthenticationContextClassReference,
"amr": idTokenClaims.AuthenticationMethodsReference,
"nonce": idTokenClaims.Nonce,
}, idTokenClaims.ToMap())
}

0 comments on commit 795dee2

Please sign in to comment.