From 10356d2430081e5f6dc60a68d576ef5b476f83ea Mon Sep 17 00:00:00 2001 From: ale <ale@incal.net> Date: Fri, 16 Feb 2018 18:29:55 +0000 Subject: [PATCH] Validate should ignore the ticket nonce when called with empty nonce --- sso.go | 49 +++++++++++++++++++++++++++++++++++++------------ 1 file changed, 37 insertions(+), 12 deletions(-) diff --git a/sso.go b/sso.go index 540185a..13e6001 100644 --- a/sso.go +++ b/sso.go @@ -11,18 +11,43 @@ import ( ) var ( - // Errors. - ErrMissingRequiredField = errors.New("missing required field") - ErrBadNonceLength = errors.New("bad nonce length") - ErrDeserialization = errors.New("deserialization error") + // ErrMissingRequiredField is returned when a ticket does not + // contain a required field. + ErrMissingRequiredField = errors.New("missing required field") + + // ErrDeserialization means that the input is not valid base64. + ErrDeserialization = errors.New("deserialization error") + + // ErrUnsupportedTicketVersion is returned for unsupported + // ticket versions (either too old or too recent). ErrUnsupportedTicketVersion = errors.New("unsupported ticket version") - ErrMessageTooShort = errors.New("encoded message too short") - ErrBadSignature = errors.New("bad signature") - ErrBadService = errors.New("service mismatch") - ErrBadDomain = errors.New("auth domain mismatch") - ErrBadNonce = errors.New("nonce mismatch") - ErrExpired = errors.New("ticket expired") - ErrUnauthorized = errors.New("unauthorized") + + // ErrMessageTooShort means that the input is shorter than the + // fixed signature length + minimum ticket size. + ErrMessageTooShort = errors.New("encoded message too short") + + // ErrBadSignature is returned when the signature does not + // match the given public key. + ErrBadSignature = errors.New("bad signature") + + // ErrBadService is returned when validation fails due to a + // SSO service mismatch. + ErrBadService = errors.New("service mismatch") + + // ErrBadDomain is returned when validation fails due to a SSO + // domain mismatch. + ErrBadDomain = errors.New("auth domain mismatch") + + // ErrBadNonce is returned when validation fails due to a + // nonce mismatch. + ErrBadNonce = errors.New("nonce mismatch") + + // ErrExpired means the ticket has expired. + ErrExpired = errors.New("ticket expired") + + // ErrUnauthorized is returned when the user lacks the + // necessary group membership. + ErrUnauthorized = errors.New("unauthorized") ) const ( @@ -234,7 +259,7 @@ func (v *ssoValidator) Validate(encoded, nonce, service string, allowedGroups [] if t.Expires.Before(time.Now()) { return nil, ErrExpired } - if t.Nonce != nonce { + if nonce != "" && t.Nonce != nonce { return nil, ErrBadNonce } -- GitLab