public OAuth2AccessToken resolve(String tokenString)
        {
            OAuth2AccessTokenEnvelope envelope = JasonUtils.UnmarshalAccessTokenEnvelope(tokenString);

            if (envelope == null)
            {
                throw new System.ApplicationException("Cannot create OAuth2 Envelope from token");
            }

            String accessToken = envelope.Token;

            if (!tokenSigner.IsValid(accessToken, envelope.SignatureValue))
            {
                // Invalid signature, throw exception.
                throw new System.ApplicationException("Invalid OAuth2 Token signature");
            }

            accessToken = tokenEncrypter.Decrypt(accessToken);
            if (envelope.Deflated)
            {
                accessToken = JasonUtils.inflate(accessToken, true);
            }

            OAuth2AccessToken at = JasonUtils.UnmarshalAccessToken(accessToken);

            // Check token expiration

            return(at);
        }