public static AuthenticationTicket Read(BinaryReader reader)
        {
            if (reader == null)
            {
                throw new ArgumentNullException("reader");
            }

            if (reader.ReadInt32() != FormatVersion)
            {
                return(null);
            }

            string authenticationType = reader.ReadString();
            string nameClaimType      = ReadWithDefault(reader, DefaultValues.NameClaimType);
            string roleClaimType      = ReadWithDefault(reader, DefaultValues.RoleClaimType);
            int    count  = reader.ReadInt32();
            var    claims = new Claim[count];

            for (int index = 0; index != count; ++index)
            {
                string type           = ReadWithDefault(reader, nameClaimType);
                string value          = reader.ReadString();
                string valueType      = ReadWithDefault(reader, DefaultValues.StringValueType);
                string issuer         = ReadWithDefault(reader, DefaultValues.LocalAuthority);
                string originalIssuer = ReadWithDefault(reader, issuer);
                claims[index] = new Claim(type, value, valueType, issuer, originalIssuer);
            }
            var identity = new ClaimsIdentity(claims, authenticationType, nameClaimType, roleClaimType);
            AuthenticationProperties properties = PropertiesSerializer.Read(reader);

            return(new AuthenticationTicket(identity, properties));
        }
        public static void Write(BinaryWriter writer, AuthenticationTicket model)
        {
            if (writer == null)
            {
                throw new ArgumentNullException("writer");
            }
            if (model == null)
            {
                throw new ArgumentNullException("model");
            }

            writer.Write(FormatVersion);
            ClaimsIdentity identity = model.Identity;

            writer.Write(identity.AuthenticationType);
            WriteWithDefault(writer, identity.NameClaimType, DefaultValues.NameClaimType);
            WriteWithDefault(writer, identity.RoleClaimType, DefaultValues.RoleClaimType);
            writer.Write(identity.Claims.Count());
            foreach (var claim in identity.Claims)
            {
                WriteWithDefault(writer, claim.Type, identity.NameClaimType);
                writer.Write(claim.Value);
                WriteWithDefault(writer, claim.ValueType, DefaultValues.StringValueType);
                WriteWithDefault(writer, claim.Issuer, DefaultValues.LocalAuthority);
                WriteWithDefault(writer, claim.OriginalIssuer, claim.Issuer);
            }
            PropertiesSerializer.Write(writer, model.Properties);
        }
Beispiel #3
0
        public static void Write(BinaryWriter writer, AuthenticationTicket model)
        {
            if (writer == null)
            {
                throw new ArgumentNullException("writer");
            }
            if (model == null)
            {
                throw new ArgumentNullException("model");
            }

            writer.Write(FormatVersion);
            ClaimsIdentity identity = model.Identity;

            writer.Write(identity.AuthenticationType);
            WriteWithDefault(writer, identity.NameClaimType, DefaultValues.NameClaimType);
            WriteWithDefault(writer, identity.RoleClaimType, DefaultValues.RoleClaimType);
            writer.Write(identity.Claims.Count());
            foreach (var claim in identity.Claims)
            {
                WriteWithDefault(writer, claim.Type, identity.NameClaimType);
                writer.Write(claim.Value);
                WriteWithDefault(writer, claim.ValueType, DefaultValues.StringValueType);
                WriteWithDefault(writer, claim.Issuer, DefaultValues.LocalAuthority);
                WriteWithDefault(writer, claim.OriginalIssuer, claim.Issuer);
            }

            //TODO REVIEW

            /*
             * BootstrapContext bc = identity.BootstrapContext as BootstrapContext;
             * if (bc == null || string.IsNullOrWhiteSpace(bc.Token))
             * {
             *  writer.Write(0);
             * }
             * else
             * {
             *  writer.Write(bc.Token.Length);
             *  writer.Write(bc.Token);
             * }
             */

            PropertiesSerializer.Write(writer, model.Properties);
        }