플밍 is 뭔들/그 외.. 썸네일형 리스트형 안전한 패스워드 저장 및 자바로 SHA-256 해싱 알고리즘 사용하기 일반적인 패스워드 저장방법 단순 텍스트 단방향 해시 함수의 다이제스트(digest) 단순 텍스트를 사용하고 있다면, 지금 당장 변경해야한다. 절대 해서는 안되는 일이다. 단방향 해시 함수는 수학적인 연산을 통해 원본 메시지를 변환하여 암호화된 메시지인 다이제스트를 생성한다. 원본 메시지를 알면 암호화된 메시지를 구하기는 쉽지만 암호화된 메시지로 원본 메시지를 구할 수 없어야 하며 이를 '단방향성' 이라고 한다. ※ 단방향 해시 함수 사용자의 패스워드가 "1234"라면 이 문자열을 흔히 사용하는 해시 알고리즘은 SHA-256으로 인코딩하여 아래와 같은 값을 얻을 수 있다. FF0EB2864FEB22354747F8C85D42CCB5 위의 입력값을 저장하면 사용자는 패스워드를 직접 저장하는 위험을 피할 수 있.. 더보기 JPA에서 @Repository에서 쿼리를 사용할 떄 주의할 점 사용쿼리 @Repository public interface AuthRepository extends JpaRepository { Auth findByUserIdAndUserPassword(String userId, String userPassword); @Modifying @Transactional @Query("UPDATE Auth u Set u.token = :refreshToken WHERE u.userId = :userId") void saveRefreshToken(@Param("refreshToken") String refreshToken, @Param("userId") String userId); } 위에서 직접 update 쿼리를 사용하였는데 주의해야할 점이 몇개 있다 1.테이블명이 아닌 .. 더보기 ORM과 JPA에 관하여 ※ ORM(Object Relational Mapping) 객체와 DB의 테이블 매핑을 이루는 것을 말합니다. 좀 더 자세히 말하면 객체형 데이터(Java Object)와 관계형 데이터(Relational DataBase) 사이에서 개념적으로 일치하지 않는 부분을 해결하기 위해 이 둘 사이를 Mapping한 것을 의미합니다. SQL문 작성없이 간단한 매핑설정으로 데이터베이스의 테이블 데이터를 Java 객체로 전달받을 수 있습니다. 예를들어 USER테이블의 데이터를 조회하기 위해서는 SELECT * FROM USER; 라는 쿼리를 실행시켜야 하지만 ORM을 사용하면 USER 테이블과 매핑된 객체를 user라 할 때, user.findAll() 이라는 메서드 호출을 통해 데이터 조회가 가능합니다. 죽 쿼리를.. 더보기 [JWT] JSON Web Token - AssessToken과 Refresh 토큰 JWT는 기본적으로 두 가지 토큰을 사용합니다. ※ Access Token API 요청을 허가하는데 사용합니다. 리소스에 직접 접근할 수 있도록 해주는 정보만을 가지고 잇습니다. 즉 클라이언트는 Access Token이 있어야 서버 자원에 접근할 수있습니다. 짧은 수명을 가지며 만료기간을 갖습니다. ※ Refresh Token 새로운 Access Token을 발급받기 위한 정보를 갖습니다. 즉 클라이언트가 Access Token이 없거나 만료되었다면 Refresh Token을 통해 Auth Server에 요청해서 발급받을 수 있습니다. 만료기한이 있지만 깁니다. Refresh Token은 중요하기 때문에 외부에 노출되지 않도록 엄격하게 관리해야 하므로 주로 데이터베이스에 저장합니다. ※ JWT 토큰 재발.. 더보기 [JWT] JSON Web Token - 서버기반/토큰기반 인증의 차이와 JWT의 장단점 ※ 서버 기반 인증 기존의 인증 시스템에서는 서버측에서 유저들의 정보를 세션에 기억하고 있어야 합니다. 이 세션을 유지하기 위해서는 여러가지 방법이 사용되는데 메모리/디스크/데이터베이스 시스템에 이를 담곤 합니다. 서버 기반 인증 시스템의 흐름은 다음과 같습니다. 서버 기반 인증의 문제점 - 세션 : 유저가 인증을 할 때 이 기록을 서버에 저장해야 하는데 이를 세션이라 합니다. 보통은 메모리에 이를 저장하는데, 로그인 중인 유저의 수가 늘어난다면 서버의 램에 과부화가 될 수 있습니다. 데이터베이스에 저장하는 방식도 있지만 이 또한 유저의 수가 많으면 데이터베이스의 성능에 무리를 줄 수 있습니다. - 확장성 : 세션을 사용하면 서버 확장이 어렵습니다. (단순 서버 사양 업그레이드 뿐 아니라 더 많은 트래픽.. 더보기 [JWT] JSON Web Token JWT Process ※ JWT 프로세스 1.사용자가 id /password를 입력하여 로그인을 시도합니다. 2.서버는 요청을 확인하고 secret key를 통해 Access Token을 발급합니다. 3.JWT 토큰을 클라이언트에 전달합니다. 4.이후 JWT가 요구되는 API를 요청할 때는 클라이언트가 Authorization Header에 Access Token을 담아 보냅니다. 5.서버는 JWT signature를 체크하고 Payload로부터 user정보를 확인해 데이터를 리턴합니다 클라이언트의 로그인 정보를 서버 메모리에 저장하지 않기 때문에 토큰기반 인증 메커니즘을 제공합니다. 인증이 필요한 경로에 접근할 때 서버 측은 Authorization Header에 유효한 JWT가 존재하는지 확인합니다. JWT에는 필요한 모.. 더보기 [JWT] JSON Web Token 소개 및 구조 ※ JWT 정의 JSON Web Token(JWT) 은 웹표준(RFC7519) 으로서 두 개체에서 JSON객체를 사용하여 가볍고 자가수용적인(self-contained)방식으로 정보를 안정성 있게 전달해줍니다. ※ JWT 구조 Header, Payload, Signature ● Header typ : 토큰 타입 지정 alg : 해싱 알고리즘 지정, 보통 "HMAC SHA25t6" 혹은 "RSA" 방식이 사용되며, 이 알고리즘은 토큰을 검증 할 때 Signature 부분에서 사용됩니다. { "typ" : "JWT" "alg" : "HS256" } ● Payload 토큰에 담을 정보가 들어있습니다. 여기에 담는 정보의 한 '조각'을 클레임(claim) 이라고 부르고 이는 name/value의 한 쌍으로 이루.. 더보기 이전 1 다음