기본개념
1. 쿠키/세션
: 서버와 클라이언트는 계속 연결되어 있지 않기 때문에 서버에 오는 모든 요청마다 클라이언트가 누구인지 확인해야 한다.
매 요청마다 로그인 하는 과정을 반복한다고 생각한다면 너무 비효율적이므로, 한번 로그인 하면 일정 기간 동안 유효한 자유이용권을 하나 발급해준다.
참고 interconnection.tistory.com/74
2. 세션이 외의 인증방법
- 세션은 별도의 저장소가 필요하므로 많아지면 문제다. 세션ID(토큰) 에 전체 내용을 담아서 사용하는 방법 JWT
- 특정 서비스 외에 여러 서비스를 한번에 인증하여 사용하는 방법 OAuth
3. 대칭형, 비대칭형 암호화
- 대칭형은 1개의 키를 양쪽이 잘 주고 받아서 이 키로 암복호화를 하는 것, 키를 공유하는 과정에서 탈취당하면 끝
- 비대칭형은 2개의 키를 쌍으로 가지고 있어서, 공개키로 암호화한 것은 개인키로 복호화 가능하고, 개인키로 암호화한 것은 공개키로 복호화 한다.
- 비대칭형 암호화의 예시1 : 공개키를 상대방에게 전달하여 이것으로 암호화 해달라고 한다. 그리고 공유되지 않은 개인키로 복호화해서 사용 (개인키를 가진 사람만 볼 수 있다는 보안의 개념)
- 비대칭형 암호화의 예시2: 개인키로 암호화된 암호문을 공개키와 함께 전달한다. 이 암호문이 복호화에 성공한다는 것은 개인키로 암호화 한 것이 확실함을 인증 할 수 있다. (내가 암호화 한것이 확실하다는 인증의 개념)
4. SSL 인증
- CA(인증기관) 은 CA 의 공개키는 미리 브라우저에 저장되어 있다.
- 브라우저가 서버에 접속하면 서버는 CA의 개인키로 암호화 된 인증서를 전달한다.
- CA 리스트 중에서 맞는 CA 를 찾아서 해당 공개키로 복호화 하면 그 안에 서버의 공개키가 들어있다.
- 이때 CA 의 공개키로 복호화에 성공 한 것은 CA 가 이 서버를 정상적인 서버로 인증한다는 것도 포함되어 있다.
- 이후 브라우저와 서버는 각각의 공개키와 개인키로 암복호화 하여 통신
참고 wayhome25.github.io/cs/2018/03/11/ssl-https/
세션 관리 방법
중복 로그인을 허용하는 범위 내에서 세션을 생성하고 삭제 할 때까지 어떤 과정으로 진행되는지 알아보자.
1. 로그인하여 세션 생성
인증(Authentication) - 데이터베이스의 사용자 정보와 클라이언트가 보낸 정보가 일치하는지 확인
세션 객체와 uuid 생성 후 이것을 토큰key 로 redis 에 set 하고 만료시간을 설정 - 세션 객체는 문자열로 직렬화
사용자의 세션이 여러개 발생 할 수 있으므로 redis 에 사용자 세션 sets 를 관리
2. 요청시 세션 확인 및 만료시간 갱신
클라이언트가 보낸 토큰으로 redis 에서 get(토큰) 하여 세션을 가져온다. - spring 에서는 HandlerInterceptor 이용
유효하면 만료시간 갱신하여 계속 세션을 유지시킬 수 있다.
3. 인가/권한 부여(Authorization) 확인
해당 요청을 수행할 수 있는 권한이 있는지 확인 - url 기준으로 할 수 도 있고... 여러가지 방법이 있음
중략
4. 로그아웃
로그아웃을 하게 되면 클라이언트가 보낸 토큰을 이용하여 세션을 삭제
aws 기준으로 로그인한 클라이언트의 세션만 삭제(사용자의 전체 세션이 아님)
5. 비밀번호 변경 시
변경된 사용자의 전체 세션 삭제
redis의 사용자 세션 sets 에서 token key 를 읽어서 삭제
6. 사용자 정보 변경 시
변경된 사용자의 세션을 모두 update 해주고 클라이언트로 이벤트 전송
'SW 공부' 카테고리의 다른 글
[Kotlin] 코루틴 기초 (0) | 2021.03.19 |
---|---|
[Ssh] ssh 키를 이용하여 로그인하기 (0) | 2020.11.01 |
[Spring] service 테스트 작성 요령 (0) | 2020.07.06 |
[JPA] 복합키(Composite Key) 생성 및 관계 맺기 (0) | 2020.04.23 |
[JPA] OneToOne 테이블 설계와 JPA 매핑 (0) | 2020.01.07 |