public async Task <IHttpActionResult> SignInLinkedin(SignInLinkedinModel model) { this.CheckModelStateIsValid(); string token; var userSession = this.GetCurrentUserSession(); if (userSession == null) { var externalUserDetails = await LinkedinUserDetailsProvider.GetUserDetails(model, Request.GetOwinContext().Request.CallCancelled); userSession = _userSessionBusinessLogic.CreateSessionForExternalUser(externalUserDetails); token = JwtHelper.Create(userSession); } else { Log.InfoFormat("User '{0}' is already signed-in. Reusing existing session.", userSession.UserId); // return the bearer token received token = Request.Headers.Authorization.Parameter; } var result = new SignInResultModel { Token = token }; return(Ok(result)); }
public ActionResult <SignInResultModel> SignIn( [FromForm] string sID , [FromForm] string sPW) { //결과용 ApiResultReadyModel armResult = new ApiResultReadyModel(this); //로그인 처리용 모델 SignInResultModel smResult = new SignInResultModel(); //토큰 요청 TokenResponse tr = RequestTokenAsync(sID, sPW).Result; if (true == tr.IsError) {//에러가 있다. armResult.infoCode = "1"; armResult.message = "아이디나 비밀번호가 틀렸습니다."; armResult.StatusCode = StatusCodes.Status401Unauthorized; } else {//에러가 없다. smResult.access_token = tr.AccessToken; smResult.refresh_token = tr.RefreshToken; } return(armResult.ToResult(smResult)); }
public async Task <SignInResultModel> PasswordSignInAsync(string userName, string password, bool lockoutOnFailure) { var user = await _userRepository.FindByUserNameAsync(userName); if (user == null) { return(new SignInResultModel { Succeeded = false }); } var loginResult = new SignInResultModel(await _signInManager.CheckPasswordSignInAsync(user, password, lockoutOnFailure)); if (!loginResult.Succeeded) { return(loginResult); } loginResult.Roles = await _userManager.GetRolesAsync(user); loginResult.UserIdentity = new Groove.AspNetCore.Common.Identity.UserIdentity <long> { Id = user.Id, UserName = user.UserName }; return(loginResult); }
public ActionResult <SignInResultModel> SignIn( [FromForm] string sEmail , [FromForm] string sPW) { //결과용 ApiResultReady rrResult = new ApiResultReady(this); //로그인 처리용 모델 SignInResultModel armResult = new SignInResultModel(); rrResult.ResultObject = armResult; //유저 검색 UserSignInfoModel user = GlobalStatic.UserList .List.FirstOrDefault(m => m.Email == sEmail && m.Password == sPW); if (user != null) { //에러가 없다. rrResult.Message = user.Email; armResult.access_token = "dasdflcc090fkkc"; armResult.refresh_token = "das54340fl8fd"; } else { rrResult.InfoCode = "1"; rrResult.Message = "아이디나 비밀번호가 틀렸습니다."; } return(rrResult.ToResult()); }
public async Task <SignInResultModel> SignInOrTwoFactor(AuthenticatedUser authenticatedUser) { var additionalClaims = new List <Claim>(); var signInResultModel = new SignInResultModel(); var accessTokenResult = _tokenAccessor.GetAccessTokenWithClaimsPrincipal(authenticatedUser); if (authenticatedUser.RequiresTwoFactor) { if (await IsTwoFactorClientRememberedAsync(authenticatedUser.UserId)) { additionalClaims.Add(new Claim("amr", "mfa")); } else { await HttpContext.SignInAsync(CookieConstants.TwoFactorUserIdScheme, StoreTwoFactorInfo(authenticatedUser.UserId, null)); signInResultModel.RequiresTwoFactor = true; return(signInResultModel); } } await SignInWithClaimsAsync(accessTokenResult.ClaimsPrincipal, accessTokenResult.AuthenticationProperties, additionalClaims); _apiHelper.AddTokenToHeaders(accessTokenResult.AccessToken); signInResultModel.Success = true; return(signInResultModel); }
public async Task <IActionResult> SignInAsync([FromBody] SignInModel model) { var user = await _usersService.GetByCredentialsAsync(model.Email, model.Password); if (user == null) { return(Unauthorized()); } var tokenHandler = new JwtSecurityTokenHandler(); var key = Encoding.ASCII.GetBytes(_configuration.AdminApi.Secret); var tokenDescriptor = new SecurityTokenDescriptor { Subject = new ClaimsIdentity(new[] { new Claim(ClaimTypes.Name, user.Id.ToString()), new Claim(JwtRegisteredClaimNames.Aud, "exchange.swisschain.io"), new Claim(JwtRegisteredClaimNames.Aud, "sirius.swisschain.io"), new Claim("tenant-id", user.Id.ToString()), }), Expires = DateTime.UtcNow.AddDays(7), SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature) }; var token = tokenHandler.CreateToken(tokenDescriptor); var response = new SignInResultModel { Token = tokenHandler.WriteToken(token) }; return(Ok(response)); }
public async Task <IActionResult> SignInLinkedin([FromBody] SignInLinkedinModel model) { this.CheckModelStateIsValid(); string token; var userSession = await this.GetCurrentUserSession(); if (userSession == null) { var externalUserDetails = await LinkedinUserDetailsProvider.GetUserDetails(HttpContext.RequestServices, model, Request.HttpContext.RequestAborted); userSession = await _userSessionBusinessLogic.CreateSessionForExternalUser(externalUserDetails); token = _jwtSecurityTokenFactory.Create(userSession); } else { _logger.LogInformation("User '{0}' is already signed-in. Reusing existing session.", userSession.UserId); // return the bearer token received //TODO: token = Request.Headers. Authorization.Parameter; token = "TODO"; } var result = new SignInResultModel { Token = token }; return(Ok(result)); }
public ActionResult <SignInResultModel> SignIn( [FromForm] string sEmail , [FromForm] string sPW) { //결과용 ApiResultReady rrResult = new ApiResultReady(this); //로그인 처리용 모델 SignInResultModel armResult = new SignInResultModel(); rrResult.ResultObject = armResult; //유저 검색 UserSignInfoModel user = GlobalStatic.UserList .List.FirstOrDefault(m => m.Email == sEmail && m.Password == sPW); if (user != null) { //토큰 요청 TokenResponse tr = null; //토큰 요청 tr = GlobalStatic.TokenProc.RequestTokenAsync(sEmail, sPW).Result; if (true == tr.IsError) {//에러가 있다. rrResult.InfoCode = "1"; rrResult.Message = "아이디나 비밀번호가 틀렸습니다."; } else {//에러가 없다. //로그인 되어있는 유저정보 저장 GlobalStatic.SignInList.Add(user.ID, tr.RefreshToken); armResult.id = user.ID; armResult.email = user.Email; armResult.lv = 0; armResult.access_token = tr.AccessToken; armResult.refresh_token = tr.RefreshToken; } } else { rrResult.InfoCode = "1"; rrResult.Message = "아이디나 비밀번호가 틀렸습니다."; } return(rrResult.ToResult()); }
public ActionResult <SignInResultModel> RefreshToAccess( [FromForm] string sRefreshToken) { //결과용 ApiResultReady rrResult = new ApiResultReady(this); //엑세스 토큰 갱신용 모델 SignInResultModel armResult = new SignInResultModel(); rrResult.ResultObject = armResult; //토큰 갱신 요청 TokenResponse tr = GlobalStatic.TokenProc.RefreshTokenAsync(sRefreshToken).Result; if (true == tr.IsError) {//에러가 있다. rrResult.InfoCode = "1"; rrResult.Message = "토큰 갱신에 실패하였습니다."; } else {//에러가 없다. //유저 정보를 받는다. UserInfoResponse inrUser = GlobalStatic.TokenProc.UserInfoAsync(tr.AccessToken).Result; //유저 정보 추출 ClaimModel cm = new ClaimModel(inrUser.Claims); //로그인 되어있는 유저정보 저장 GlobalStatic.SignInList.Add(cm.id_int, tr.RefreshToken); //모델에 입력 armResult.id = cm.id_int; armResult.email = cm.email; armResult.access_token = tr.AccessToken; armResult.refresh_token = tr.RefreshToken; } return(rrResult.ToResult(armResult)); }
public ActionResult <SignInResultModel> SignIn( [FromForm] string sEmail , [FromForm] string sPW) { //결과용 ApiResultReady rrResult = new ApiResultReady(this); //로그인 처리용 모델 SignInResultModel rmResult = new SignInResultModel(); rrResult.ResultObject = rmResult; //API 호출 시간 DateTime dtNow = DateTime.Now; //검색된 유저 User findUser = null; using (SpaNetCoreFoundationContext db1 = new SpaNetCoreFoundationContext()) { //유저 검색 findUser = db1.User .FirstOrDefault(m => m.SignEmail == sEmail && m.Password == sPW); } if (findUser != null) { //토큰 요청 TokenResponse tr = GlobalStatic.TokenProc.RequestTokenAsync(sEmail, sPW).Result; if (true == tr.IsError) {//에러가 있다. rrResult.InfoCode = "1"; rrResult.Message = "아이디나 비밀번호가 틀렸습니다."; } else {//에러가 없다. using (SpaNetCoreFoundationContext db1 = new SpaNetCoreFoundationContext()) { //기존 로그인한 유저 검색 UserSignIn[] arrSL = db1.UserSignIn .Where(m => m.idUser == findUser.idUser) .ToArray(); //기존 로그인한 유저 정보 제거 db1.UserSignIn.RemoveRange(arrSL); //db 적용 db1.SaveChanges(); //사인인 한 유저의 정보 UserInfo findUI = db1.UserInfo .Where(m => m.idUser == findUser.idUser) .FirstOrDefault(); //로그인 되어있는 유저정보 저장 UserSignIn slItem = new UserSignIn(); slItem.idUser = findUser.idUser; slItem.RefreshToken = tr.RefreshToken; slItem.SignInDate = dtNow; slItem.RefreshDate = dtNow; //기존 로그인한 유저 정보 제거 db1.UserSignIn.Add(slItem); //db 적용 db1.SaveChanges(); //로그인한 유저에게 전달할 정보 rmResult.idUser = findUser.idUser; rmResult.Email = findUser.SignEmail; rmResult.ViewName = findUI.ViewName; rmResult.MgtClass = findUI.MgtClass; rmResult.access_token = tr.AccessToken; rmResult.refresh_token = tr.RefreshToken; } } } else { rrResult.InfoCode = "1"; rrResult.Message = "아이디나 비밀번호가 틀렸습니다."; } return(rrResult.ToResult(rmResult)); }
public ActionResult <SignInResultModel> RefreshToAccess( [FromForm] string sRefreshToken) { //결과용 ApiResultReady rrResult = new ApiResultReady(this); //엑세스 토큰 갱신용 모델 SignInResultModel armResult = new SignInResultModel(); rrResult.ResultObject = armResult; //API 호출 시간 DateTime dtNow = DateTime.Now; //토큰 갱신 요청 TokenResponse tr = GlobalStatic.TokenProc.RefreshTokenAsync(sRefreshToken).Result; if (true == tr.IsError) {//에러가 있다. rrResult.InfoCode = "1"; rrResult.Message = "토큰 갱신에 실패하였습니다."; } else {//에러가 없다. //유저 정보를 받는다. UserInfoResponse inrUser = GlobalStatic.TokenProc.UserInfoAsync(tr.AccessToken).Result; //유저 정보 추출 ClaimModel cm = new ClaimModel(inrUser.Claims); using (SpaNetCoreFoundationContext db1 = new SpaNetCoreFoundationContext()) { //기존 로그인한 유저 검색 UserSignIn itemUSI = db1.UserSignIn .Where(m => m.idUser == cm.id_int) .FirstOrDefault(); if (null == itemUSI) {//기존 로그인 정보가 없다, //이러면 강제로 토큰이 상실된 것일 수 있다. rrResult.InfoCode = "1"; rrResult.Message = "토큰 갱신에 실패하였습니다."; } else { //로그인 되어있는 유저정보 수정 itemUSI.RefreshToken = tr.RefreshToken; itemUSI.RefreshDate = dtNow; //db 적용 db1.SaveChanges(); //사인인 한 유저의 정보 UserInfo findUI = db1.UserInfo .Where(m => m.idUser == cm.id_int) .FirstOrDefault(); //유저에게 전달할 정보 만들기 armResult.idUser = cm.id_int; armResult.Email = cm.email; armResult.ViewName = findUI.ViewName; armResult.MgtClass = findUI.MgtClass; armResult.access_token = tr.AccessToken; armResult.refresh_token = tr.RefreshToken; } } } return(rrResult.ToResult(armResult)); }
public ActionResult <SignInResultModel> SignIn( [FromForm] string sEmail , [FromForm] string sPW) { //결과용 ApiResultReady rrResult = new ApiResultReady(this); //로그인 처리용 모델 SignInResultModel rmResult = new SignInResultModel(); rrResult.ResultObject = rmResult; //API 호출 시간 DateTime dtNow = DateTime.Now; //사인인 시도 기록 GlobalSign.LogAdd_DB( 1 , ModelDB.UserSignLogType.SignIn , 0 , string.Format("SignIn 시도 - {0}, {1}", sEmail, sPW)); //검색된 유저 User findUser = null; using (SpaNetCoreFoundationContext db1 = new SpaNetCoreFoundationContext()) { //유저 검색 findUser = db1.User .FirstOrDefault(m => m.SignEmail == sEmail && m.Password == sPW); } if (findUser != null) { //토큰 요청 TokenResponse tr = GlobalStatic.TokenProc.RequestTokenAsync(sEmail, sPW).Result; if (true == tr.IsError) {//에러가 있다. rrResult.InfoCode = "1"; rrResult.Message = "아이디나 비밀번호가 틀렸습니다."; } else {//에러가 없다. using (SpaNetCoreFoundationContext db1 = new SpaNetCoreFoundationContext()) { //기존 로그인한 유저 검색 UserSignIn[] arrSL = db1.UserSignIn .Where(m => m.idUser == findUser.idUser) .ToArray(); //기존 로그인 토큰 제거 foreach (UserSignIn itemUSI in arrSL) { //리플레시 토큰 제거 if ((null != itemUSI.RefreshToken) && (string.Empty != itemUSI.RefreshToken)) { TokenRevocationResponse trr = GlobalStatic.TokenProc .RevocationTokenAsync(itemUSI.RefreshToken) .Result; } }//end foreach itemUSI //기존 로그인한 유저 정보 제거 db1.UserSignIn.RemoveRange(arrSL); //db 적용 db1.SaveChanges(); //사인인 한 유저의 정보 UserInfo findUI = db1.UserInfo .Where(m => m.idUser == findUser.idUser) .FirstOrDefault(); //로그인 되어있는 유저정보 저장 UserSignIn slItem = new UserSignIn(); slItem.idUser = findUser.idUser; slItem.RefreshToken = tr.RefreshToken; slItem.SignInDate = dtNow; slItem.RefreshDate = dtNow; //기존 로그인한 유저 정보 제거 db1.UserSignIn.Add(slItem); //db 적용 db1.SaveChanges(); //로그인한 유저에게 전달할 정보 rmResult.idUser = findUser.idUser; rmResult.Email = findUser.SignEmail; rmResult.ViewName = findUI.ViewName; rmResult.MgtClass = findUI.MgtClass; rmResult.access_token = tr.AccessToken; rmResult.refresh_token = tr.RefreshToken; //성공 로그 //사인인 성공 기록 GlobalSign.LogAdd_DB( 1 , ModelDB.UserSignLogType.SignIn , findUser.idUser , string.Format("SignIn 성공 - {0}", sEmail)); }//end using db1 } } else { rrResult.InfoCode = "1"; rrResult.Message = "아이디나 비밀번호가 틀렸습니다."; } return(rrResult.ToResult(rmResult)); }
public ActionResult <SignInResultModel> RefreshToAccess( [FromForm] string sRefreshToken) { //결과용 ApiResultReady rrResult = new ApiResultReady(this); //엑세스 토큰 갱신용 모델 SignInResultModel rmResult = new SignInResultModel(); rrResult.ResultObject = rmResult; //API 호출 시간 DateTime dtNow = DateTime.Now; //리플레시 토큰 갱신 시도 기록 GlobalSign.LogAdd_DB( 1 , ModelDB.UserSignLogType.RefreshToken , 0 , string.Format("RefreshToAccess 시도 : {0}", sRefreshToken)); //토큰 갱신 요청 TokenResponse tr = GlobalStatic.TokenProc.RefreshTokenAsync(sRefreshToken).Result; //기존 로그인한 유저 검색 UserSignIn itemUSI = null; if (true == tr.IsError) {//토큰 갱신 실패 //DB에 있는 리플레시 토큰은 수동으로 확인해서 갱신해준다. //토큰 정보는 메모리에 저장되기 때문에 서버가 내려갔다 올라오면 토큰정보가 날아간다. //이런 예외를 처리하기위해 수동으로 리플레시 토큰을 갱신해야한다. using (SpaNetCoreFoundationContext db1 = new SpaNetCoreFoundationContext()) { //기존 로그인한 유저 검색 itemUSI = db1.UserSignIn .Where(m => m.RefreshToken == sRefreshToken) .FirstOrDefault(); if (null == itemUSI) {//정보 자체가 없다. rrResult.InfoCode = "-101"; rrResult.Message = "갱신실패 : 인증 정보가 없습니다."; } else if (dtNow > itemUSI.RefreshDate) {//인증정보의 유효기간이 지났다. rrResult.InfoCode = "-102"; rrResult.Message = "갱신실패 : 인증가능 기간이 지났습니다."; } else {//토큰이 살아있다. //유저를 검색한다. User findUser = db1.User .Where(w => w.idUser == itemUSI.idUser) .FirstOrDefault(); //토큰을 갱신한다. tr = GlobalStatic.TokenProc .RequestTokenAsync(findUser.SignEmail, findUser.Password) .Result; } } //end using db1 } //end if (true == tr.IsError) if (true == rrResult.IsSuccess()) { if (true == tr.IsError) { rrResult.InfoCode = "1"; rrResult.Message = "토큰 갱신에 실패하였습니다."; } } if (true == rrResult.IsSuccess()) {//에러가 없다. //유저 정보를 받는다. UserInfoResponse inrUser = GlobalStatic.TokenProc.UserInfoAsync(tr.AccessToken).Result; //유저 정보 추출 ClaimModel cm = new ClaimModel(inrUser.Claims); using (SpaNetCoreFoundationContext db1 = new SpaNetCoreFoundationContext()) { //기존 로그인한 유저 검색 itemUSI = db1.UserSignIn .Where(m => m.idUser == cm.id_int) .FirstOrDefault(); if (null == itemUSI) {//기존 로그인 정보가 없다, //이러면 강제로 토큰이 상실된 것일 수 있다. rrResult.InfoCode = "1"; rrResult.Message = "토큰 갱신에 실패하였습니다."; } else { //로그인 되어있는 유저정보 수정 itemUSI.RefreshToken = tr.RefreshToken; itemUSI.RefreshDate = dtNow.AddDays(30); //db 적용 db1.SaveChanges(); //유저에게 전달할 정보 만들기 rmResult.idUser = cm.id_int; rmResult.Email = cm.email; rmResult.ViewName = rmResult.Email; rmResult.access_token = tr.AccessToken; rmResult.refresh_token = tr.RefreshToken; //기록 GlobalSign.LogAdd_DB( 1 , ModelDB.UserSignLogType.RefreshToken , cm.id_int , string.Format("RefreshToAccess 성공 : {0}", rmResult.Email)); } }//end using db1 } return(rrResult.ToResult(rmResult)); }