public async Task <IActionResult> RequestAccessTokenAsync(string Email, string RefreshToken) { string refreshToken = null; if (distributedCache.TryGetValue(Email, out refreshToken) == false) { return(BadRequest("해당 Refresh Token은 존재하지 않거나 만료되었습니다. 새로 로그인하시기 바랍니다")); } if (JasonWebTokenManager.ValidateRefreshToken(Email, RefreshToken) && refreshToken == RefreshToken) { var accountUser = await _userManager.FindByEmailAsync(Email); string token = await GenerateAccessTokenAsync(accountUser); return(Ok(new { AccessToken = token })); } else { return(BadRequest("해당 Refresh Token은 유효한 Token이 아닙니다. ")); } }
//[HttpPost, Route("login"), AllowAnonymous] ////public async Task<IActionResult> Login([FromBody]JObject jo) //public async Task<IActionResult> Login() //{ // Console.WriteLine("call login~. No Parameter"); // //foreach (string key in Response.Headers.Keys) // //{ // // Console.WriteLine($"{key} : {Response.Headers[key]}"); // //} // //Response.Cookies.Append("babo", "you~"); // //if (jo == null) // // return NoContent(); // //return await ClaimsLogin(jo); // return Ok(); //} //private async Task<IActionResult> ClaimsLogin([FromBody]JObject jo) //{ // bool isUservalid = false; // LoginViewModel user = JsonConvert.DeserializeObject<LoginViewModel>(jo.ToString()); // if (ModelState.IsValid && isUservalid) // { // var claims = new List<Claim>(); // claims.Add(new Claim(ClaimTypes.Name, user.Email)); // var identity = new ClaimsIdentity( // claims, JwtBearerDefaults.AuthenticationScheme); // var principal = new ClaimsPrincipal(identity); // var props = new AuthenticationProperties(); // props.IsPersistent = user.RememberMe; // HttpContext.SignInAsync( // IdentityConstants.ApplicationScheme, // principal, props).Wait(); // string token = JasonWebTokenManager.GenerateToken(user.Email); // return Ok(new { Token = token }); // } // else // { // return BadRequest(); // } //} private async Task <IActionResult> OldLogin([FromBody] LoginModel user) { //[FromBody] //JObject jo = null; if (ModelState.IsValid) { if (string.IsNullOrEmpty(user.Email) || string.IsNullOrEmpty(user.Password)) { Console.WriteLine("Invalid User"); return(BadRequest()); } UserAccountEF account = await _userManager.FindByEmailAsync(user.Email); if (account == null) { IdentityError error = (_userManager.ErrorDescriber as LocalizedIdentityErrorDescriber).UserNotFound(); IdentityResult _result = IdentityResult.Failed(error); return(BadRequest(new { Result = _result })); } else if (account.SignInConfirm == false) { IdentityError error = (_userManager.ErrorDescriber as LocalizedIdentityErrorDescriber).SignInNotConfirm(user.Email); IdentityResult _result = IdentityResult.Failed(error); return(BadRequest(new { Result = _result })); } Microsoft.AspNetCore.Identity.SignInResult signResult = await _signInManager.PasswordSignInAsync(user.Email, user.Password, true, false); if (signResult.Succeeded) { var accountUser = await _userManager.FindByEmailAsync(user.Email); IList <Claim> claims = await _userManager.GetClaimsAsync(accountUser); claims.Add(new Claim(ClaimTypes.NameIdentifier, accountUser.Id)); claims.Add(new Claim(ClaimTypes.Name, accountUser.FirstName + accountUser.LastName)); string roleType = ""; string id = ""; if (accountUser.UserType == RegisterType.Aggregator) { roleType = UserRoleTypes.Aggregator; var agg = _accountContext.VwAggregatorusers.FirstOrDefault(x => x.UserId == accountUser.Id); id = agg.AggGroupId; claims.Add(new Claim(UserClaimTypes.AggregatorGroupIdentifier, agg.AggGroupId)); //claims.Add(new Claim("", )) claims.Add(new Claim(ClaimTypes.Role, UserRoleTypes.Aggregator)); if (string.IsNullOrEmpty(agg.AggName) == false) { claims.Add(new Claim(UserClaimTypes.AggregatorGroupName, agg.AggName)); } } else if (accountUser.UserType == RegisterType.Contrator) { var contractor = _accountContext.VwContractorusers.FirstOrDefault(x => x.UserId == accountUser.Id); id = accountUser.Id; claims.Add(new Claim(UserClaimTypes.AggregatorGroupIdentifier, contractor.AggGroupId)); claims.Add(new Claim(ClaimTypes.Role, UserRoleTypes.Contractor)); roleType = UserRoleTypes.Contractor; if (string.IsNullOrEmpty(contractor.AggName) == false) { claims.Add(new Claim(UserClaimTypes.AggregatorGroupName, contractor.AggName)); } } else if (accountUser.UserType == RegisterType.Supervisor) { claims.Add(new Claim(ClaimTypes.Role, UserRoleTypes.Supervisor)); roleType = UserRoleTypes.Supervisor; } var siteids = ControlHelper.GetAvaliableRccCodes(_accountContext, roleType, id); claims.Add(new Claim(SiteIdsByRccClaim, siteids)); string token = JasonWebTokenManager.GenerateToken(user.Email, claims); string result = JasonWebTokenManager.ValidateToken(user.Email, token, ClaimTypes.NameIdentifier); //if (string.IsNullOrEmpty(returnUrl) == false) //{ // Console.WriteLine("returnurl:" + returnUrl); // return Redirect(returnUrl); //} Console.WriteLine("Log-in Success: " + user.Email); return(Ok(new { Result = signResult, Token = token, User = accountUser })); } else { Console.WriteLine($"Login Failed"); //if (signResult.RequiresTwoFactor) //{ // return RedirectToAction("act", new { ReturnUrl = returnUrl, RememberMe = user.RememberMe }); //} if (signResult.IsLockedOut) { IdentityError error = (_userManager.ErrorDescriber as LocalizedIdentityErrorDescriber).UserLockoutEnabled(); IdentityResult _result = IdentityResult.Failed(error); return(BadRequest(new { Result = _result })); } else { IdentityError error = (_userManager.ErrorDescriber as LocalizedIdentityErrorDescriber).PasswordMismatch(); IdentityResult _result = IdentityResult.Failed(error); return(BadRequest(new { Result = _result })); } } } else { Console.WriteLine("Invalid LoginViewModel"); return(Ok(StatusCodes.Status406NotAcceptable)); } }
private async Task <string> GenerateAccessTokenAsync(UserAccountEF userAccount) { var accountUser = userAccount; IList <Claim> claims = await _userManager.GetClaimsAsync(accountUser); claims.Add(new Claim(ClaimTypes.NameIdentifier, accountUser.Id)); claims.Add(new Claim(ClaimTypes.Name, accountUser.FirstName + accountUser.LastName)); string roleType = ""; string id = ""; if (accountUser.UserType == RegisterType.Aggregator) { roleType = UserRoleTypes.Aggregator; var agg = _accountContext.VwAggregatorusers.FirstOrDefault(x => x.UserId == accountUser.Id); id = agg.AggGroupId; claims.Add(new Claim(UserClaimTypes.AggregatorGroupIdentifier, agg.AggGroupId)); //claims.Add(new Claim("", )) claims.Add(new Claim(ClaimTypes.Role, UserRoleTypes.Aggregator)); if (string.IsNullOrEmpty(agg.AggName) == false) { claims.Add(new Claim(UserClaimTypes.AggregatorGroupName, agg.AggName)); } } else if (accountUser.UserType == RegisterType.Contrator) { var contractor = _accountContext.VwContractorusers.FirstOrDefault(x => x.UserId == accountUser.Id); id = accountUser.Id; claims.Add(new Claim(UserClaimTypes.AggregatorGroupIdentifier, contractor.AggGroupId)); claims.Add(new Claim(ClaimTypes.Role, UserRoleTypes.Contractor)); roleType = UserRoleTypes.Contractor; if (string.IsNullOrEmpty(contractor.AggName) == false) { claims.Add(new Claim(UserClaimTypes.AggregatorGroupName, contractor.AggName)); } } else if (accountUser.UserType == RegisterType.Supervisor) { claims.Add(new Claim(ClaimTypes.Role, UserRoleTypes.Supervisor)); roleType = UserRoleTypes.Supervisor; } else if (accountUser.UserType == RegisterType.AccountManager) { claims.Add(new Claim(ClaimTypes.Role, UserRoleTypes.AccountManager)); } else if (accountUser.UserType == RegisterType.Hubbub) { claims.Add(new Claim(ClaimTypes.Role, UserRoleTypes.HubbubUser)); } bool IsPlatformUser = accountUser.UserType == RegisterType.Supervisor || accountUser.UserType == RegisterType.Aggregator || accountUser.UserType == RegisterType.Contrator; if (IsPlatformUser) { var siteids = ControlHelper.GetAvaliableRccCodes(_accountContext, roleType, id); claims.Add(new Claim(UserClaimTypes.SiteIdsByRccClaim, siteids)); } string token = JasonWebTokenManager.GenerateToken(accountUser.Email, claims); return(token); }
//[HttpPost, Route("login"), AllowAnonymous] ////public async Task<IActionResult> Login([FromBody]JObject jo) //public async Task<IActionResult> Login() //{ // Console.WriteLine("call login~. No Parameter"); // //foreach (string key in Response.Headers.Keys) // //{ // // Console.WriteLine($"{key} : {Response.Headers[key]}"); // //} // //Response.Cookies.Append("babo", "you~"); // //if (jo == null) // // return NoContent(); // //return await ClaimsLogin(jo); // return Ok(); //} //private async Task<IActionResult> ClaimsLogin([FromBody]JObject jo) //{ // bool isUservalid = false; // LoginViewModel user = JsonConvert.DeserializeObject<LoginViewModel>(jo.ToString()); // if (ModelState.IsValid && isUservalid) // { // var claims = new List<Claim>(); // claims.Add(new Claim(ClaimTypes.Name, user.Email)); // var identity = new ClaimsIdentity( // claims, JwtBearerDefaults.AuthenticationScheme); // var principal = new ClaimsPrincipal(identity); // var props = new AuthenticationProperties(); // props.IsPersistent = user.RememberMe; // HttpContext.SignInAsync( // IdentityConstants.ApplicationScheme, // principal, props).Wait(); // string token = JasonWebTokenManager.GenerateToken(user.Email); // return Ok(new { Token = token }); // } // else // { // return BadRequest(); // } //} private async Task <IActionResult> OldLogin([FromBody] LoginModel user) { //[FromBody] //JObject jo = null; if (ModelState.IsValid) { if (string.IsNullOrEmpty(user.Email) || string.IsNullOrEmpty(user.Password)) { Console.WriteLine("Invalid User"); return(BadRequest()); } UserAccountEF account = await _userManager.FindByEmailAsync(user.Email); if (account == null) { IdentityError error = (_userManager.ErrorDescriber as LocalizedIdentityErrorDescriber).UserNotFound(); IdentityResult _result = IdentityResult.Failed(error); return(BadRequest(new { Result = _result })); } else if (account.SignInConfirm == false) { IdentityError error = (_userManager.ErrorDescriber as LocalizedIdentityErrorDescriber).SignInNotConfirm(user.Email); IdentityResult _result = IdentityResult.Failed(error); return(BadRequest(new { Result = _result })); } else if (account.Expire <= DateTime.Now) { IdentityError error = (_userManager.ErrorDescriber as LocalizedIdentityErrorDescriber).Expired(); IdentityResult _result = IdentityResult.Failed(error); return(BadRequest(new { Result = _result })); } Microsoft.AspNetCore.Identity.SignInResult signResult = await _signInManager.PasswordSignInAsync(user.Email, user.Password, true, false); if (signResult.Succeeded) { var accountUser = await _userManager.FindByEmailAsync(user.Email); string token = await GenerateAccessTokenAsync(accountUser); string result = JasonWebTokenManager.ValidateToken(user.Email, token, ClaimTypes.NameIdentifier); string refreshToken = null; if (distributedCache.TryGetValue(user.Email, out refreshToken) == false) { refreshToken = JasonWebTokenManager.GenerateRefreshToken(user.Email); var cacheEntryOptions = new MemoryCacheEntryOptions() .SetSlidingExpiration(TimeSpan.FromDays(100)); distributedCache.Set(user.Email, refreshToken, cacheEntryOptions); } //if (string.IsNullOrEmpty(returnUrl) == false) //{ // Console.WriteLine("returnurl:" + returnUrl); // return Redirect(returnUrl); //} Console.WriteLine("Log-in Success: " + user.Email); return(Ok(new { Result = signResult, Token = token, RefreshToken = refreshToken, User = accountUser })); } else { Console.WriteLine($"Login Failed"); //if (signResult.RequiresTwoFactor) //{ // return RedirectToAction("act", new { ReturnUrl = returnUrl, RememberMe = user.RememberMe }); //} if (signResult.IsLockedOut) { IdentityError error = (_userManager.ErrorDescriber as LocalizedIdentityErrorDescriber).UserLockoutEnabled(); IdentityResult _result = IdentityResult.Failed(error); return(BadRequest(new { Result = _result })); } else { IdentityError error = (_userManager.ErrorDescriber as LocalizedIdentityErrorDescriber).PasswordMismatch(); IdentityResult _result = IdentityResult.Failed(error); return(BadRequest(new { Result = _result })); } } } else { Console.WriteLine("Invalid LoginViewModel"); return(Ok(StatusCodes.Status406NotAcceptable)); } }
//[HttpPost, Route("login"), AllowAnonymous] ////public async Task<IActionResult> Login([FromBody]JObject jo) //public async Task<IActionResult> Login() //{ // Console.WriteLine("call login~. No Parameter"); // //foreach (string key in Response.Headers.Keys) // //{ // // Console.WriteLine($"{key} : {Response.Headers[key]}"); // //} // //Response.Cookies.Append("babo", "you~"); // //if (jo == null) // // return NoContent(); // //return await ClaimsLogin(jo); // return Ok(); //} //private async Task<IActionResult> ClaimsLogin([FromBody]JObject jo) //{ // bool isUservalid = false; // LoginViewModel user = JsonConvert.DeserializeObject<LoginViewModel>(jo.ToString()); // if (ModelState.IsValid && isUservalid) // { // var claims = new List<Claim>(); // claims.Add(new Claim(ClaimTypes.Name, user.Email)); // var identity = new ClaimsIdentity( // claims, JwtBearerDefaults.AuthenticationScheme); // var principal = new ClaimsPrincipal(identity); // var props = new AuthenticationProperties(); // props.IsPersistent = user.RememberMe; // HttpContext.SignInAsync( // IdentityConstants.ApplicationScheme, // principal, props).Wait(); // string token = JasonWebTokenManager.GenerateToken(user.Email); // return Ok(new { Token = token }); // } // else // { // return BadRequest(); // } //} private async Task <IActionResult> OldLogin([FromBody] LoginModel jo) { //[FromBody] //JObject jo = null; Console.WriteLine($"Try Logging... {jo}"); //UserAccount user = await _userManager.FindByNameAsync(input_user.Email); if (ModelState.IsValid) { Console.WriteLine($"Model State is Valid"); Console.WriteLine(jo.ToString()); UserAccountEF account = await _userManager.FindByEmailAsync(jo.Email); if (account == null) { IdentityError error = (_userManager.ErrorDescriber as LocalizedIdentityErrorDescriber).UserNotFound(); IdentityResult _result = IdentityResult.Failed(error); return(BadRequest(new { Result = _result })); } else if (account.SignInConfirm == false) { IdentityError error = (_userManager.ErrorDescriber as LocalizedIdentityErrorDescriber).SignInNotConfirm(jo.Email); IdentityResult _result = IdentityResult.Failed(error); return(BadRequest(new { Result = _result })); } Microsoft.AspNetCore.Identity.SignInResult signResult = await _signInManager.PasswordSignInAsync(jo.Email, jo.Password, true, false); if (signResult.Succeeded) { using (NHibernate.ISession session = _accountContext.SessionFactory.OpenSession()) { var accountUser = await _userManager.FindByEmailAsync(jo.Email); IList <Claim> claims = await _userManager.GetClaimsAsync(accountUser); claims.Add(new Claim(ClaimTypes.NameIdentifier, accountUser.Id)); claims.Add(new Claim(ClaimTypes.Email, accountUser.Email)); claims.Add(new Claim(ClaimTypes.Name, accountUser.FirstName + accountUser.LastName)); if (accountUser.UserType == RegisterType.Aggregator) { VwAggregatoruser agg = await session.GetAsync <VwAggregatoruser>(accountUser.Id); claims.Add(new Claim(UserClaimTypes.AggregatorGroupIdentifier, agg.AggGroupId)); claims.Add(new Claim(ClaimTypes.Role, UserRoleTypes.Aggregator)); if (string.IsNullOrEmpty(agg.AggName) == false) { claims.Add(new Claim(UserClaimTypes.AggregatorGroupName, agg.AggName)); } //var agg = _accountContext.VwAggregatorusers.FirstOrDefault(x => x.UserId == accountUser.Id); //claims.Add(new Claim(UserClaimTypes.AggregatorGroupIdentifier, agg.AggGroupId)); //claims.Add(new Claim(ClaimTypes.Role, UserRoleTypes.Aggregator)); //if (string.IsNullOrEmpty(agg.AggName) == false) // claims.Add(new Claim(UserClaimTypes.AggregatorGroupName, agg.AggName)); } else if (accountUser.UserType == RegisterType.Contrator) { VwContractoruser con = await session.GetAsync <VwContractoruser>(accountUser.Id); claims.Add(new Claim(UserClaimTypes.AggregatorGroupIdentifier, con.AggGroupId)); claims.Add(new Claim(ClaimTypes.Role, UserRoleTypes.Contractor)); if (string.IsNullOrEmpty(con.AggName) == false) { claims.Add(new Claim(UserClaimTypes.AggregatorGroupName, con.AggName)); } //var contractor = _accountContext.VwContractorusers.FirstOrDefault(x => x.UserId == accountUser.Id); //claims.Add(new Claim(UserClaimTypes.AggregatorGroupIdentifier, contractor.AggGroupId)); //claims.Add(new Claim(ClaimTypes.Role, UserRoleTypes.Contractor)); //if (string.IsNullOrEmpty(contractor.AggName) == false) // claims.Add(new Claim(UserClaimTypes.AggregatorGroupName, contractor.AggName)); } else if (accountUser.UserType == RegisterType.Supervisor) { claims.Add(new Claim(ClaimTypes.Role, UserRoleTypes.Supervisor)); } string token = JasonWebTokenManager.GenerateToken(jo.Email, UserClaimTypes.Issuer, claims); //if (string.IsNullOrEmpty(returnUrl) == false) //{ // Console.WriteLine("returnurl:" + returnUrl); // return Redirect(returnUrl); //} Console.WriteLine("Log-in Success: " + jo.Email); return(Ok(new { Result = signResult, Token = token, User = accountUser })); } } else { Console.WriteLine($"Login Failed"); //if (signResult.RequiresTwoFactor) //{ // return RedirectToAction("act", new { ReturnUrl = returnUrl, RememberMe = user.RememberMe }); //} if (signResult.IsLockedOut) { IdentityError error = (_userManager.ErrorDescriber as LocalizedIdentityErrorDescriber).UserLockoutEnabled(); IdentityResult _result = IdentityResult.Failed(error); return(BadRequest(new { Result = _result })); } else { IdentityError error = (_userManager.ErrorDescriber as LocalizedIdentityErrorDescriber).PasswordMismatch(); IdentityResult _result = IdentityResult.Failed(error); return(BadRequest(new { Result = _result })); } } } else { Console.WriteLine("Invalid LoginViewModel"); return(Ok(StatusCodes.Status406NotAcceptable)); } }