//------------------------------------------------------------------------------ // // Copyright (c) Microsoft Corporation. All rights reserved. // //------------------------------------------------------------------------------ /* * FormsIdentity * * Copyright (c) 1999 Microsoft Corporation */ namespace System.Web.Security { using System.Collections.Generic; using System.Runtime.InteropServices; using System.Runtime.Serialization; using System.Security; using System.Security.Claims; using System.Security.Permissions; /// /// This class is an IIdentity derived class /// used by FormsAuthenticationModule. It provides a way for an application to /// access the cookie authentication ticket. /// [Serializable] [ComVisible(false)] public class FormsIdentity : ClaimsIdentity { /// /// The name of the identity (in this case, the /// passport user name). /// public override String Name { get { return _Ticket.Name;}} /// /// The type of the identity (in this case, /// "Forms"). /// public override String AuthenticationType { get { return "Forms";}} /// /// Indicates whether or not authentication took /// place. /// public override bool IsAuthenticated { get { return true;}} private FormsAuthenticationTicket _Ticket; /// /// Returns the FormsAuthenticationTicket /// associated with the current request. /// public FormsAuthenticationTicket Ticket { get { return _Ticket;}} public override IEnumerable Claims { get { return base.Claims; } } /// /// Constructor. /// public FormsIdentity (FormsAuthenticationTicket ticket) { if (ticket == null) throw new ArgumentNullException("ticket"); _Ticket = ticket; AddNameClaim(); } /// /// Constructor. /// protected FormsIdentity(FormsIdentity identity) : base(identity) { _Ticket = identity._Ticket; } /// /// Returns a new instance of with values copied from this object. /// public override ClaimsIdentity Clone() { return new FormsIdentity(this); } [OnDeserialized()] private void OnDeserializedMethod(StreamingContext context) { // FormIdentities that have been deserialized from a .net 4.0 runtime, will not have any claims. // In this case add a name claim, otherwise assume it was deserialized. bool claimFound = false; foreach (Claim c in base.Claims) { claimFound = true; break; } if (!claimFound) { AddNameClaim(); } } [SecuritySafeCritical] private void AddNameClaim() { if (_Ticket != null && _Ticket.Name != null) { base.AddClaim(new Claim(base.NameClaimType, _Ticket.Name, ClaimValueTypes.String, "Forms", "Forms", this)); } } } }