Authentication은 정형적인 방법이 있는데 Authorization은 개발자의 역량에 달려있다.
브라우저가 있고 이 브라우저에서 들고 있을 정보를 쿠키 형태로 저장한다. (쿠키는 브라우저가 설정하기도 하고 요청을 보내는 서버에서 이 정보를 들고있으라고 전송해주기도 한다.)
먼저 클라이언트가 로그인 요청을 한다. 만약 이 요청이 옳은 정보라면 서버에서 데이터베이스 조회를 통해 실제로 사용 가능한 사용자인지 확인을 하고 확인이 되면 sessionid 값을 쿠키로 넘겨준다.
그리고 그 후 모든 요청에다 자신의 sessionid를 포함시킨다. 그러면 서버에서 sessionid의 값을 확인하고 sessionid에 소속되어 있는 유저정보를 파악함으로써 정보를 가지고 올 수 있다.
쿠키는 기본적으로 도메인을 기반으로 저장된다. 따라서 어떤 도메인에서 또다른 도메인에 저장되어있는 쿠키를 확인할 수 없다.
먼저 암호화 방법에 대해 알아보자.
빠르고 자원 소모가 적음
양측이 동일한 키를 가지고 있어야 함 (대칭키)
같은 키를 공유하지 않으면 암호화/복호화를 할 수 없다.
공개키와 개인키가 있다. 공개키는 말 그대로 공개되어 있는 키이고 개인키는 서버 내부에만 저장하고 공개하지 않는 키이다.
암호화를 할 때는 공개키를 통해 진행한다. 공개키를 사용하여 http요청을 암호문으로 바꾼다. 대칭키와는 다르게 공개키를 이용해서 암호화를 했지만 공개키로 복호화는 하지 못한다.
이때 복호화를 하기 위해서는 개인키가 필요하다. 따라서 공개키와 개인키 두 가지가 다 있어야 정상적으로 작동한다.
TLS는 대칭키 암호화와 공개키 암호화 두 가지 방법을 모두 사용한다.
먼저 브라우저가 서버에 첫번째 요청을 보낼 때 사용 가능한 암호화 방식을 알려달라고 함께 요청을 보낸다. 그러면 서버 측에서는 사용 가능한 암호화 방식 중 하나를 선택해서 자신의 인증서(자기는 믿을만한 서버임을 인증)와 함께 전달한다.
이렇게 1차적인 요청을 하고 나면 서버의 공개키는 브라우저에 있게 된다.
브라우저쪽에서는 서버의 공개키를 이용해서 대칭키를 만든 후 서버의 공개키로 암호화한다. 그리고 암호화된 대칭키를 서버에 전달하고 서버의 개인키를 이용하여 대칭키를 확인하도록 한다.
그 다음 공유된 대칭키를 이용해서 응답을 암호화해서 브라우저에 전송하면 그 대칭키로 암호문을 평문으로 바꿔주고 실제로 서비스를 제공받기 위한 요청을 대칭키로 암호화해서 전달한다. 이렇게 주고 받으면서 전달하고 전달받는다.