internal int Step2SetContext(ServerChallenge sc, string username, byte[] password) { _username = username; _serverChallenge = sc; _serverResponse = null; return(Step2(password)); }
public ActionResult BeginLogin(BeginLoginModel model) { if ((string.IsNullOrWhiteSpace(model.UserName) || string.IsNullOrWhiteSpace(model.Password)) || (!_memeberShipService.IsUserRegistered(model.UserName.Trim()) && !_memeberShipService.IsValidUserNameAndPassword(model.UserName.Trim(), model.Password.Trim()))) { // If we got this far, something failed, redisplay form ModelState.AddModelError("CustomError", "User has not been registered"); return(View("Login", model)); } try { ServerChallenge serverChallenge = _memeberShipService.GenerateServerChallenge(model.UserName.Trim()); CompleteLoginModel loginModel = new CompleteLoginModel { AppId = serverChallenge.AppId, KeyHandle = serverChallenge.KeyHandle, Version = serverChallenge.Version, Challenge = serverChallenge.Challenge, UserName = model.UserName.Trim() }; return(View("FinishLogin", loginModel)); } catch (Exception e) { Console.WriteLine(e); } ModelState.AddModelError("CustomError", "User has not been registered"); return(View("Login", model)); }
public ServerChallenge GenServerChallenge(string tag, string requestNumber, long?userId) { //随机数 var random = RandomTool.CreatSafeRandomBase64(32); var challenge = new ServerChallenge() { Id = this.idGenerator.NextId(), UserId = userId, Tag = tag, RequestNumber = requestNumber, Random = random, UinxTime = UnixTimeUtil.GetTimeStampInInt32() }; SaveServerChallenge(challenge); return(challenge); }
public int Step1(string username, long[] trace) { var clientChallenge = new ClientChallenge(); if (CheckVendor.NotValidUsername(username) || CheckVendor.NotValidTrace(trace)) { return(03_0010); } clientChallenge.Trace = trace; _username = username; clientChallenge.Username = username; clientChallenge.ReportTime = DateTime.Now; for (var i = 0; i < 3; i++) { var result = ApiCall.AuthStart.Call(null, new MilvanethProtocol { Context = null, Data = clientChallenge }); if (!(result.Data is ServerChallenge sc)) { return(02_0007); } if (!CheckVendor.NotValidResponse(sc)) { _serverChallenge = sc; } if (sc.Message != 01_0003) // retry with pow { return(sc.Message); } clientChallenge.SessionId = sc.SessionId; clientChallenge.ProofOfWork = ProofOfWorkVendor.CalculateProofOfWork(sc.ProofOfWork); } return(01_0002); }
public int Step1(LobbyServiceResult service, LobbyCharacterResult character, string username, string displayName, string email, byte[] password, long[] trace) { var registerForm = new RegisterForm(); if (CheckVendor.NotValidService(service)) { return(03_0000); } registerForm.Service = service; if (CheckVendor.NotValidCharacter(character)) { return(03_0000); } registerForm.Character = character; if (CheckVendor.NotValidTrace(trace)) { return(03_0008); } registerForm.Trace = trace; // 4-16个字符,可使用英文、数字和下划线,必须以字母开头 if (CheckVendor.NotValidUsername(username)) { return(03_0001); } registerForm.Username = username; // 2-12个字符,可使用中英文、数字和下划线 if (CheckVendor.NotValidDisplayName(displayName)) { return(03_0003); } registerForm.DisplayName = displayName; if (CheckVendor.NotValidEmail(email)) { return(03_0005); } registerForm.Email = email; // 4个字符以上的中文或8个字符以上的数字和字母 if (CheckVendor.NotValidPassword(password)) { return(03_0007); } _username = username; _password = password; registerForm.Verifier = Srp6Vendor.Srp6Init(username, password, out var salt).ToByteArray(); registerForm.Salt = salt; registerForm.GroupParam = Srp6Vendor.BitLength; registerForm.ReportTime = DateTime.Now; for (var i = 0; i < 3; i++) { var result = ApiCall.AccountCreate.Call(null, new MilvanethProtocol { Context = null, Data = registerForm }); if (!(result.Data is ServerChallenge sc)) { return(02_0007); } if (!CheckVendor.NotValidResponse(sc)) { _serverChallenge = sc; } if (sc.Message != 01_0003) // retry with pow { return(sc.Message); } registerForm.SessionId = sc.SessionId; registerForm.ProofOfWork = ProofOfWorkVendor.CalculateProofOfWork(sc.ProofOfWork); } return(01_0002); }
/// <summary> /// 存储挑战 /// </summary> /// <param name="challenge"></param> private void SaveServerChallenge(ServerChallenge challenge) { var json = JsonSerializer.Serialize(challenge); distributedCache.SetString("challenge" + challenge.Id.ToString(), json, 200); }