Example #1
0
        /// <summary>
        /// create token using claim
        /// </summary>
        /// <param name="identityUser"></param>
        /// <returns></returns>
        private async Task <IActionResult> CreateTokenWithClaim(IdentityUserModel identityUser)
        {
            TokenModel tokenModel = await _tokenProvider.ValidateAndCreateToken(identityUser);

            serverCache.ClearAll(identityUser.UserId);
            return(GetTokenResponse(tokenModel));
        }
Example #2
0
        public async Task <IHttpActionResult> Register(IdentityUserModel userModel)
        {
            /*
             * body:
             *  {
             *          "userName": "******",
             *          "password": "******",
             *          "companyId": 1,
             *          "firstName": "Aviran",
             *          "lastName": "Ohana",
             *          "email": "*****@*****.**",
             *          "phone": "0501234567"
             *  }
             */
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            IdentityResult result = await _repo.RegisterUser(userModel);

            IHttpActionResult errorResult = GetErrorResult(result);

            if (errorResult != null)
            {
                return(errorResult);
            }

            return(Ok());
        }
Example #3
0
        public async Task <Object> PostUser(User model)
        {
            var identity = new IdentityUserModel()
            {
                UserName = model.username,
                name     = model.name,
                lastname = model.lastname
            };

            try
            {
                var result = await _userManager.CreateAsync(identity, model.passcode);

                if (result != null)
                {
                    try
                    {
                        _context.User.Add(model);
                        await _context.SaveChangesAsync();
                    }
                    catch (Exception e)
                    {
                        return(StatusCode(500, e));
                    }

                    return(CreatedAtAction("GetUser", new { id = model.userId }, model));
                }

                return(BadRequest(new { message = result }));
            }
            catch (Exception ex)
            {
                return(BadRequest(new { message = ex }));
            }
        }
Example #4
0
        public async Task <ActionResult> Register(RegisterViewModel model)
        {
            if (ModelState.IsValid)
            {
                var user = new IdentityUserModel {
                    UserName = model.Email, Email = model.Email, FirtsName = model.FirtsName, LastName = model.LastName, BirthDay = DateTime.Now
                };
                var result = await UserManager.CreateAsync(user, model.Password);

                if (result.Succeeded)
                {
                    UserManager.AddToRoles(user.Id, new string[] { roleName(model.roleId) });

                    return(RedirectToAction("Index", "Home"));
                }
                AddErrors(result);
            }

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

            string roleName(string id)
            {
                if (RoleViewModel.Estudiante.RoleID.Equals(id))
                {
                    return(RoleViewModel.Estudiante.Name);
                }
                return(RoleViewModel.Profesor.Name);
            }
        }
Example #5
0
        private async Task <object> generateJwtToken(string email, IdentityUserModel user)
        {
            var roles = await userManager.GetRolesAsync(user);

            var claims = new List <Claim>
            {
                new Claim(JwtRegisteredClaimNames.Sub, email),
                new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()),
                new Claim(ClaimTypes.NameIdentifier, user.Id),
                new Claim(ClaimTypes.Role, roles[0])
            };
            var key     = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(configuration["JwtKey"]));
            var creds   = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
            var expires = DateTime.UtcNow.AddHours(Convert.ToDouble(configuration["JwtExpireHours"]));
            var token   = new JwtSecurityToken(configuration["JwtIssuer"],
                                               configuration["JwtAudience"],
                                               claims,
                                               expires: expires,
                                               signingCredentials: creds
                                               );
            var response = new
            {
                auth_token = new JwtSecurityTokenHandler().WriteToken(token),
                success    = true
            };

            return(Ok(response));
        }
Example #6
0
 /// <summary>
 /// validate credential using identity model
 /// </summary>
 /// <param name="identityUser"></param>
 /// <returns></returns>
 private bool ValidateCredentils(IdentityUserModel identityUser)
 {
     if (identityUser == null)
     {
         this.ErrorMessage = "You are not authorized to use the application";
         return(false);
     }
     return(ValidateCredentils(identityUser.UserName, identityUser.Password));
 }
 private static void ValidateUser(IdentityUserModel user)
 {
     if (user.Id == Guid.Empty ||
         string.IsNullOrEmpty(user.Email) ||
         string.IsNullOrEmpty(user.UserName) ||
         !user.Roles.Any())
     {
         throw new UnauthorizedException("Can't get required users field. Token isn't valid");
     }
 }
        public IActionResult GetIdentity()
        {
            var user = new IdentityUserModel()
            {
                IsSignedIn = User.Identity.IsAuthenticated,
                Name       = User.Identity.Name
            };

            return(Json(user));
        }
Example #9
0
        //would like to convert from RestSharp to http client. currently having issues with http client method in testing
        public static void EditUser(string userId, IdentityUserModel user)
        {
            var client = new RestClient("https://localhost:44342/api/User/" + userId);

            client.Timeout = -1;
            var request = new RestRequest(Method.PATCH);

            request.AddHeader("Content-Type", "application/json");
            request.AddParameter("application/json", $"{{\r\n  \"firstName\": \"{user.FirstName}\",\r\n  \"lastName\": \"{user.LastName}\",\r\n  \"email\": \"{user.Email}\",\r\n  \"contactNumber\": \"{user.PhoneNumber}\",\r\n  \"resourceGroup\": \"{user.ResourceGroup}\",\r\n  \"profilePicture\": \"{user.ProfilePicture}\"\r\n}}", ParameterType.RequestBody);
            IRestResponse response = client.Execute(request);
        }
Example #10
0
        /// <summary>
        /// create claim using identity
        /// </summary>
        /// <param name="identityUser"></param>
        /// <param name="identity"></param>
        /// <returns></returns>
        private async Task <List <Claim> > CreateClaim(IdentityUserModel identityUser, ClaimsIdentity identity)
        {
            List <Claim> claims = new List <Claim>()
            {
                new Claim(JwtRegisteredClaimNames.UniqueName, identityUser.UserName),
                new Claim("clientId", GenerateClientId(IPAddress)),
                new Claim(JwtRegisteredClaimNames.Jti, await _jwtOptions.JtiGenerator()),
                new Claim(JwtRegisteredClaimNames.Iat, ToUnixEpochDate(_jwtOptions.IssuedAt).ToString(),
                          ClaimValueTypes.Integer64)
            };

            claims.Add(new Claim(JwtRegisteredClaimNames.Sub, identityUser.UserId.ToString()));

            return(claims);
        }
Example #11
0
        protected override void Seed(ApplicationDbContext context)
        {
            //  This method will be called after migrating to the latest version.

            //  You can use the DbSet<T>.AddOrUpdate() helper extension method
            //  to avoid creating duplicate seed data. E.g.
            //
            var manager     = new UserManager <IdentityUserModel>(new UserStore <IdentityUserModel>(new ApplicationDbContext()));
            var roleManager = new RoleManager <IdentityRole>(new RoleStore <IdentityRole>(new ApplicationDbContext()));


            if (roleManager.Roles.Count() == 0)
            {
                roleManager.Create(new IdentityRole {
                    Id = "14884395-3206-4234-a38a-2f0f4f0d704b", Name = "Profesor"
                });
                roleManager.Create(new IdentityRole {
                    Id = "43c53a51-c8df-46cb-a61b-5cffe6c15612", Name = "Estudiante"
                });
                roleManager.Create(new IdentityRole {
                    Id = "f713010c-69f6-4867-91c5-581b665c7d3b", Name = "Administrador"
                });
            }

            if (manager.Users.Count() == 0)

            {
                var user = new IdentityUserModel
                {
                    Id             = "BC1E7CCB-2AA1-4A29-B653-3E247EDF022B",
                    UserName       = "******",
                    Email          = "*****@*****.**",
                    EmailConfirmed = true,
                    BirthDay       = DateTime.Now,
                    FirtsName      = "Andres",
                    LastName       = "Roa"
                };
                manager.Create(user, "Admin308/*");
                var adminUser = manager.FindByName("admin");


                manager.AddToRoles(adminUser.Id, new string[] { "Administrador" });
            }



            //
        }
Example #12
0
        /// <summary>
        /// Validate the user whether it is valid or not and build the claims based on that.
        /// </summary>
        private Task <ClaimsIdentity> GetClaimsIdentity(IdentityUserModel identityUser)
        {
            string userName = identityUser.UserName;
            string password = identityUser.Password;

            identityUser.UserId = (_securityReadManagement.ValidateUserCredential(userName, password) ?? 0);
            if (identityUser.UserId > 0)
            {
                // get roles to create the claim
                return(Task.FromResult(new ClaimsIdentity(new GenericIdentity(identityUser.UserName, "Token"),
                                                          new Claim[] { })));
            }

            // Credentials are invalid, or account doesn't exist or there is no permission
            this.ErrorMessage = "You are not authorized to use the application";
            return(Task.FromResult <ClaimsIdentity>(null));
        }
        public static IdentityUserModel GetUser(this IIdentity identity)
        {
            ClaimsIdentity claimsIdentity = identity as ClaimsIdentity;

            Guid.TryParse(claimsIdentity?.FindFirst(JwtClaimTypeConstants.UserId)?.Value, out Guid userId);
            var user = new IdentityUserModel
            {
                Id        = userId,
                Email     = claimsIdentity?.FindFirst(ClaimTypes.Email)?.Value,
                UserName  = claimsIdentity?.FindFirst(ClaimTypes.Name)?.Value,
                FirstName = claimsIdentity?.FindFirst(ClaimTypes.GivenName)?.Value,
                LastName  = claimsIdentity?.FindFirst(ClaimTypes.Surname)?.Value,
                Roles     = claimsIdentity?.FindAll(ClaimTypes.Role).Select(x => x?.Value).ToList()
            };

            ValidateUser(user);

            return(user);
        }
Example #14
0
        /// <summary>
        /// create claim using identity model
        /// </summary>
        /// <param name="identityUser"></param>
        /// <param name="identity"></param>
        /// <returns></returns>
        public async Task <TokenModel> CreateTokenWithClaim(IdentityUserModel identityUser, ClaimsIdentity identity)
        {
            // Create claims
            List <Claim> claims = await CreateClaim(identityUser, identity);

            // Create the JWT security token and encode it.
            var jwt = CreateToken(claims);
            // encode the token
            var encodedJwt = new JwtSecurityTokenHandler().WriteToken(jwt);

            // return the response
            var tokenResponse = new TokenModel
            {
                AccessToken = encodedJwt,
                ExpiresIn   = (int)_jwtOptions.ValidFor.TotalSeconds
            };

            return(tokenResponse);
        }
Example #15
0
        /// <summary>
        /// validate the credential and create token
        /// </summary>
        /// <param name="identityUser"></param>
        /// <returns></returns>
        public async Task <TokenModel> ValidateAndCreateToken(IdentityUserModel identityUser)
        {
            IPAddress = identityUser.IPAddress;
            if (!ValidateCredentils(identityUser))
            {
                return(new TokenModel {
                    ErrorMessage = ErrorMessage
                });
            }

            var identity = await GetClaimsIdentity(identityUser);

            if (identity == null)
            {
                return(new TokenModel {
                    ErrorMessage = ErrorMessage
                });
            }

            return(await CreateTokenWithClaim(identityUser, identity));
        }
Example #16
0
        public async Task <ActionResult> ExternalLoginConfirmation(ExternalLoginConfirmationViewModel model, string returnUrl)
        {
            if (User.Identity.IsAuthenticated)
            {
                return(RedirectToAction("Index", "Manage"));
            }

            if (ModelState.IsValid)
            {
                // Get the information about the user from the external login provider
                var info = await AuthenticationManager.GetExternalLoginInfoAsync();

                if (info == null)
                {
                    return(View("ExternalLoginFailure"));
                }
                var user = new IdentityUserModel {
                    UserName = model.Email, Email = model.Email
                };
                var result = await UserManager.CreateAsync(user);

                if (result.Succeeded)
                {
                    result = await UserManager.AddLoginAsync(user.Id, info.Login);

                    if (result.Succeeded)
                    {
                        await SignInManager.SignInAsync(user, isPersistent : false, rememberBrowser : false);

                        return(RedirectToLocal(returnUrl));
                    }
                }
                AddErrors(result);
            }

            ViewBag.ReturnUrl = returnUrl;
            return(View(model));
        }
Example #17
0
 public async Task <IActionResult> GetToken([FromBody] IdentityUserModel identityUser)
 {
     identityUser.IPAddress = IPAddress;
     return(await CreateTokenWithClaim(identityUser));
 }