Пример #1
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);
        }
Пример #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);
        }
Пример #4
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));
        }
Пример #5
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);
        }
Пример #6
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();
        }