#58 Serialize the ClaimsIdentity.BootstrapContext.
This commit is contained in:
parent
dda67b9d7c
commit
d2701f4897
|
|
@ -11,7 +11,7 @@ namespace Microsoft.AspNet.Authentication
|
||||||
{
|
{
|
||||||
public class TicketSerializer : IDataSerializer<AuthenticationTicket>
|
public class TicketSerializer : IDataSerializer<AuthenticationTicket>
|
||||||
{
|
{
|
||||||
private const int FormatVersion = 3;
|
private const int FormatVersion = 4;
|
||||||
|
|
||||||
public virtual byte[] Serialize(AuthenticationTicket model)
|
public virtual byte[] Serialize(AuthenticationTicket model)
|
||||||
{
|
{
|
||||||
|
|
@ -63,6 +63,17 @@ namespace Microsoft.AspNet.Authentication
|
||||||
WriteWithDefault(writer, claim.Issuer, DefaultValues.LocalAuthority);
|
WriteWithDefault(writer, claim.Issuer, DefaultValues.LocalAuthority);
|
||||||
WriteWithDefault(writer, claim.OriginalIssuer, claim.Issuer);
|
WriteWithDefault(writer, claim.OriginalIssuer, claim.Issuer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var bootstrap = identity.BootstrapContext as string;
|
||||||
|
if (string.IsNullOrEmpty(bootstrap))
|
||||||
|
{
|
||||||
|
writer.Write(0);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
writer.Write(bootstrap.Length);
|
||||||
|
writer.Write(bootstrap);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
PropertiesSerializer.Write(writer, model.Properties);
|
PropertiesSerializer.Write(writer, model.Properties);
|
||||||
|
|
@ -99,7 +110,13 @@ namespace Microsoft.AspNet.Authentication
|
||||||
var originalIssuer = ReadWithDefault(reader, issuer);
|
var originalIssuer = ReadWithDefault(reader, issuer);
|
||||||
claims[index] = new Claim(type, value, valueType, issuer, originalIssuer);
|
claims[index] = new Claim(type, value, valueType, issuer, originalIssuer);
|
||||||
}
|
}
|
||||||
identities[i] = new ClaimsIdentity(claims, authenticationType, nameClaimType, roleClaimType);
|
var identity = new ClaimsIdentity(claims, authenticationType, nameClaimType, roleClaimType);
|
||||||
|
var bootstrapContextSize = reader.ReadInt32();
|
||||||
|
if (bootstrapContextSize > 0)
|
||||||
|
{
|
||||||
|
identity.BootstrapContext = reader.ReadString();
|
||||||
|
}
|
||||||
|
identities[i] = identity;
|
||||||
}
|
}
|
||||||
|
|
||||||
var properties = PropertiesSerializer.Read(reader);
|
var properties = PropertiesSerializer.Read(reader);
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,6 @@ using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Security.Claims;
|
using System.Security.Claims;
|
||||||
using Microsoft.AspNet.Http.Authentication;
|
using Microsoft.AspNet.Http.Authentication;
|
||||||
using Shouldly;
|
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
namespace Microsoft.AspNet.Authentication
|
namespace Microsoft.AspNet.Authentication
|
||||||
|
|
@ -42,9 +41,30 @@ namespace Microsoft.AspNet.Authentication
|
||||||
TicketSerializer.Write(writer, ticket);
|
TicketSerializer.Write(writer, ticket);
|
||||||
stream.Position = 0;
|
stream.Position = 0;
|
||||||
var readTicket = TicketSerializer.Read(reader);
|
var readTicket = TicketSerializer.Read(reader);
|
||||||
readTicket.Principal.Identities.Count().ShouldBe(0);
|
Assert.Equal(0, readTicket.Principal.Identities.Count());
|
||||||
readTicket.Properties.RedirectUri.ShouldBe("bye");
|
Assert.Equal("bye", readTicket.Properties.RedirectUri);
|
||||||
readTicket.AuthenticationScheme.ShouldBe("Hello");
|
Assert.Equal("Hello", readTicket.AuthenticationScheme);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void CanRoundTripBootstrapContext()
|
||||||
|
{
|
||||||
|
var properties = new AuthenticationProperties();
|
||||||
|
properties.RedirectUri = "bye";
|
||||||
|
var ticket = new AuthenticationTicket(new ClaimsPrincipal(), properties, "Hello");
|
||||||
|
ticket.Principal.AddIdentity(new ClaimsIdentity("misc") { BootstrapContext = "bootstrap" });
|
||||||
|
|
||||||
|
using (var stream = new MemoryStream())
|
||||||
|
using (var writer = new BinaryWriter(stream))
|
||||||
|
using (var reader = new BinaryReader(stream))
|
||||||
|
{
|
||||||
|
TicketSerializer.Write(writer, ticket);
|
||||||
|
stream.Position = 0;
|
||||||
|
var readTicket = TicketSerializer.Read(reader);
|
||||||
|
Assert.Equal(1, readTicket.Principal.Identities.Count());
|
||||||
|
Assert.Equal("misc", readTicket.Principal.Identity.AuthenticationType);
|
||||||
|
Assert.Equal("bootstrap", readTicket.Principal.Identities.First().BootstrapContext);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue