public Token Authorize(Request.IOAuthRequest request)
        {
            _logger.Debug("Authorizing authorization code request");

            var grantType = request.GrantType;

            if (!grantType.HasValue())
            {
                throw new OAuthException(ErrorCode.InvalidRequest, "Parameter grant_type is missing");
            }

            if (request.GrantType != GrantType.AuthorizationCode)
            {
                throw new OAuthException(ErrorCode.InvalidGrant, "The specified grant_type is not supported");
            }

            var code = request.AuthorizationCode;

            if (!code.HasValue())
            {
                throw new OAuthException(ErrorCode.InvalidRequest, "Parameter code is missing");
            }

            var tokenData = _issuer.DecodeAuthorizationToken(code);

            if ((DateTime.UtcNow - new DateTime(tokenData.Timestamp, DateTimeKind.Utc)).TotalSeconds > _configuration.AuthorizationTokenExpirationLength)
            {
                throw new OAuthException(ErrorCode.InvalidRequest, "Authorization code has expired");
            }

            if (tokenData.RedirectUri != request.RedirectUri)
            {
                throw new OAuthException(ErrorCode.InvalidRequest, "The specified redirect_uri is invalid");
            }

            var newTokenData = new TokenData
            {
                ConsumerId      = tokenData.ConsumerId,
                ResourceOwnerId = tokenData.ResourceOwnerId,
                Timestamp       = DateTime.UtcNow.Ticks
            };

            return(new Token
            {
                AccessToken = _issuer.GenerateAccessToken(newTokenData),
                ExpiresIn = _configuration.AccessTokenExpirationLength,
                RefreshToken = _issuer.GenerateRefreshToken(newTokenData),
                RedirectsUri = request.RedirectUri
            });
        }
Example #2
0
        public ValidationResult ValidateRequest(Request.IOAuthRequest request)
        {
            _logger.Debug("Validating authorization request");

            var responseType = request.ResponseType;

            if (string.IsNullOrWhiteSpace(request.ResponseType))
            {
                return new ValidationResult {
                           ErrorCode = ErrorCode.InvalidRequest, ErrorDescription = "Parameter response_type is missing"
                }
            }
            ;

            if (responseType != ResponseType.Code)
            {
                return new ValidationResult {
                           ErrorCode = ErrorCode.InvalidRequest, ErrorDescription = "The specified response_type is not valid"
                }
            }
            ;

            var clientId = request.ClientId;

            if (string.IsNullOrWhiteSpace(clientId))
            {
                return new ValidationResult {
                           ErrorCode = ErrorCode.InvalidRequest, ErrorDescription = "Parameter client_id is missing"
                }
            }
            ;

            var redirectUri = request.RedirectUri;

            if (redirectUri != null && !Regexs.HTTPUrl.IsMatch(redirectUri))
            {
                return new ValidationResult {
                           ErrorCode = ErrorCode.InvalidRequest, ErrorDescription = "The redirect_url parameter must be an absolute URI"
                }
            }
            ;

            return(new ValidationResult {
                Success = true
            });
        }
    }
}
Example #3
0
        public bool Authorize(Request.IOAuthRequest request)
        {
            if (string.IsNullOrWhiteSpace(request.AccessToken))
            {
                return(false);
            }

            var tokenData = _issuer.DecodeAccessToken(request.AccessToken);

            if ((DateTime.UtcNow - new DateTime(tokenData.Timestamp, DateTimeKind.Utc)).TotalSeconds > _configuration.AccessTokenExpirationLength)
            {
                _logger.Info("Access token is expired");
                return(false);
            }

            return(true);
        }
Example #4
0
        public ValidationResult ValidateRequest(Request.IOAuthRequest request)
        {
            _logger.Debug("Validating refresh token request");

            var grantType = request.GrantType;

            if (string.IsNullOrWhiteSpace(grantType))
            {
                return new ValidationResult {
                           ErrorCode = ErrorCode.InvalidRequest, ErrorDescription = "Parameter grant_type is missing"
                }
            }
            ;

            if (grantType != GrantType.RefreshToken)
            {
                return new ValidationResult {
                           ErrorCode = ErrorCode.InvalidGrant, ErrorDescription = "The specified grant_type is not supported"
                }
            }
            ;

            if (!request.IsFormEncoded())
            {
                return new ValidationResult {
                           ErrorCode = ErrorCode.InvalidRequest, ErrorDescription = "Content-Type must be application/x-www-form-urlencoded"
                }
            }
            ;

            if (string.IsNullOrWhiteSpace(request.RefreshToken))
            {
                return new ValidationResult {
                           ErrorCode = ErrorCode.InvalidRequest, ErrorDescription = "Parameter refresh_token is missing"
                }
            }
            ;

            return(new ValidationResult {
                Success = true
            });
        }
    }
}
        public ValidationResult ValidateRequest(Request.IOAuthRequest request)
        {
            _logger.Debug("Validating authorization code request");

            var grantType = request.GrantType;

            if (string.IsNullOrWhiteSpace(grantType))
            {
                return new ValidationResult {
                           ErrorCode = ErrorCode.InvalidRequest, ErrorDescription = "Parameter grant_type is missing"
                }
            }
            ;

            if (grantType != GrantType.AuthorizationCode)
            {
                return new ValidationResult {
                           ErrorCode = ErrorCode.InvalidGrant, ErrorDescription = "The specified grant_type is not supported"
                }
            }
            ;

            var authCode = request.AuthorizationCode;

            if (string.IsNullOrWhiteSpace(authCode))
            {
                return new ValidationResult {
                           ErrorCode = ErrorCode.InvalidRequest, ErrorDescription = "Parameter authorization_code is missing"
                }
            }
            ;

            return(new ValidationResult {
                Success = true
            });
        }
    }
}