コード例 #1
0
        public static FormsAuthenticationTicket Deserialize(byte[] serializedTicket, int serializedTicketLength)
        {
            FormsAuthenticationTicket ticket;

            try
            {
                using (MemoryStream stream = new MemoryStream(serializedTicket))
                {
                    using (SerializingBinaryReader reader = new SerializingBinaryReader(stream))
                    {
                        int      version;
                        DateTime issueDate;
                        DateTime expirationDate;

                        if (reader.ReadByte() != 1)
                        {
                            return(null);
                        }
                        version = reader.ReadByte();
                        int issueDateTimestamp = reader.ReadInt32();
                        issueDate = DateTimeExtend.FromUnixTime(issueDateTimestamp);

                        int expirationTimestamp = reader.ReadInt32();
                        expirationDate = DateTimeExtend.FromUnixTime(expirationTimestamp);
                        bool isPersistent = reader.ReadByte() == 1;

                        if (reader.ReadByte() != 0xfe)
                        {
                            return(null);
                        }

                        string name       = reader.ReadBinaryString();
                        string userData   = reader.ReadBinaryString();
                        string cookiePath = reader.ReadBinaryString();
                        if (reader.ReadByte() != 0xff)
                        {
                            return(null);
                        }
                        if (stream.Position != serializedTicketLength)
                        {
                            return(null);
                        }
                        ticket = new FormsAuthenticationTicket(version, name, issueDate, expirationDate, isPersistent, userData, cookiePath);
                    }
                }
            }
            catch
            {
                ticket = null;
            }
            return(ticket);
        }
コード例 #2
0
        public static AuthenticationTicket Deserialize(byte[] serializedTicket, int serializedTicketLength)
        {
            try
            {
                using (MemoryStream memoryStream = new MemoryStream(serializedTicket))
                {
                    using (SerializingBinaryReader serializingBinaryReader = new SerializingBinaryReader((Stream)memoryStream))
                    {
                        if ((int)serializingBinaryReader.ReadByte() != 1)
                        {
                            return(null);
                        }
                        int      version      = (int)serializingBinaryReader.ReadByte();
                        DateTime issueDateUtc = new DateTime(serializingBinaryReader.ReadInt64(), DateTimeKind.Utc);
                        if ((int)serializingBinaryReader.ReadByte() != 254)
                        {
                            return(null);
                        }
                        DateTime expirationUtc  = new DateTime(serializingBinaryReader.ReadInt64(), DateTimeKind.Utc);
                        string   name           = serializingBinaryReader.ReadBinaryString();
                        int      userDataLength = serializingBinaryReader.ReadInt32();
                        byte[]   userBinary     = serializingBinaryReader.ReadBytes(userDataLength);
                        User     user           = null;
                        try
                        {
                            user = userBinary.BinaryDeserialize <User>();
                        }
                        catch
                        {
                            return(null);
                        }

                        if ((int)serializingBinaryReader.ReadByte() != (int)byte.MaxValue || memoryStream.Position != (long)serializedTicketLength)
                        {
                            return(null);
                        }
                        else
                        {
                            return(new AuthenticationTicket(name, version, issueDateUtc, expirationUtc, user));
                        }
                    }
                }
            }
            catch
            {
                return(null);
            }
        }
コード例 #3
0
        public static AuthenticationTicket Deserialize(byte[] serializedTicket, int serializedTicketLength)
        {
            try
            {
                using (MemoryStream memoryStream = new MemoryStream(serializedTicket))
                {
                    using (SerializingBinaryReader serializingBinaryReader = new SerializingBinaryReader((Stream)memoryStream))
                    {
                        if ((int)serializingBinaryReader.ReadByte() != 1)
                            return null;
                        int version = (int)serializingBinaryReader.ReadByte();
                        DateTime issueDateUtc = new DateTime(serializingBinaryReader.ReadInt64(), DateTimeKind.Utc);
                        if ((int)serializingBinaryReader.ReadByte() != 254)
                            return null;
                        DateTime expirationUtc = new DateTime(serializingBinaryReader.ReadInt64(), DateTimeKind.Utc);
                        string name = serializingBinaryReader.ReadBinaryString();
                        int userDataLength = serializingBinaryReader.ReadInt32();
                        byte[] userBinary = serializingBinaryReader.ReadBytes(userDataLength);
                        User user = null;
                        try
                        {
                            user = userBinary.BinaryDeserialize<User>();
                        }
                        catch
                        {
                            return null;
                        }

                        if ((int)serializingBinaryReader.ReadByte() != (int)byte.MaxValue || memoryStream.Position != (long)serializedTicketLength)
                            return null;
                        else
                            return new AuthenticationTicket(name, version, issueDateUtc, expirationUtc, user);
                    }
                }
            }
            catch
            {
                return null;
            }
        }