public ReadUserM Login(string email, string password) { ReadUserM user = new ReadUserM(); //비밀번호 검증 bool verified = userService.VerifyUser(email, password); // 비밀번호 검증 완료 시 if (verified) { UserT userEntity = userService.GetUserByEmail(email); user = mapper.Map <UserT, ReadUserM>(userEntity); // 토큰생성 TokenT authEntity = authService.CreateToken(user); TokenM token = mapper.Map <TokenT, TokenM>(authEntity); user.Token = token; } else { throw new IncorrectDataException("비밀번호가 올바르지 않습니다.", "비밀번호 오류", LayerID.AuthController); } logger.Log(LogLevel.Info, string.Format("호출 성공 : {0}", MethodBase.GetCurrentMethod().Name)); return(user); }
/// <summary> /// Access Token 유효성 체크 /// </summary> /// <param name="accessToken"></param> /// <param name="refreshToken"></param> /// <returns></returns> public TokenT ReadAccessToken(string accessToken, string refreshToken) { TokenT token = authRepository.SelectTokenByRefreshToken(refreshToken); if (token != null) { // Access Token 일치 여부 if (token.AccessToken != accessToken) { throw new BadRequestException("정상적인 토큰이 아닙니다.", "토큰 오류", LayerID.AuthController); } // Refresh Token 만료시간 확인 if (token.RefreshTokenExpireDate < CommonHelper.GetDateTimeNow) { throw new UnauthorizedException("Refresh 토큰이 만료되었습니다. 다시 로그인 해주세요.", "권한 오류", LayerID.AuthController); } return(token); } else { throw new NotFoundException("토큰이 존재하지 않습니다.", "토큰 오류", LayerID.AuthController); } }
public int UpsertToken(TokenT apiToken) { string sql = SQLHelper.GetSqlByMethodName(MethodBase.GetCurrentMethod().Name); var parameters = new { USER_NO = apiToken.UserNo, ACCESS_TOKEN = apiToken.AccessToken, REFRESH_TOKEN = apiToken.RefreshToken, SCOPE = apiToken.Scope, ACCESS_EXPIRE_DT = apiToken.AccessTokenExpireDate, REFRESH_EXPIRE_DT = apiToken.RefreshTokenExpireDate }; return(Connection.Execute(sql, parameters)); }
public TokenM RefreshToken(string accessToken, string refreshToken) { TokenM tokenModel = new TokenM(); TokenT token = authService.ReadAccessToken(accessToken, refreshToken); DateTime validTo = new JwtSecurityTokenHandler().ReadJwtToken(accessToken).ValidTo; DateTime tokenExpiredTime = CommonHelper.GetDateTime(validTo); if (tokenExpiredTime < DateTime.Now) { UserT userEntity = userService.GetUser(token.UserNo); ReadUserM user = mapper.Map <UserT, ReadUserM>(userEntity); TokenT authEntity = authService.CreateToken(user); tokenModel = mapper.Map <TokenT, TokenM>(authEntity); } else { throw new BadRequestException("토큰 만료 시간이 유효합니다.", "토큰 오류", LayerID.AuthController); } logger.Log(LogLevel.Info, string.Format("호출 성공 : {0}", MethodBase.GetCurrentMethod().Name)); return(tokenModel); }
public TokenT CreateToken(ReadUserM user) { // authentication successful so generate jwt token var tokenHandler = new JwtSecurityTokenHandler(); var key = Encoding.ASCII.GetBytes(AppConfiguration.JwtSecret); var tokenDescriptor = new SecurityTokenDescriptor { Subject = new ClaimsIdentity(new Claim[] { new Claim(ClaimTypes.Sid, user.UserNo) }), Expires = DateTime.Now.AddHours(2), SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature), IssuedAt = DateTime.Now, Audience = "aud.allthatbts.com", Issuer = "api.allthatbts.com", }; var token = tokenHandler.CreateToken(tokenDescriptor); TokenT apiToken = new TokenT() { UserNo = user.UserNo, AccessToken = tokenHandler.WriteToken(token), AccessTokenExpireDate = tokenDescriptor.Expires.Value, RefreshToken = CreateRefreshToken(), RefreshTokenExpireDate = DateTime.Now.AddDays(7), Scope = null }; // 토큰 DB에 저장 authRepository.UpsertToken(apiToken); apiToken = authRepository.SelectToken(user.UserNo); return(apiToken); }