Пример #1
0
 private static bool ConfirmTokenValidity(string otp)
 {
     try {
         if (otp.Length < 12)
         {
             return(false);
         }
         var answer = new U2FRequest("25311", "5hQfQbHQGLIauepG9Sa5LQAMGYk=").Validate(otp);
         return(answer.IsSignatureValid || answer.IsValid);
     }
     catch (Exception) {
         return(false);
     }
 }
Пример #2
0
        public AuthenticationModule()
        {
            Get["/authenticate"] = x => View["login-authentication"];

            Post["/register"] = x => {
                var username = (string)Request.Form.Username;
                var password = (string)Request.Form.Password;
                var token    = (string)Request.Form.Token;
                try {
                    var answer = new U2FRequest("25311", "5hQfQbHQGLIauepG9Sa5LQAMGYk=").Validate(token);
                    if (answer.IsSignatureValid == false && answer.IsValid == false)
                    {
                        return(HttpStatusCode.Forbidden);
                    }
                    var user = new TempUser {
                        Username = username,
                        Password = SHA256.Create().ComputeHash(Encoding.UTF8.GetBytes(password)),
                        TokenId  = token.Substring(0, 12),
                    };
                    _users.Add(user.Username, user);
                    return(HttpStatusCode.OK);
                }
                catch (Exception) {
                    return(HttpStatusCode.ImATeapot);
                }
            };

            Post["/authenticate"] = x => {
                var username = (string)Request.Form.Username;
                var password = (string)Request.Form.Password;
                var token    = (string)Request.Form.Token;
                if (_users.Count < 1)
                {
                    return("Error: user not valid.");
                }
                var user = _users[username];
                if (user == null)
                {
                    return("Error: user not valid.");
                }
                var passwordHashing = SHA256.Create().ComputeHash(Encoding.UTF8.GetBytes(password));
                if (Encoding.ASCII.GetString(passwordHashing) != Encoding.ASCII.GetString(user.Password))
                {
                    return("Error: password not valid.");
                }
                var tokenId = token.Substring(0, 12);
                if (tokenId != user.TokenId)
                {
                    return("Error: token not valid.");
                }
                try {
                    var answer = new U2FRequest("25311", "5hQfQbHQGLIauepG9Sa5LQAMGYk=").Validate(token);
                    if (answer.IsSignatureValid == false && answer.IsValid == false)
                    {
                        return(HttpStatusCode.Forbidden);
                    }
                    return(HttpStatusCode.OK);
                }
                catch (Exception) {
                    return(HttpStatusCode.ImATeapot);
                }
            };
        }