2. 회원가입
웹브라우저 서버 DB
SSL을 이용한
ID, 비밀번호 등 회원 정보 전달 전달된 정보를 DB에 저장
DB의 정보가 해커에 의해 새어나가면 비밀번호가 노출될 위험이 있다.
이를 위해 비밀번호는 단방향 암호화를 하여 DB 정보가 유출되어도 비밀번호가 무엇인지 알아낼 수 없도록 한다.
3. 세션을 이용한 로그인
웹브라우저 서버 DB
SSL을 이용한
ID, 비밀번호 등 회원 정보 전달
DB에서 ID를 기준으로
사용자 정보 조회 및 비밀번호 확인
로그인시 ID를 기준으로 사용자 정보를 DB에서 가져 온다.
이 후 전달된 비밀번호를 단방향 암호화 후 DB에 저장되어 있는 암호화된 비밀번호와 비교한다.
인증이 완료되면 서버는 클라이언트의 세션에 아이디를 저장한다.
세션 정보는 웹브라우저가 닫히면 사라지며, 대게 안전하다.
세션에 사용자 ID를 저장
4. 세션을 이용한 요청
웹브라우저 서버 DB
요청(세션 정보)
세션에서 사용자 ID를 꺼내어
사용자 정보를 DB에서 읽어옴.
이후 브라우저에서 요청시 서버는 세션안에 있는 사용자 ID를 꺼내어 DB에서 해당 계정 정보를 가져온다.
계정 정보가 DB에 존재한다면 요청을 처리하고 그렇지 않으면 요청을 거부한다.
5. 세션을 이용한 로그아웃
웹브라우저 서버 DB
로그아웃
세션에 있는 사용자 ID를 삭제한다.
사용자가 로그아웃을 요청하면 서버는 세션에 있는 사용자 ID만 삭제해 주면 된다.
사용자가 브라우저를 닫더라도 세션 정보가 자동으로 삭제 된다.
6. 쿠키를 이용한 로그인
웹브라우저 서버 DB
SSL을 이용한
ID, 비밀번호 등 회원 정보 전달
DB에서 ID를 기준으로
사용자 정보 조회 및 비밀번호 확인
쿠키는 클라이언트 PC의 하드디스크에 저장되므로 안전하지 않다.
때문에 사용자 ID를 암호화 하고 22자리의 랜덤 스트링으로 이루어진 쿠키 비번을 함께 저장한다.
쿠키에 다음 두 정보를 저장
사용자 ID, 생성한 22자리의 랜덤 스트링 저장
(쿠키 비번)
22자리의 랜덤 스트링 생성 후
단방향 암호화하여 DB에 저장
(쿠키 토큰)
7. 쿠키를 이용한 요청
웹브라우저 서버 DB
요청(쿠키 정보)
쿠키에서 사용자 ID를 꺼내어
복호화 후 사용자 정보를
DB에서 읽어옴.
쿠키 비밀번호가 DB에 있는
쿠키 토큰과 동일한지 비교
서버에서 쿠키의 생존시간을 길게 설정한다면 쿠키 정보는 계속 사용자의 저장장치에 남아 있게 된다.
때문에 브라우저를 닫고 다시 시작하더라도 자동으로 로그인이 된다.
8. 쿠키를 이용한 로그아웃
웹브라우저 서버 DB
로그아웃
쿠키 토큰 삭제
쿠키에서 사용자 ID,
쿠키 비밀번호 삭제
DB에 존재하는 쿠키 토큰 정보를 삭제함으로써, 이전 쿠키 정보를 재사용하지 못하도록 한다.
9. 쿠키와 세션의 동시 사용
로그인 : 세션에 정보 저장 후 쿠키에 정보 저장.
!
요청 : 세션 정보로 인증 후 실패시 쿠키 정보로 인증.
!
로그아웃 : 쿠키 정보 삭제 후 세션 정보 삭제.
10. REST API에서의 사용자 인증
REST API와 기존 방식과의 가장 큰 차이점은 세션이나
쿠키가 없다는 것.
!
세션이나 쿠키 정보도 결국 클라이언트에서 전달되는 정
보.
!
따라서 API 호출시 기존에 쿠키로 전달되는 정보를
HTTP 헤더에 넣어서 직접 전달해 주면 됨.
!
상용에서 구현시에는 OAuth 2.0 프로토콜을 이용하는
것이 좋을 듯.