<aside> 📌 요약: Authentication(인증): 이 사용자가 누구인지(identity) Authorization(인가): 사용자의 권한(permission)을 부여하는 것 access control(출입관리): 특정 resource에 대해 사용자의 권한(permission)을 체크하는 것
회원가입 방식 중에 구글로 로그인, 네이버로 로그인 같은 것들은 3rd-party 서비스에서 회원 정보를 가져와 가입하는 OAuth2.0 이다. OAuth2.0(Open Authorization 2.0)은 인가를 위한 기술이다.
인증(Authentication)이 완료되면 서버는 인증서(세션ID, 웹 토큰 등의 모양으로)를 발급한다. 인증서에는 사용자의 기본적인 정보와 권한 등이 들어간다. 사용자는 인증서를 가지고 서비스를 이용할 수 있다.
인증 방법에는 두 가지가 있는데 Session 방법과 Web Token 방식이 있다.
세션 방법은 로그인 발생 시 서버가 DB에 세션 정보를 저장하고 쿠키에 담아서 클라이언트에 전송하는 방식. 쿠키를 통하여 소통. Session을 저장한 저장소가 다운되면 유저들이 강제 로그아웃이 된다. 한 유저가 여러 기기를 통해 접속하는 등의 문제로 저장소 용량 문제가 있다. 서버에서 로그인 정보를 저장해서 관리하는 Stateful한 인증 방식이다.
웹 토큰 방법은 로그인 발생 시 서버가 사용자를 식별할 수 있는 토큰(Web Token)을 생성하여 클라이언트에 발급. 토큰 생성시 토큰에 서명함. 클라는 발급 받은 토큰을 로컬저장소에 저장하여 이후 서버에 리퀘스트를 보낼 시 해당 토큰을 헤더에 담아 보낸다. 서버는 토큰 검증을 진행하고 통과하면 요청을 처리. 서버가 로그인 정보를 저장하지 않는 Stateless한 인증 방식. 서버가 별도의 세션 저장소를 둘 필요가 없다는 장점이 있다. 토큰을 클라이언트가 가지고 있기 때문에 서버에 문제가 생겨도 강제 로그아웃 되는 일이 없다. 하지만 토큰 사이즈가 커지면 HTTP request 사이즈가 너무 커진다. → 느려짐 토큰이 유출되면 외부 사용자가 토큰을 가지고 유저행세 가능… → 보안 문제
인가(Authorization): 사용자의 리소스 접근 권한을 체크하는 과정. 기본적인 세가지 요소: Role(Who), Permission(can access), Resource(what)
SOP(Same-Origin Policy)는 정책인데 웹페이지나 웹앱이 출처(Origin)이 다른 곳에서 HTTP request를 통해 데이터를 사용할 수 없도록 하는 브라우저의 정책이다. SOP에 예외를 두는것이 CORS(Cross-Origin Resource Sharing). origin이 다른 곳에서의 HTTP request 요청 허용.
배포란 특정 환경(개발환경 이외의 환경)에 완성된 코드를 옮겨서 실행하는 행위다. Nginx로 배포할때 포트로 나눠서 웹서버와 웹앱을 분리할 수 있고(Option1), 웹서버를 앞에 두고 웹앱을 뒤에 두고 같은 포트를 사용하는 방법이 있다.(Option2)(Reverse Proxy)
</aside>