public static void Write([NotNull] BinaryWriter writer, [NotNull] AuthenticationTicket model) { writer.Write(FormatVersion); writer.Write(model.AuthenticationScheme); var principal = model.Principal; writer.Write(principal.Identities.Count()); foreach (var identity in principal.Identities) { var authenticationType = string.IsNullOrWhiteSpace(identity.AuthenticationType) ? string.Empty : identity.AuthenticationType; writer.Write(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); }
public static AuthenticationTicket Read([NotNull] BinaryReader reader) { if (reader.ReadInt32() != FormatVersion) { return(null); } string authenticationScheme = reader.ReadString(); int identityCount = reader.ReadInt32(); var identities = new ClaimsIdentity[identityCount]; for (int i = 0; i != identityCount; ++i) { 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); } identities[i] = new ClaimsIdentity(claims, authenticationType, nameClaimType, roleClaimType); } var properties = PropertiesSerializer.Read(reader); return(new AuthenticationTicket(new ClaimsPrincipal(identities), properties, authenticationScheme)); }
static DataSerializers() { Properties = new PropertiesSerializer(); Ticket = new TicketSerializer(); }