목표
토이프로젝트 고찰, 보완
결과
JWT(JSON Web Token)
인증에 필요한 정보들을 암호홧기킨 JSON 토큰.
JWT 토큰을 HTTP 헤더에 실어 서버가 클라이언트를 식별함
JSON 데이터를 인코딩하여 직렬화하였고 내부에 위변조 방지 위한 전자 서명도 있음
. 을 구분자로 세 부분으로 나뉨 (헤더, 내용, 서명)
인증 과정
1. 사용자가 ID, PW 입력해 서버에 로그인 인증을 요청함
2. 서버가 인증 요청을 받으면 헤더, 내용, 서명을 정의한다. 헤더, 내용, 서명을 각각 Base64로 한 번 더 암호화해 JWT 생성 후 이를 쿠키에 담아 클라이언트에게 발급
3. 클라이언트는 서버에서 받은 JWT를 로컬 스토리지에 저장한다. API를 서버에 요청할 때 Authorization header에 Access Token을 담아서 보냄
4. 서버가 할 일은 클라이언트가 header에 담아서 보낸 JWT가 내 서버에서 발급한 토큰인지 일치 여부를 확인한다. 만약 일치한다면 내용에 들어있는 유저 정보들을 클라이언트에게 돌려줌
5. 클라이언트가 서버에 요청했는데 Access Token 시간이 만료되면 Refresh Token 을 이용해 서버로부터 새로운 Access Token을 발급한다.
장점
- 데이터 위변조 막을 수 있음
- 인증 정보에 대한 별도 저장소 필요없음
- 세션은 클라이언트 정보를 저장하지만, JWT는 서버가 무상태(stateless)가 되어 서버 확장성이 우수해짐
- 토큰 기반으로 다른 로그인 시스템에 접근, 권한 공유 가능
단점
- 토큰 자체게 정보가 들어있어 양날의 검이 될 수 있음
- 토큰 길이가 긺
Spring Security
인증 과정
1. 사용자가 로그인 정보와 함께 인증 요청함
2. AuthenticationFilter가 요청을 가로채고, 가로챈 정보를 통해 UsernamePasswordAuthenticationToken의 인증용 객체를 생성함.
3. ProviderManager에게 생성한 토큰을 전달함
4. AuthenticationManager는 등록된 AuthenticationProvider들을 조회해 인증을 요구함.
5. 실제 DB에서 사용자 인증 정보를 가져오는 UserDetailService에 사용자 정보 넘겨줌
6. AuthenticationProvider는 UserDetails를 넘겨받고 사용자 정보를 비교함.
7. 인증이 완료되면 사용자 정보를 담은 Authentication 객체를 반환함.
8. 다시 최초의 AuthenticationFilter에 Authentication 객체가 반환됨.
9. Authentication 객체를 SecurityContext에 저장
'2024 하계 모각코' 카테고리의 다른 글
2024 하계 모각코 5주차 - 목표 및 결과 (0) | 2024.08.08 |
---|---|
2024 하계 모각코 4주차 - 목표 및 결과 (0) | 2024.08.04 |
2024 하계모각코 3주차 - 목표 및 결과 (0) | 2024.07.31 |
2024 하계 모각코 1주차 - 목표 및 결과 (0) | 2024.07.10 |
[2024 하계 모각코] 개인 계획 (0) | 2024.07.10 |