Skip to content

Commit

Permalink
Add test which replicates the bug
Browse files Browse the repository at this point in the history
  • Loading branch information
buger committed Jun 11, 2018
1 parent 4f0e098 commit 9fbf505
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 6 deletions.
6 changes: 3 additions & 3 deletions apidef/api_definitions.go
Original file line number Diff line number Diff line change
Expand Up @@ -343,9 +343,9 @@ type APIDefinition struct {
JWTDisableIssuedAtValidation bool `bson:"jwt_disable_issued_at_validation" json:"jwt_disable_issued_at_validation"`
JWTDisableExpiresAtValidation bool `bson:"jwt_disable_expires_at_validation" json:"jwt_disable_expires_at_validation"`
JWTDisableNotBeforeValidation bool `bson:"jwt_disable_not_before_validation" json:"jwt_disable_not_before_validation"`
JWTIssuedAtValidationSkew uint64 `bson:"jwt_issued_at_validation_skew" json:"jwt_issued_at_validation_skew"`
JWTExpiresAtValidationSkew uint64 `bson:"jwt_expires_at_validation_skew" json:"jwt_expires_at_validation_skew"`
JWTNotBeforeValidationSkew uint64 `bson:"jwt_not_before_validation_skew" json:"jwt_not_before_validation_skew"`
JWTIssuedAtValidationSkew int64 `bson:"jwt_issued_at_validation_skew" json:"jwt_issued_at_validation_skew"`
JWTExpiresAtValidationSkew int64 `bson:"jwt_expires_at_validation_skew" json:"jwt_expires_at_validation_skew"`
JWTNotBeforeValidationSkew int64 `bson:"jwt_not_before_validation_skew" json:"jwt_not_before_validation_skew"`
NotificationsDetails NotificationsManager `bson:"notifications" json:"notifications"`
EnableSignatureChecking bool `bson:"enable_signature_checking" json:"enable_signature_checking"`
HmacAllowedClockSkew float64 `bson:"hmac_allowed_clock_skew" json:"hmac_allowed_clock_skew"`
Expand Down
6 changes: 3 additions & 3 deletions mw_jwt.go
Original file line number Diff line number Diff line change
Expand Up @@ -466,21 +466,21 @@ func (k *JWTMiddleware) validateJWTClaims(c jwt.MapClaims) *jwt.ValidationError
now := time.Now().Unix()

if !k.Spec.JWTDisableExpiresAtValidation {
if !c.VerifyExpiresAt(now-int64(k.Spec.JWTExpiresAtValidationSkew), false) {
if !c.VerifyExpiresAt(now - k.Spec.JWTExpiresAtValidationSkew, false) {
vErr.Inner = errors.New("token has expired")
vErr.Errors |= jwt.ValidationErrorExpired
}
}

if !k.Spec.JWTDisableIssuedAtValidation {
if c.VerifyIssuedAt(now+int64(k.Spec.JWTIssuedAtValidationSkew), false) == false {
if c.VerifyIssuedAt(now + k.Spec.JWTIssuedAtValidationSkew, false) == false {
vErr.Inner = errors.New("token used before issued")
vErr.Errors |= jwt.ValidationErrorIssuedAt
}
}

if !k.Spec.JWTDisableNotBeforeValidation {
if c.VerifyNotBefore(now+int64(k.Spec.JWTNotBeforeValidationSkew), false) == false {
if c.VerifyNotBefore(now + k.Spec.JWTNotBeforeValidationSkew, false) == false {
vErr.Inner = errors.New("token is not valid yet")
vErr.Errors |= jwt.ValidationErrorNotValidYet
}
Expand Down
10 changes: 10 additions & 0 deletions mw_jwt_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -642,6 +642,16 @@ func TestJWTSessionIssueAtValidationConfigs(t *testing.T) {
})
})

t.Run("IssueAt-JWTDisableIssuedAtValidation--not_valid_jwt", func(t *testing.T) {
spec.JWTDisableIssuedAtValidation = false
spec.JWTIssuedAtValidationSkew = 2 // 2 seconds
loadAPI(spec)

ts.Run(t, test.TestCase{
Headers: jwtAuthHeaderGen(-3 * time.Second), Code: http.StatusOK,
})
})

t.Run("IssueAt-After_now-Add_skew--Valid_jwt", func(t *testing.T) {
spec.JWTDisableIssuedAtValidation = false
spec.JWTIssuedAtValidationSkew = 1
Expand Down

0 comments on commit 9fbf505

Please sign in to comment.