/// <summary>
        /// Retrieves the display name.
        /// </summary>
        /// <param name="user">The user.</param>
        /// <returns></returns>
        protected virtual string GetDisplayName(InMemoryUser user)
        {
            var nameClaim = user.Claims.FirstOrDefault(x => x.Type == Constants.ClaimTypes.Name);

            if (nameClaim != null)
            {
                return(nameClaim.Value);
            }

            return(user.Username);
        }
示例#2
0
 public  bool Add(InMemoryUser inMemoryUser)
 {
     var user = FindByUsername(inMemoryUser.Username);
     if (user == null)
     {
         _users.Add(inMemoryUser);
         return true;
     }
     else
     {
         return false;
     }
 }
示例#3
0
        private async Task IssueCookie(
            InMemoryUser user, 
            string idp,
            string amr)
        {
            var name = user.Claims.Where(x => x.Type == JwtClaimTypes.Name).Select(x => x.Value).FirstOrDefault() ?? user.Username;

            var claims = new Claim[] {
                        new Claim(JwtClaimTypes.Subject, user.Subject),
                        new Claim(JwtClaimTypes.Name, name),
                        new Claim(JwtClaimTypes.IdentityProvider, idp),
                        new Claim(JwtClaimTypes.AuthenticationTime, DateTime.UtcNow.ToEpochTime().ToString()),
                    };
            var ci = new ClaimsIdentity(claims, amr, JwtClaimTypes.Name, JwtClaimTypes.Role);
            var cp = new ClaimsPrincipal(ci);

            await HttpContext.Authentication.SignInAsync(Constants.PrimaryAuthenticationType, cp);
        }
        /// <summary>
        /// This method gets called when the user uses an external identity provider to authenticate.
        /// </summary>
        /// <param name="context">The context.</param>
        /// <returns></returns>
        public override Task AuthenticateExternalAsync(ExternalAuthenticationContext context)
        {
            var query =
                from u in _users
                where
                u.Provider == context.ExternalIdentity.Provider &&
                u.ProviderId == context.ExternalIdentity.ProviderId
                select u;

            var user = query.SingleOrDefault();

            if (user == null)
            {
                string displayName;

                var name = context.ExternalIdentity.Claims.FirstOrDefault(x => x.Type == Constants.ClaimTypes.Name);
                if (name == null)
                {
                    displayName = context.ExternalIdentity.ProviderId;
                }
                else
                {
                    displayName = name.Value;
                }

                user = new InMemoryUser
                {
                    Subject    = CryptoRandom.CreateUniqueId(),
                    Provider   = context.ExternalIdentity.Provider,
                    ProviderId = context.ExternalIdentity.ProviderId,
                    Username   = displayName,
                    Claims     = context.ExternalIdentity.Claims
                };
                _users.Add(user);
            }

            context.AuthenticateResult = new AuthenticateResult(user.Subject, GetDisplayName(user), identityProvider: context.ExternalIdentity.Provider);

            return(Task.FromResult(0));
        }
        /// <summary>
        /// This method gets called when the user uses an external identity provider to authenticate.
        /// </summary>
        /// <param name="context">The context.</param>
        /// <returns></returns>
        public override Task AuthenticateExternalAsync(ExternalAuthenticationContext context)
        {
            var query =
                from u in _users
                where
                    u.Provider == context.ExternalIdentity.Provider &&
                    u.ProviderId == context.ExternalIdentity.ProviderId
                select u;

            var user = query.SingleOrDefault();
            if (user == null)
            {
                string displayName;

                var name = context.ExternalIdentity.Claims.FirstOrDefault(x => x.Type == Constants.ClaimTypes.Name);
                if (name == null)
                {
                    displayName = context.ExternalIdentity.ProviderId;
                }
                else
                {
                    displayName = name.Value;
                }

                user = new InMemoryUser
                {
                    Subject = CryptoRandom.CreateUniqueId(),
                    Provider = context.ExternalIdentity.Provider,
                    ProviderId = context.ExternalIdentity.ProviderId,
                    Username = displayName,
                    Claims = context.ExternalIdentity.Claims
                };
                _users.Add(user);
            }

            context.AuthenticateResult = new AuthenticateResult(user.Subject, GetDisplayName(user), identityProvider:context.ExternalIdentity.Provider);
            
            return Task.FromResult(0);
        }
        /// <summary>
        /// Retrieves the display name.
        /// </summary>
        /// <param name="user">The user.</param>
        /// <returns></returns>
        protected virtual string GetDisplayName(InMemoryUser user)
        {
            var nameClaim = user.Claims.FirstOrDefault(x => x.Type == Constants.ClaimTypes.Name);
            if (nameClaim != null)
            {
                return nameClaim.Value;
            }

            return user.Username;
        }
示例#7
0
        public async Task<IActionResult> Register(SignUpModel model)
        {
            if (ModelState.IsValid)
            {
                var file = model.ImageUpload;
                var uploads = Path.Combine(_hostingEnvironment.WebRootPath, "Images");
                var filePathName = ContentDispositionHeaderValue.Parse(file.ContentDisposition).FileName.Trim('"');
                var fileExtention = Path.GetExtension(filePathName);
                var fileName = Guid.NewGuid().ToString("N").Substring(0, 6) + fileExtention;
                var path = Path.Combine(uploads, fileName);
                await file.SaveAsAsync(path);




                InMemoryUser inMemoryUser = new InMemoryUser()
                {
                    Username = model.Username,
                    Password = model.Password,
                    Subject = Guid.NewGuid().ToString("N").Substring(0, 6),
                    Claims = new[]
                    {
                        new Claim(JwtClaimTypes.Name, model.Name),
                        new Claim(JwtClaimTypes.GivenName, model.GivenName),
                        new Claim(JwtClaimTypes.FamilyName, model.FamilyName),
                        new Claim(JwtClaimTypes.BirthDate, model.BirthDate.Date.ToString(), ClaimValueTypes.Date),
                        new Claim(JwtClaimTypes.Email, model.Email),
                        new Claim(JwtClaimTypes.EmailVerified, model.EmailVerified.ToString(), ClaimValueTypes.Boolean),
                        new Claim(JwtClaimTypes.Address, model.Address, Constants.ClaimValueTypes.Json),
                        new Claim(JwtClaimTypes.PhoneNumber, model.PhoneNumber),
                        new Claim(JwtClaimTypes.PhoneNumberVerified, model.PhoneNumberVerified.ToString(), ClaimValueTypes.Boolean),
                        new Claim("AMKA", model.AMKA),
                        new Claim("AFM", model.AFM),
                        new Claim("AT", model.AT),
                        new Claim("Photo", "Images" + "@\fileName")
                    }
                };
                bool result = _signupService.Add(inMemoryUser);
                if (result)
                {
                    var name = inMemoryUser.Claims.Where(x => x.Type == JwtClaimTypes.Name).Select(x => x.Value).FirstOrDefault() ?? inMemoryUser.Username;
                    var phoneNumber = inMemoryUser.Claims.Where(x => x.Type == JwtClaimTypes.PhoneNumber).Select(x => x.Value).FirstOrDefault();
                    var claims = new Claim[] {
                        new Claim(JwtClaimTypes.Subject, inMemoryUser.Subject),
                        new Claim(JwtClaimTypes.PhoneNumber, phoneNumber),
                        new Claim(JwtClaimTypes.Name, name),
                        new Claim(JwtClaimTypes.IdentityProvider, "idsvr"),
                        new Claim(JwtClaimTypes.AuthenticationTime, DateTime.UtcNow.ToEpochTime().ToString()),
                    };
                    var ci = new ClaimsIdentity(claims, "password", JwtClaimTypes.Name, JwtClaimTypes.Role);
                    var cp = new ClaimsPrincipal(ci);

                    await HttpContext.Authentication.SignInAsync(Constants.PrimaryAuthenticationType, cp);
                    return RedirectToAction("SendCode");
                }
                else
                {
                    ModelState.AddModelError("", "Μη έγκυρο όνομα χρήστη ή κωδικός.");
                }
            }

            // If we got this far, something failed, redisplay form
            return View();
        }