[Spring Web] Web Service의 인증

HOJUN·2024년 6월 22일

Backend - Spring

목록 보기
32/34

Authentication

인증은 클라이언트가 "누구"인지 확인하는 과정이다. 기본적으로 ID와 패스워드, 혹은 사용자의 정보를 이용해 인증을 거친다.

Authoraization

인가는 그 "누가" 접근하고자 하는 작업의 리소스 혹은 서비스를 제공해도 되는지를 판단한다.

우리는 대한민국에서 주민등록증을 발급받았다. 만 19세가 지나 주점에서 주류를 구매하기 위해서 주점에 신분증을 제시하고 신원을 확인한다.
주민등록증을 발급받아 우리의 신분을 인증 받았고, 주점에서 신분증을 확인해 주류를 구매하는 권한을 인가받은 것이다.

웹에서는 사용자가 접근하기 위해서 API요청을 하면 서버에서 응답을 내리기 이전 사용자의 인증 정보를 바탕으로 사용자 인증을 진행한다.
등록된 인증정보인지 확인된다면 권한을 응답받아 API권한을 인가받는다.

- HTTP Session

웹 애플리케이션에서 사용자 정보를 저장하는 기술
Request - Response 방식으로 진행되며 HTTP 프로토콜은 Stateless 특성을 가져 상태정보를 유지할 수 없다.
사용자의 세션은 웹 애플리케이션에 접속한 후 일정시간(웹 브라우저 혹은 커넥션이 유지되는)동안 정보가 유지된다.

  • Session 정보는 서버에 저장되고 인증 정보를 검증해 Session ID를 생성해둔다.
  • 세션은 서버에서 관리되며 사용자가 임의로 세션 정보를 조작할 수 없다.
  • 세션 ID는 쿠키를 통해 사용자에게 전달되고 웹 애플리케이션에서 인가한다.

서버에 세션이 관리된다는 것은 서버에 저장되는 리소스가 존재한다는 것이다.
그렇다는 것은 보안에 좋지만, 사용자가 많은 웹 브라우저는 부하가 걸릴 수 있다는 뜻이다.

클라이언트의 브라우저에 쿠키를 저장한다.
로그인 정보 혹은 기타 데이터 혹은 설정 등을 쿠키에 저장해 활용할 수 있다.
로그인 과정에서 서버는 쿠키를 이용해 클라이언트의 인증 정보를 유지한다. 유효기간이 존재하고 유효기간이 지나면 쿠키는 삭제된다.

  • 서버는 사용자의 로그인을 검증하고 인증을 성공하면 사용자의 고유ID와 쿠키를 생성한다.
  • 서버는 쿠키를 HTTP Header에 포함해 클라이언트에 전송한다.
  • 클라이언트의 로컬 브라우저에 쿠키를 저장한다.
  • 이후 서버에 요청을 보낼 때마다 쿠키를 이용해 HTTP Header에 포함해 전송한다.
  • 서버는 쿠키를 통해 사용자 인증을 진행하고 응답을 내린다.

key - value 로 이루어져 있고, 이름, 값, 유효기간, 도메인, 경로 등의 정보를 포함한다.
값을 클라이언트가 가지고 있다는 뜻은 보안에 민감하다는 것이다. 쿠키에 민감한 정보를 포함하는 경우 보안 프로토콜을 통해 암호화해야한다.

- HTTP Header

말 그대로 Header에 정보를 저장한다. HTTP basic auth나, HTTP basic Digest, OAuth 등의 프로토콜을 통해 이루어진다.

그 중 basic같은 경우 요청 -> 인증요구 -> 인증 -> 성공의 단계로 진행되고 각 레이어에 해당하는 header가 존재한다.

서버가 인증을 요구함에 따라 클라이언트는 header에 id/pw가 적힌 authorization을 적어 보낸다.
이는 base64라는 인코딩 방식으로 암호화되지만, 복호화가 가능한 평문으로 안전하지 않다.
때문에 Https/TLS와 basic 인증은 함께 사용되어야 안전하다.

0개의 댓글