コード例 #1
0
        public IHttpActionResult validateRefreshToken(Validate_Refresh_Token_Post refresh_token)
        {
            try
            {
                if (Conversions.ToBoolean(!VarsSubsFunc.ReadJWTParameters()))
                {
                    return(base.ResponseMessage(ErrorResponse("internal_error", "jwt_parameters.json error.", HttpStatusCode.InternalServerError)));
                }
                if (Information.IsNothing(refresh_token))
                {
                    return(base.ResponseMessage(ErrorResponse("request_error", "parameters error.", HttpStatusCode.BadRequest)));
                }
                string rfreshTkn = refresh_token.refresh_token;
                HttpResponseMessage response;
                if ((rfreshTkn ?? "") == (string.Empty ?? ""))
                {
                    return(base.ResponseMessage(ErrorResponse("invalid_request", "Incorrect parameters.", HttpStatusCode.BadRequest)));
                }
                var refresh_tknD = QueryRefreshToken(rfreshTkn);
                if (refresh_tknD.Status == false)
                {
                    return(base.ResponseMessage(ErrorResponse("sqlite_error", refresh_tknD.Msg, HttpStatusCode.ServiceUnavailable)));
                }
                else
                {
                    // Public Property Status() As Boolean
                    // Public Property Msg() As String
                    // Public Property RefreshToken() As String
                    // Public Property UserId() As Integer
                    // Public Property IsValid() As Integer
                    // Public Property [Date]() As DateTime

                    var reJSON = new Validate_Refresh_Token_Response()
                    {
                        userid  = refresh_tknD.UserId.ToString(),
                        isValid = refresh_tknD.IsValid.ToString(),
                        date    = refresh_tknD.Date.ToString("r")
                    };

                    // reJSON = New With {
                    // .userid = refresh_tknD.UserId.ToString,
                    // .isValid = refresh_tknD.IsValid.ToString,
                    // .date = refresh_tknD.Date.ToString("r")
                    // }

                    string stringR = JsonConvert.SerializeObject(reJSON);
                    response = Request.CreateResponse(HttpStatusCode.OK);
                    response.Headers.Location = new Uri(Request.RequestUri.ToString() + "/");
                    response.Content          = new StringContent(stringR, Encoding.UTF8, "application/json");
                    return(base.ResponseMessage(response));
                }
            }
            catch (Exception)
            {
                return(base.ResponseMessage(ErrorResponse("invalid_request", "Incorrect parameters.", HttpStatusCode.BadRequest)));
            }
        }
コード例 #2
0
        public IHttpActionResult validateToken([FromBody] Validate_Token_Post token)
        {
            HttpResponseMessage response;
            var vtr = new Validate_Token_Response();

            if (Conversions.ToBoolean(!VarsSubsFunc.ReadJWTParameters()))
            {
                vtr.msg = "jwt_parameters.json error";
            }

            if (Information.IsNothing(token))
            {
                vtr.msg = "request error";
            }
            string tkn = token.token;
            var    tk  = VarsSubsFunc.ExtractTokenData(tkn);
            var    dtN = DateTime.UtcNow;

            if (Information.IsNothing(tk.exp_date))
            {
                vtr.msg = "Token Invalido";
            }
            var dtExp = DateTime.ParseExact(tk.exp_date, "yyyy-MM-dd HH:mm:ss", null);

            if (dtExp > dtN)
            {
                vtr.msg     = "Token Valido, Usuario = " + tk.username;
                vtr.isValid = Conversions.ToString(true);
            }
            else
            {
                vtr.msg     = "Token Invalido";
                vtr.isValid = Conversions.ToString(false);
            }

            string stringR = JsonConvert.SerializeObject(vtr);

            response = Request.CreateResponse(HttpStatusCode.OK);
            response.Headers.Location = new Uri(Request.RequestUri.ToString() + "/");
            response.Content          = new StringContent(stringR, Encoding.UTF8, "application/json");
            return(base.ResponseMessage(response));
        }
コード例 #3
0
        public IHttpActionResult Token(AuthRequest login)
        {
            string refresh_token_g;

            if (!VarsSubsFunc.Create_db())
            {
                return(base.ResponseMessage(ErrorResponse("internal_error", "sqlite error.", HttpStatusCode.ServiceUnavailable)));
            }
            if (Conversions.ToBoolean(!VarsSubsFunc.ReadJWTParameters()))
            {
                return(base.ResponseMessage(ErrorResponse("internal_error", "jwt_parameters.json error.", HttpStatusCode.InternalServerError)));
            }
            try
            {
                strIp         = VarsSubsFunc.GetIpAddress().Trim();
                UserName      = login.username;
                Password      = login.password;
                Grant_type    = login.grant_type;
                Refresh_Token = login.refresh_token;
                if ((Grant_type ?? "") == (string.Empty ?? ""))
                {
                    return(base.ResponseMessage(ErrorResponse("invalid_request", "Incorrect parameters.", HttpStatusCode.BadRequest)));
                }
                refresh_token_g = Guid.NewGuid().ToString().Replace("-", "");
            }
            catch (Exception)
            {
                return(base.ResponseMessage(ErrorResponse("invalid_request", "Incorrect parameters.", HttpStatusCode.BadRequest)));
            }

            if (Grant_type == "password")
            {
                if ((UserName ?? "") == (string.Empty ?? "") || (Password ?? "") == (string.Empty ?? ""))
                {
                    return(base.ResponseMessage(ErrorResponse("invalid_request", "Incorrect parameters.", HttpStatusCode.BadRequest)));
                }
                // If Password = String.Empty Then Return ResponseMessage(ErrorResponse("invalid_request", "Incorrect parameters.", HttpStatusCode.BadRequest))

                var UserD = VarsSubsFunc.QueryUserData(UserName);
                if (UserD.status == false)
                {
                    return(base.ResponseMessage(ErrorResponse("sqlite_error", UserD.msg, HttpStatusCode.ServiceUnavailable)));
                }
                else
                {
                    intUserId   = UserD.userid;
                    strUser     = UserD.user;
                    strPassHash = UserD.passHash;
                    strEmail    = UserD.email;
                    strRole     = UserD.role;
                    strValid    = UserD.valid;
                }

                if (strUser is null || string.IsNullOrEmpty(strUser) || (strUser ?? "") == (string.Empty ?? ""))
                {
                    return(base.ResponseMessage(ErrorResponse("invalid_grant", "The user name or password is incorrect.", HttpStatusCode.Unauthorized)));
                }

                if (strValid is null || strValid == "0" || (strValid ?? "") == (string.Empty ?? ""))
                {
                    return(base.ResponseMessage(ErrorResponse("invalid_grant", "Sorry your account is inactive. Please contact your administrator.", HttpStatusCode.Unauthorized)));
                }

                if (SimpleHash.VerifyHash(Password, "SHA256", strPassHash) == false)
                {
                    return(base.ResponseMessage(ErrorResponse("invalid_grant", "The user name or password is incorrect.", HttpStatusCode.Unauthorized)));

                    // Return New With {.error = error_msg, msg}
                }

                if (!UpdateRefreshToken(intUserId, refresh_token_g))
                {
                    return(base.ResponseMessage(ErrorResponse("internal_error", "Error updating refresh_token.", HttpStatusCode.InternalServerError)));
                }
                string yourJsonG = CreateJWTToken(strUser, strRole, strEmail, refresh_token_g, intUserId);
                HttpResponseMessage responseG = Request.CreateResponse(HttpStatusCode.OK);
                responseG.Headers.Location = new Uri(Request.RequestUri.ToString() + "/");
                responseG.Content          = new StringContent(yourJsonG, Encoding.UTF8, "application/json");
                return(base.ResponseMessage(responseG));
            }

            // Return New With {
            // .access_token = jwt_token,
            // .token_type = "bearer",
            // .expires_in = CInt((l_Token.ValidTo - Date.UtcNow).TotalSeconds),
            // .userName = permClaims.Item(2).Value,
            // .issued = l_Token.ValidFrom.ToString("r"),
            // .expires = l_Token.ValidTo.ToString("r")
            // }

            else if (Grant_type == "refresh_token")
            {
                var refresh_tknD = QueryRefreshToken(Refresh_Token);
                if (refresh_tknD.Status == false)
                {
                    return(base.ResponseMessage(ErrorResponse("sqlite_error", refresh_tknD.Msg, HttpStatusCode.ServiceUnavailable)));
                }
                else
                {
                    intUserId = refresh_tknD.UserId;
                    intRefresh_token_Valid = refresh_tknD.IsValid;
                    strRefresh_token_Value = refresh_tknD.RefreshToken;
                    dtRefresh_token        = refresh_tknD.Date;
                }

                if (strRefresh_token_Value is null || (strRefresh_token_Value ?? "") == (string.Empty ?? "") || string.IsNullOrEmpty(strRefresh_token_Value))
                {
                    return(base.ResponseMessage(ErrorResponse("invalid_grant", "Invalid token (1023).", HttpStatusCode.Unauthorized)));
                }

                var UserD = VarsSubsFunc.QueryUserData(intUserId.ToString(), 1);
                if (UserD.status == false)
                {
                    return(base.ResponseMessage(ErrorResponse("sqlite_error", UserD.msg, HttpStatusCode.ServiceUnavailable)));
                }
                else
                {
                    intUserId   = UserD.userid;
                    strUser     = UserD.user;
                    strPassHash = UserD.passHash;
                    strEmail    = UserD.email;
                    strRole     = UserD.role;
                    strValid    = UserD.valid;
                }

                if (strUser is null || string.IsNullOrEmpty(strUser) || (strUser ?? "") == (string.Empty ?? ""))
                {
                    return(base.ResponseMessage(ErrorResponse("invalid_grant", "Invalid token, user does not exists.", HttpStatusCode.Unauthorized)));
                }

                if (strValid is null || strValid == "0" || (strValid ?? "") == (string.Empty ?? ""))
                {
                    return(base.ResponseMessage(ErrorResponse("invalid_grant", "Invalid token, your account is inactive. Please contact your administrator.", HttpStatusCode.Unauthorized)));
                }

                if (intRefresh_token_Valid == 0)
                {
                    return(base.ResponseMessage(ErrorResponse("invalid_grant", "Invalid token (1030).", HttpStatusCode.Unauthorized)));
                }

                if (!UpdateRefreshToken(intUserId, refresh_token_g))
                {
                    return(base.ResponseMessage(ErrorResponse("internal_error", "Error updating refresh_token.", HttpStatusCode.InternalServerError)));
                }
                string yourJsonG = CreateJWTToken(strUser, strRole, strEmail, refresh_token_g, intUserId);
                HttpResponseMessage responseG = Request.CreateResponse(HttpStatusCode.OK);
                responseG.Content          = new StringContent(yourJsonG, Encoding.UTF8, "application/json");
                responseG.Headers.Location = new Uri(Request.RequestUri.ToString() + "/");
                return(base.ResponseMessage(responseG));
            }
            else
            {
                return(base.ResponseMessage(ErrorResponse("invalid_grant", "grant_type not recognized.", HttpStatusCode.BadRequest)));
            }
        }
コード例 #4
0
        public IHttpActionResult TknData([FromBody] Validate_Token_Post token)
        {
            if (Conversions.ToBoolean(!VarsSubsFunc.ReadJWTParameters()))
            {
                return(base.ResponseMessage(ErrorResponse("internal_error", "jwt_parameters.json error.", HttpStatusCode.InternalServerError)));
            }
            if (Information.IsNothing(token))
            {
                return(base.ResponseMessage(ErrorResponse("request_error", "parameters error.", HttpStatusCode.BadRequest)));
            }
            HttpResponseMessage response;

            // Dim username, role, email, userid, jti, iss, aud As String
            // Dim iat_date, exp_date, nbf_date As String
            // Dim iat, exp, nbf As UInt64

            // 'Dim valueFromBody As String = JsonConvert.SerializeObject(value)

            // 'New Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()),
            // 'New Claim("userid", intUserID),
            // 'New Claim("user", struser),
            // 'New Claim("role", strrole),
            // 'New Claim("email", stremail),
            // 'New Claim(JwtRegisteredClaimNames.Iat, unixDateTime, ClaimValueTypes.Integer64)

            // 'Dim tk1 As String = String.Empty
            // 'Dim re = Request
            // 'Dim headers = re.Headers

            // 'If headers.Contains("Authorization") Then
            // '    tk1 = headers.GetValues("Authorization").FirstOrDefault.ToString
            // 'End If

            // 'If tk1.StartsWith("Bearer ") Then
            // '    tk1 = tk1.Replace("Bearer ", "")
            // 'End If

            // Dim tk As Token_Extracted_Data_Structure = ExtractTokenData(token.token)

            // jti = tk.jti
            // userid = tk.userid
            // username = tk.username
            // role = tk.role
            // email = tk.email
            // nbf = tk.nbf
            // iat = tk.iat
            // exp = tk.exp
            // iss = tk.iss
            // aud = tk.aud
            // nbf_date = tk.nbf_date
            // iat_date = tk.iat_date
            // exp_date = tk.exp_date

            // 'Dim identity = TryCast(User.Identity, ClaimsIdentity)

            // 'For Each claim In identity.Claims

            // '    System.Console.WriteLine(claim.Type & ":" + claim.Value)

            // 'Next

            // 'If identity IsNot Nothing Then

            // '    Dim claims = identity.Claims
            // '    username = claims.Where(Function(p) Equals(p.Type, "user")).FirstOrDefault()?.Value
            // '    userid = claims.Where(Function(p) Equals(p.Type, "userid")).FirstOrDefault()?.Value
            // '    role = claims.Where(Function(p) Equals(p.Type, "role")).FirstOrDefault()?.Value
            // '    email = claims.Where(Function(p) Equals(p.Type, "emailaddress")).FirstOrDefault()?.Value

            // '    jti = claims.Where(Function(p) Equals(p.Type, JwtRegisteredClaimNames.Jti)).FirstOrDefault()?.Value
            // '    exp = claims.Where(Function(p) Equals(p.Type, JwtRegisteredClaimNames.Exp)).FirstOrDefault()?.Value
            // '    nbf = claims.Where(Function(p) Equals(p.Type, JwtRegisteredClaimNames.Nbf)).FirstOrDefault()?.Value
            // '    iat = claims.Where(Function(p) Equals(p.Type, JwtRegisteredClaimNames.Iat)).FirstOrDefault()?.Value

            // 'End If

            string stringJ = JsonConvert.SerializeObject(VarsSubsFunc.ExtractTokenData(token.token));

            response = Request.CreateResponse(HttpStatusCode.OK);
            response.Headers.Location = new Uri(Request.RequestUri.ToString() + "/");
            response.Content          = new StringContent(stringJ, Encoding.UTF8, "application/json");
            return(base.ResponseMessage(response));
        }