Exemple #1
0
        public virtual void Write(BinaryWriter writer, AuthenticationTicket ticket)
        {
            if (writer == null)
            {
                throw new ArgumentNullException(nameof(writer));
            }

            if (ticket == null)
            {
                throw new ArgumentNullException(nameof(ticket));
            }

            writer.Write(FormatVersion);
            ///// 这里要和core的 AuthenticationScheme保持一致
            writer.Write(ticket.Identity.AuthenticationType);

            // Write the number of identities contained in the principal.
            //var principal = ticket.Principal;
            //writer.Write(principal.Identities.Count());
            writer.Write(1);

            //foreach (var identity in principal.Identities)
            //{
            WriteIdentity(writer, ticket.Identity);
            //}

            PropertiesSerializer.Write(writer, ticket.Properties);
        }
Exemple #2
0
        /// <summary>
        /// Reads a Twitter request token from a series of bytes. Used by the <see cref="Deserialize"/> method.
        /// </summary>
        /// <param name="reader">The reader to use in reading the token bytes</param>
        /// <returns>The token</returns>
        public static RequestToken Read(BinaryReader reader)
        {
            if (reader == null)
            {
                throw new ArgumentNullException("reader");
            }

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

            string token                        = reader.ReadString();
            string tokenSecret                  = reader.ReadString();
            bool   callbackConfirmed            = reader.ReadBoolean();
            AuthenticationProperties properties = PropertiesSerializer.Read(reader);

            if (properties == null)
            {
                return(null);
            }

            return(new RequestToken {
                Token = token, TokenSecret = tokenSecret, CallbackConfirmed = callbackConfirmed, Properties = properties
            });
        }
Exemple #3
0
        public virtual AuthenticationTicket Read(BinaryReader reader)
        {
            if (reader == null)
            {
                throw new ArgumentNullException(nameof(reader));
            }

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

            var scheme = reader.ReadString();

            // Read the number of identities stored
            // in the serialized payload.
            var count = reader.ReadInt32();

            if (count < 0)
            {
                return(null);
            }

            var identities = new ClaimsIdentity[count];

            for (var index = 0; index != count; ++index)
            {
                identities[index] = ReadIdentity(reader);
            }

            var properties = PropertiesSerializer.Read(reader);

            return(new AuthenticationTicket(identities[0], properties));
        }
Exemple #4
0
        public byte[] Serialize(AuthenticationTicket model)
        {
            using (var mstr = new MemoryStream())
            {
                using (var gzip = new GZipStream(mstr, CompressionLevel.Optimal))
                    using (var wtr = new BinaryWriter(gzip))
                    {
                        wtr.Write(Version);

                        var identity = model.Identity;

                        wtr.Write(identity.AuthenticationType);
                        WriteDefaultString(wtr, identity.NameClaimType, DefaultNameClaimType);
                        WriteDefaultString(wtr, identity.RoleClaimType, DefaultRoleClaimType);

                        wtr.Write(identity.Claims.Count());
                        foreach (var claim in identity.Claims)
                        {
                            WriteDefaultString(wtr, claim.Type, identity.NameClaimType);
                            wtr.Write(claim.Value);
                            WriteDefaultString(wtr, claim.ValueType, DefaultValueType);
                            WriteDefaultString(wtr, claim.Issuer, DefaultIssuer);
                            WriteDefaultString(wtr, claim.OriginalIssuer, claim.Issuer);
                        }

                        wtr.Write(0);

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

                // GZipStream must be closed before we can read the compressed bytes.
                return(mstr.ToArray());
            }
        }
        /// <summary>
        /// Reads a Yahoo request token from a series of bytes. Used by the <see cref="Deserialize"/> method.
        /// </summary>
        /// <param name="reader">The reader to use in reading the token bytes</param>
        /// <returns>The token</returns>
        public static RequestToken Read(BinaryReader reader)
        {
            if (reader == null)
            {
                throw new ArgumentNullException(nameof(reader));
            }

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

            var token             = reader.ReadString();
            var callbackConfirmed = reader.ReadBoolean();
            var properties        = PropertiesSerializer.Read(reader);

            if (properties == null)
            {
                return(null);
            }

            return(new RequestToken {
                Token = token, CallbackConfirmed = callbackConfirmed, Properties = properties
            });
        }
        public virtual AuthenticationTicket Read(BinaryReader reader)
        {
            EnsureNotNull(reader, nameof(reader));

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

            var scheme = reader.ReadString();

            // Read the number of identities stored
            // in the serialized payload.
            var count = reader.ReadInt32();

            if (count < 0)
            {
                return(null);
            }

            ClaimsIdentity identity = ReadIdentity(reader);

            var properties = PropertiesSerializer.Read(reader);

            return(new AuthenticationTicket(identity, properties));
        }
        public async Task <IHttpActionResult> GetExternalLogin(string provider, string error = null)
        {
            if (error != null)
            {
                return(Redirect(string.Format("{0}#error={1}", Url.Content("~/"), Uri.EscapeDataString(error))));
            }

            if (!User.Identity.IsAuthenticated)
            {
                return(new ChallengeResult(provider, this));
            }

            ExternalLoginData externalLogin = ExternalLoginData.FromIdentity(User.Identity as ClaimsIdentity);

            if (externalLogin == null)
            {
                return(InternalServerError());
            }

            if (externalLogin.LoginProvider != provider)
            {
                Authentication.SignOut(DefaultAuthenticationTypes.ExternalCookie);
                return(new ChallengeResult(provider, this));
            }

            ApplicationUser user = await UserManager.FindAsync(new UserLoginInfo(externalLogin.LoginProvider,
                                                                                 externalLogin.ProviderKey));

            bool hasRegistered = user != null;

            if (hasRegistered)
            {
                Authentication.SignOut(DefaultAuthenticationTypes.ExternalCookie);

                ClaimsIdentity oAuthIdentity = await user.GenerateUserIdentityAsync(UserManager,
                                                                                    OAuthDefaults.AuthenticationType);

                ClaimsIdentity cookieIdentity = await user.GenerateUserIdentityAsync(UserManager,
                                                                                     CookieAuthenticationDefaults.AuthenticationType);

                AuthenticationProperties properties = ApplicationOAuthProvider.CreateProperties(user.UserName);
                Authentication.SignIn(properties, oAuthIdentity, cookieIdentity);
            }
            else
            {
                //changed
                IEnumerable <Claim>      claims   = externalLogin.GetClaims();
                ClaimsIdentity           identity = new ClaimsIdentity(claims, OAuthDefaults.AuthenticationType);
                AuthenticationProperties p        = new AuthenticationProperties(new Dictionary <string, string>());
                PropertiesSerializer     s        = new PropertiesSerializer();
                Authentication.SignIn(identity);

                //IEnumerable<Claim> claims = externalLogin.GetClaims();
                //ClaimsIdentity identity = new ClaimsIdentity(claims, OAuthDefaults.AuthenticationType);
                //Authentication.SignIn(identity);
            }

            return(Ok());
        }
 /// <summary>
 /// Writes a Twitter request token as a series of bytes. Used by the <see cref="Serialize"/> method.
 /// </summary>
 /// <param name="writer">The writer to use in writing the token</param>
 /// <param name="token">The token to write</param>
 public static void Write([NotNull] BinaryWriter writer, [NotNull] RequestToken token)
 {
     writer.Write(FormatVersion);
     writer.Write(token.Token);
     writer.Write(token.TokenSecret);
     writer.Write(token.CallbackConfirmed);
     PropertiesSerializer.Write(writer, token.Properties);
 }
        /// <summary>
        /// Writes a Yahoo request token as a series of bytes. Used by the <see cref="Serialize"/> method.
        /// </summary>
        /// <param name="writer">The writer to use in writing the token</param>
        /// <param name="token">The token to write</param>
        public static void Write(BinaryWriter writer, RequestToken token)
        {
            if (writer == null)
            {
                throw new ArgumentNullException(nameof(writer));
            }
            if (token == null)
            {
                throw new ArgumentNullException(nameof(token));
            }

            writer.Write(FormatVersion);
            writer.Write(token.Token);
            writer.Write(token.CallbackConfirmed);
            PropertiesSerializer.Write(writer, token.Properties);
        }
        public OptimizedTicketSerializer(PropertiesSerializer propertiesSerializer, ILoggerFactory loggerFactory)
        {
            if (loggerFactory == null)
            {
                throw new ArgumentNullException(nameof(loggerFactory));
            }
            this.log = loggerFactory.CreateLogger <OptimizedTicketSerializer>();

            if (propertiesSerializer == null)
            {
                this.propertiesSerializer = this.optimizeBase64Strings ? OptimizedPropertiesSerializer.Default : PropertiesSerializer.Default;
            }
            else
            {
                this.propertiesSerializer = propertiesSerializer;
            }
        }
        public virtual void Write(BinaryWriter writer, AuthenticationTicket ticket)
        {
            writer.Write(FormatVersion);
            writer.Write(ticket.Identity.AuthenticationType);

            var identity = ticket.Identity;

            if (identity == null)
            {
                throw new ArgumentNullException("ticket.Identity");
            }

            // There is always a single identity
            writer.Write(1);
            WriteIdentity(writer, identity);
            PropertiesSerializer.Write(writer, ticket.Properties);
        }
Exemple #12
0
                public byte[] Serialize(AuthenticationTicket model)
                {
                    using (var memory = new MemoryStream())
                        using (var writer = new BinaryWriter(memory)) {
                            writer.Write(FormatVersion);

                            writer.Write(model.AuthenticationScheme);
                            writer.Write(model.Principal.Identities.Count());

                            foreach (var identity in model.Principal.Identities)
                            {
                                WriteIdentity(writer, identity);
                            }

                            PropertiesSerializer.Write(writer, model.Properties);

                            return(memory.ToArray());
                        }
                }
Exemple #13
0
        public AuthenticationTicket Deserialize(byte[] data)
        {
            using (var mstr = new MemoryStream(data))
                using (var gzip = new GZipStream(mstr, CompressionMode.Decompress))
                    using (var rdr = new BinaryReader(gzip))
                    {
                        var version = rdr.ReadInt32();
                        if (version != Version)
                        {
                            return(null);
                        }

                        var authenticationType = rdr.ReadString();
                        var nameClaimType      = ReadDefaultString(rdr, DefaultNameClaimType);
                        var roleClaimType      = ReadDefaultString(rdr, DefaultRoleClaimType);

                        var identity = new ClaimsIdentity(authenticationType, nameClaimType, roleClaimType);

                        var claimCount = rdr.ReadInt32();
                        for (int i = 0; i < claimCount; i++)
                        {
                            var type           = ReadDefaultString(rdr, nameClaimType);
                            var value          = rdr.ReadString();
                            var valueType      = ReadDefaultString(rdr, DefaultValueType);
                            var issuer         = ReadDefaultString(rdr, DefaultIssuer);
                            var originalIssuer = ReadDefaultString(rdr, issuer);

                            identity.AddClaim(new Claim(type, value, valueType, issuer, originalIssuer));
                        }

                        var bootstrapLength = rdr.ReadInt32();
                        if (bootstrapLength != 0)
                        {
                            return(null);
                        }

                        var properties = PropertiesSerializer.Read(rdr);

                        return(new AuthenticationTicket(identity, properties));
                    }
        }
        public virtual AuthenticationTicket Read(BinaryReader reader)
        {
            if (reader.ReadInt32() != FormatVersion)
            {
                return(null);
            }

            var scheme = reader.ReadString();

            // Any identities after the first will be ignored.
            var count = reader.ReadInt32();

            if (count < 0)
            {
                return(null);
            }

            var identity   = ReadIdentity(reader);
            var properties = PropertiesSerializer.Read(reader);

            return(new AuthenticationTicket(identity, properties));
        }
Exemple #15
0
                public AuthenticationTicket Deserialize(byte[] data)
                {
                    using (var memory = new MemoryStream(data))
                        using (var reader = new BinaryReader(memory)) {
                            if (reader.ReadInt32() != FormatVersion)
                            {
                                return(null);
                            }

                            var scheme = reader.ReadString();

                            var identities = new ClaimsIdentity[reader.ReadInt32()];
                            for (int index = 0; index != identities.Length; ++index)
                            {
                                identities[index] = ReadIdentity(reader);
                            }

                            var properties = PropertiesSerializer.Read(reader);

                            return(new AuthenticationTicket(new ClaimsPrincipal(identities), properties, scheme));
                        }
                }
        public virtual void Write(BinaryWriter writer, AuthenticationTicket ticket)
        {
            EnsureNotNull(writer, nameof(writer));

            EnsureNotNull(ticket, nameof(ticket));

            writer.Write(FormatVersion);

            writer.Write(ticket.Identity.AuthenticationType);

            var identity = ticket.Identity;

            if (identity == null)
            {
                throw new ArgumentNullException(nameof(ticket.Identity));
            }

            // Only 1 identity possible.
            writer.Write(1);

            WriteIdentity(writer, identity);

            PropertiesSerializer.Write(writer, ticket.Properties);
        }
        public async Task<IHttpActionResult> GetExternalLogin(string provider, string error = null)
        {
            if (error != null)
            {
                return Redirect(string.Format("{0}#error={1}", Url.Content("~/"), Uri.EscapeDataString(error)));
            }

            if (!User.Identity.IsAuthenticated)
            {
                return new ChallengeResult(provider, this);
            }

            ExternalLoginData externalLogin = ExternalLoginData.FromIdentity(User.Identity as ClaimsIdentity);

            if (externalLogin == null)
            {
                return InternalServerError();
            }

            if (externalLogin.LoginProvider != provider)
            {
                Authentication.SignOut(DefaultAuthenticationTypes.ExternalCookie);
                return new ChallengeResult(provider, this);
            }

            ApplicationUser user = await UserManager.FindAsync(new UserLoginInfo(externalLogin.LoginProvider,
                externalLogin.ProviderKey));

            bool hasRegistered = user != null;

            if (hasRegistered)
            {
                Authentication.SignOut(DefaultAuthenticationTypes.ExternalCookie);
                
                 ClaimsIdentity oAuthIdentity = await user.GenerateUserIdentityAsync(UserManager,
                    OAuthDefaults.AuthenticationType);
                ClaimsIdentity cookieIdentity = await user.GenerateUserIdentityAsync(UserManager,
                    CookieAuthenticationDefaults.AuthenticationType);

                AuthenticationProperties properties = ApplicationOAuthProvider.CreateProperties(user.UserName);
                Authentication.SignIn(properties, oAuthIdentity, cookieIdentity);
            }
            else
            {
                //changed
                IEnumerable<Claim> claims = externalLogin.GetClaims();
                ClaimsIdentity identity = new ClaimsIdentity(claims, OAuthDefaults.AuthenticationType);
                AuthenticationProperties p = new AuthenticationProperties(new Dictionary<string, string>());
                PropertiesSerializer s = new PropertiesSerializer();
                Authentication.SignIn(identity);

                //IEnumerable<Claim> claims = externalLogin.GetClaims();
                //ClaimsIdentity identity = new ClaimsIdentity(claims, OAuthDefaults.AuthenticationType);
                //Authentication.SignIn(identity);
            }

            return Ok();
        }
Exemple #18
0
 private string Select(SelectExpression exp) => $"SELECT {PropertiesSerializer.ColumnsSub(exp.Selector.ReturnType,Secondary.Serialize(exp.Selector.Body))} FROM ({Serialize(exp.Sub)}) AS this";
Exemple #19
0
 private static string Union(UnionExpression exp) => $"SELECT {PropertiesSerializer.ColumnsUnion(exp.EntityType,"this")} FROM [{exp.EntityType.Name}] AS this {PropertiesSerializer.LeftJoinsUnion(exp.EntityType,"this")}";
 static DataSerializers()
 {
     Properties = new PropertiesSerializer();
     Ticket = new TicketSerializer();
 }
Exemple #21
0
 static DataSerializers()
 {
     Properties = new PropertiesSerializer();
     Ticket     = new TicketSerializer();
 }