/// <summary> /// Creates a JSON Web Token. /// </summary> /// <param name="userDto">A <see cref="UserDto"/> object with username.</param> /// <returns>A <see cref="LoginPackage"/> with a JSON Web Token.</returns> private LoginPackage CreateToken(UserDto userDto) { var key = _configuration.GetValue <string>("JwtAuthorization:key"); var issuer = _configuration.GetValue <string>("JwtAuthorization:issuer"); var securityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(key)); var credentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256); var permClaims = new List <Claim> { new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()), new Claim("valid", "1"), new Claim("userid", userDto.Id.ToString()), new Claim("name", userDto.Username) }; var token = new JwtSecurityToken(issuer, issuer, permClaims, expires: DateTime.Now.AddDays(7), signingCredentials: credentials); var loginPackage = new LoginPackage { Data = new JwtSecurityTokenHandler().WriteToken(token) }; return(loginPackage); }
// Use this for initialization void Start() { ByteBuffer bf = new ByteBuffer(); LoginRequest pkt = new LoginRequest(); pkt.username = "******"; pkt.passworld = "123"; pkt.age = 22; pkt.Write(bf); //toArray操作其实是read的操作,读取指针会往后移哦。前面的会被重用哦。太棒了!! byte[] _bb = bf.toArray(); Debug.Log(_bb.Length); //然后就可以发出去了。 //模拟一下接收 ByteBuffer bf2 = new ByteBuffer(); bf2.writeBytes(_bb);//可以无限写入哦!!!! LoginPackage _TTT = new LoginPackage(); _TTT.Read(bf2); Debug.Log("username:"******"pwd:" + _TTT.passworld + "age:" + _TTT.age); ////可以无限写入哦!!!! //bf2.writeBytes(_bb); ////然后我就可以读取了吧 ////Debug.Log("bf2:"+bf2.readInt()); ////Debug.Log("bf2:"+bf2.readString()); ////Debug.Log("bf2:"+bf2.readString()); //Debug.Log(bf2.readableBytes()); ////可用字节的长度 //int packageSize = bf.readableBytes(); //Debug.Log("packageSize:"+bf.readableBytes()); //int i =bf.readInt(); //Debug.Log(i); //string _s =bf.readString(); //Debug.Log(_s); //string _s2 = bf.readString(); //Debug.Log(_s2); ////可读取的字节数,=0的话,说明写入的已经被读取完了 //Debug.Log(bf.readableBytes()); ////整个buffer容器大小 //Debug.Log("buffer contain:"+ bf.getCapacity()); ////buffer容器的名字,用逗号隔开 //bf.writeString("hello joe"); //Debug.Log(bf.remainBufferString()); }
public LoginResult login(LoginPackage loginPackage) { return(new LoginResult { Status = 200, AuthToken = PrivateKeyGenerator.generatePrivateKey().ToString(), ElectionPuk = EncryptionVariables.ElectionPuk, Choices = getChoices() }); }
public void GetLoginPackageTest() { var package = new LoginPackage(); var data = package.ToByteArray(); ClientPackage clientPackage = _factory.GetNextPackage(data); Assert.NotNull(clientPackage); Assert.AreEqual(data, clientPackage.ToByteArray()); Assert.AreEqual(package.Type, clientPackage.Type); }
/// <summary> /// 网络登录 /// </summary> /// <param name="stream">连接网络流</param> static void Login(NetworkStream stream) { var formater = new BinaryFormatter(); Console.Write("帐号:"); var account = Console.ReadLine(); Console.Write("密码:"); var password = Console.ReadLine(); //组织登录报文 var loginPackage = new LoginPackage { Account = account, Password = password }; //发送登录报文 formater.Serialize(stream, loginPackage); //接收登录报文返回织 var loginResultPackage = formater.Deserialize(stream) as LoginResultPackage; //判断登结结果 if (loginResultPackage.Result) { Console.WriteLine("登录成功!"); Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("*******我的好友******"); foreach (var friend in loginResultPackage.Frinds) { Console.WriteLine("帐户:" + friend); } Console.WriteLine("*******我的好友******"); Console.ResetColor(); //读的代码 new Thread(ReadMessage).Start(stream); //开始写线程 WriteMessage(stream, account); } else { //登录不成功可以再次登录 Console.WriteLine(loginResultPackage.Message); Console.WriteLine("退出请按e,再次登录请按任意键!"); if (Console.ReadKey().KeyChar != 'e') { Login(stream); } } }
/// <summary> /// 验证登录 /// </summary> /// <param name="obj"></param> static void HandleLoginPackage(NetworkStream stream, LoginPackage loginPackage) { var loginResultPackage = new LoginResultPackage(); //验证用帐号和密码,组织正确或错误报文并返回 if (users.Keys.Contains(loginPackage.Account) && users[loginPackage.Account] == loginPackage.Password) { loginResultPackage.Result = true; loginResultPackage.Frinds = userConnects.Keys.ToArray(); userConnects.Add(loginPackage.Account, stream); } else { loginResultPackage.Result = false; loginResultPackage.Message = "用户名或密码错误!"; } var formater = new BinaryFormatter(); formater.Serialize(stream, loginResultPackage); }
public void LoginPackageDeserializationTest() { LoginPackage expected = new LoginPackage(); var buffer = expected.ToByteArray(); ClientPackageType packageType = ClientPackageType.None; LoginPackage actual = new LoginPackage(); using (var stream = new MemoryStream(buffer)) { using (var reader = new BinaryReader(stream)) { var len = reader.ReadInt32(); packageType = (ClientPackageType)reader.ReadByte(); actual.FromByteArray(reader.ReadBytes(len - 1)); } } Assert.AreEqual(ClientPackageType.Login, packageType); }
//stuff that controller shouldn't know // private bool verifyMessage(string message) // { // JsonSerializerOptions serializerOptions = new JsonSerializerOptions(); // serializerOptions.Converters.Add(new BigIntegerConverter()); // Signature signature = JsonSerializer.Deserialize<Signature>(message, serializerOptions); // // return Verifying.verifyMessage(signature, message, EncryptionVariables.PukForClients, // EncryptionVariables.EllipticCurveForClient); // } // https://weblog.west-wind.com/posts/2017/sep/14/accepting-raw-request-body-content-in-aspnet-core-api-controllers // public static async Task<string> GetRawBodyStringAsync(this HttpRequest request, Encoding encoding = null) // { // if (encoding == null) // encoding = Encoding.UTF8; // // using (StreamReader reader = new StreamReader(request.Body, encoding)) // return await reader.ReadToEndAsync(); // } private string loginClientToLoginServer(string message) { JsonSerializerOptions serializerOptions = new JsonSerializerOptions(); serializerOptions.Converters.Add(new BigIntegerConverter()); LoginContainer loginContainer = JsonSerializer.Deserialize <LoginContainer>(message, serializerOptions); EllipticCurvePoint sharedKey = KeyGeneration.calculateMasterKey(EncryptionVariables.PrkcForClient, loginContainer.clientPuk, EncryptionVariables.EllipticCurveForClient); ECIESUnprocessResult unprocessResult = ECIESProvider.unprocessMessage(sharedKey.x.ToString(), loginContainer.loginPackage.Tag, loginContainer.loginPackage.EncryptedMessage); if (unprocessResult.Status != MyEnum.Successful) { return(JsonSerializer.Serialize(new LoginResultContainer() { LoginResultECIESProcessed = ECIESProvider.processMessage(sharedKey.x.ToString(), JsonSerializer.Serialize(new LoginResult() { Status = 401 })) })); } else { LoginPackage loginPackage = JsonSerializer.Deserialize <LoginPackage>(unprocessResult.DeprocessedMessage); LoginResult loginResult = _login.login(loginPackage); return(JsonSerializer.Serialize(new LoginResultContainer() { LoginResultECIESProcessed = ECIESProvider.processMessage(sharedKey.x.ToString(), JsonSerializer.Serialize(loginResult)) })); } }
//登陆 void Login(object parameter) { if (IsBusy) { return; } IsBusy = true; //重置提示栏 this.Error = ""; #region 记住密码 if (this.RememberMe == true) { LoginPackage package = new LoginPackage(this.Username, this.Password); DataManager.SetValue(DataKey.IWorld_Backstage_RememberMe, package); } else { DataManager.RemoveValue(DataKey.IWorld_Backstage_RememberMe); } #endregion //登陆 AdministratorServiceClient client = new AdministratorServiceClient(); client.LoginCompleted += ShowLoginResult; LoginImport import = new LoginImport { Username = this.Username, Password = this.Password }; client.LoginAsync(import); }
/// <summary> /// 登陆 /// </summary> /// <param name="parameter">可选参数</param> void Login(object parameter) { if (IsBusy) { return; } IsBusy = true; //重置提示栏 this.Error = ""; #region 记住密码 string dataKeyOfRememberMe = DataKey.Client_RememberMe.ToString(); if (this.RememberMe == true) { LoginPackage package = new LoginPackage { Username = this.Username, Password = this.Password }; IsolatedStorageSettings.ApplicationSettings[dataKeyOfRememberMe] = package; } else { IsolatedStorageSettings.ApplicationSettings.Remove(dataKeyOfRememberMe); } IsolatedStorageSettings.ApplicationSettings.Save(); #endregion tUsername = this.Username; //登陆 UserClient.LoginAsync(this.Username, this.Password); }
private void ReadCallback(IAsyncResult ar) { Socket handler = (Socket)ar.AsyncState; int received = handler.EndReceive(ar); if (received > 0) { sb.Append(Encoding.ASCII.GetString(buffer, 0, received)); string content = sb.ToString(); if (content.IndexOf(ServerConstants.EOF) > -1) { content = content.Substring(0, content.Length - 5); serverTB.AppendText("Read " + content.Length + " bytes from socket.\r\nData: " + content + "\r\n\r\n"); var deserialized = JsonConvert.DeserializeObject <PackageWrapper>(content); if (deserialized.PackageType == typeof(LoginPackage)) { LoginPackage lp = (LoginPackage)JsonConvert.DeserializeObject(Convert.ToString(deserialized.Package), deserialized.PackageType); ClientsDetailsPackage client = Client.getClientsDetailsPackage(lp); byte[] sendClient = Encoding.ASCII.GetBytes(JsonConvert.SerializeObject(client) + ServerConstants.EOF); handler.BeginSend(sendClient, 0, sendClient.Length, 0, new AsyncCallback(SendCallback), handler); } else if (deserialized.PackageType == typeof(FileSearch)) { FileSearch fs = (FileSearch)JsonConvert.DeserializeObject(Convert.ToString(deserialized.Package), deserialized.PackageType); List <FileDetails> lfd = new List <FileDetails>(); List <File> listFile = new List <File>(); List <ClientFile> listClient = new List <ClientFile>(); Client client = new Client(); FilePackage fp = new FilePackage(); if (fs.FileName.CompareTo("*") == 0) { listFile = File.getAllFilesList(); foreach (var item in listFile) { listClient = ClientFile.getAllFilesById(item.Id); foreach (var item2 in listClient) { client.getClient(item2.Username); FileDetails f = new FileDetails { Username = item2.Username, FileName = item.Name, FileSize = item.Size, Ip = client.Ip, Port = client.Port }; lfd.Add(f); } } fp.Exist = true; fp.FilesList = lfd; } else if (!File.isFileExist(fs.FileName)) { fp.Exist = false; } else { listFile = File.getAllFilesListByName(fs.FileName); foreach (var item in listFile) { listClient = ClientFile.getAllFilesById(item.Id); foreach (var item2 in listClient) { client.getClient(item2.Username); int size = item.Size; FileDetails f = new FileDetails { Username = item2.Username, FileName = item.Name, FileSize = size, Ip = client.Ip, Port = client.Port }; lfd.Add(f); } } fp.Exist = true; fp.FilesList = lfd; } byte[] sendAnswer = Encoding.ASCII.GetBytes(JsonConvert.SerializeObject(fp) + ServerConstants.EOF); handler.BeginSend(sendAnswer, 0, sendAnswer.Length, 0, new AsyncCallback(SendCallback), handler); } else { LogoutPackage lp = (LogoutPackage)JsonConvert.DeserializeObject(Convert.ToString(deserialized.Package), deserialized.PackageType); Client.setLogOut(lp.Username); } } else { handler.BeginReceive(buffer, 0, ServerConstants.BufferSize, 0, new AsyncCallback(ReadCallback), handler); } sb.Clear(); handler.BeginReceive(buffer, 0, ServerConstants.BufferSize, 0, new AsyncCallback(ReadCallback), handler); } }
private byte[] PrepareSendData(StateObject state) { byte[] result = null; switch (state.Package.CID) { case FuncCode.Ensure: _logManager.Info($"{MessageType.Send} => 确认报文"); var package = new EnsurePackage { PID = SocketHelper.HostToNetwork((ushort)0x0000), CID = SocketHelper.HostToNetwork(FuncCode.Ensure), ST = 0, UID = 0, VER = SocketHelper.HostToNetwork((ushort)0x1000), IPAddress = "".PadRight(20, '\0'), Port = SocketHelper.HostToNetwork((uint)0) }; result = SocketHelper.StructToBytes(package); _logManager.Info($"{MessageType.Send} => {PrintReceivebytes(result)}"); break; case FuncCode.Redirect: _logManager.Info($"{MessageType.Send} => 重定向报文"); var package2 = new EnsurePackage { PID = SocketHelper.HostToNetwork((ushort)0x0000), CID = SocketHelper.HostToNetwork(FuncCode.Redirect), ST = 0, UID = 0, VER = SocketHelper.HostToNetwork((ushort)0x1000), IPAddress = "127.0.0.1".PadRight(20, '\0'), Port = SocketHelper.HostToNetwork((uint)11000) }; result = SocketHelper.StructToBytes(package2); break; case FuncCode.Close: _logManager.Info($"{MessageType.Send} => 关闭报文"); var package3 = new EnsurePackage { PID = SocketHelper.HostToNetwork((ushort)0x0000), CID = SocketHelper.HostToNetwork(FuncCode.Close), ST = 0, UID = 0, VER = SocketHelper.HostToNetwork((ushort)0x1000), IPAddress = "".PadRight(20, '\0'), Port = SocketHelper.HostToNetwork((uint)0) }; result = SocketHelper.StructToBytes(package3); break; case FuncCode.Login: _logManager.Info($"{MessageType.Login}{state.Machine.MachineCode} => 登录报文"); var package4 = new LoginPackage { PID = SocketHelper.HostToNetwork((ushort)0x0000), CID = SocketHelper.HostToNetwork(FuncCode.Login), ST = 0, UID = Convert.ToByte(state.UserName), VER = SocketHelper.HostToNetwork((ushort)0x1000), Password = state.Password.PadRight(8, '\0') }; result = SocketHelper.StructToBytes(package4); _logManager.Info($"{MessageType.Send} => {PrintReceivebytes(result)}"); break; case FuncCode.EnumAllData: _logManager.Info($"{MessageType.RequireDataItem}{state.Machine.MachineCode} => 枚举请求报文"); var package5 = new BasicPackage { PID = SocketHelper.HostToNetwork((ushort)0x0000), CID = SocketHelper.HostToNetwork(FuncCode.EnumAllData), ST = 0, UID = Convert.ToByte(state.UserName), VER = SocketHelper.HostToNetwork((ushort)0x1000) }; result = SocketHelper.StructToBytes(package5); break; case FuncCode.RequestForPush: _logManager.Info($"{MessageType.RequireDataItem}{state.Machine.MachineCode} => 推送请求报文"); var package6 = new RequestPushPackage { PID = SocketHelper.HostToNetwork((ushort)0x0000), CID = SocketHelper.HostToNetwork(FuncCode.RequestForPush), UID = state.UserName, ST = 0, VER = SocketHelper.HostToNetwork((ushort)0x1000), RV = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 } }; result = SocketHelper.StructToBytes(package6); _logManager.Info($"{MessageType.Send} => {PrintReceivebytes(result)}"); break; case FuncCode.NullCommandReply: _logManager.Info($"{MessageType.KeepAlive}{state.Machine.MachineCode} => 心跳包回复报文"); var package7 = new BasicPackage { PID = SocketHelper.HostToNetwork((ushort)0x0000), CID = SocketHelper.HostToNetwork(FuncCode.NullCommandReply), ST = 0, UID = Convert.ToByte(state.UserName), VER = SocketHelper.HostToNetwork((ushort)0x1000) }; result = SocketHelper.StructToBytes(package7); _logManager.Info($"{MessageType.Send} => {PrintReceivebytes(result)}"); break; case FuncCode.PushDataReply: _logManager.Info($"{MessageType.Send}{state.Machine.MachineCode} => 推送回复报文"); var package8 = new BasicPackage { PID = SocketHelper.HostToNetwork((ushort)0x0000), CID = SocketHelper.HostToNetwork(FuncCode.PushDataReply), ST = 0, UID = Convert.ToByte(state.UserName), VER = SocketHelper.HostToNetwork((ushort)0x1000) }; result = SocketHelper.StructToBytes(package8); _logManager.Info($"{MessageType.Send} => {PrintReceivebytes(result)}"); break; } return(result); }