티스토리 뷰


인증

  • 인증(Authentication)은 서비스를 이용하려는 유저가 등록된 회원인지 확인하는 절차이다 기본인증 (Basic Authentication)과 토큰 기반 인증 (Token-based Authentication), OAuth 등이 있다
  • HTTP 프로토콜에서는 보통 헤더에 인증 정보를 포함하여 요청을 전송한다

인가

  • 인가(Authorization)는 특정 리소스에 접근할 수 있는 권한이 있는지 확인하는 절차이다
  • 주로 인증된 사용자에 대한 접근 제어를 다룹니다. 인가는 사용자의 역할, 그룹, 권한 등을 기반으로 한다
  • HTTP 프로토콜에서는 주로 요청의 특정 부분에 권한 정보를 포함하여 요청을 전송하거나, 서버에서 요청을 받은 후에 권한을 확인하여 응답을 제공한다

 


http 프로토콜 통신의 특징

무상태(Stateless)

  • 서버는 클라이언트의 이전 요청에 대한 상태를 기억하지 않기 때문에 각 요청마다 서버에서 요구하는 모든 상태정보를 담아 요청해야 한다
  • 각 요청은 독립적으로 이전 요청과는 별개로 처리되기 때문에 서버의 부하를 줄이고 확장성을 높일 수 있다
  • 무상태성은 서버에서 세션 유지, 클라이언트 상태관리를 하지 않기 때문에 간단하고 효율적인 통신이 가능하지만 클라이언트와 서버 간의 상태공유가 어렵다는 단점도 있다

 

 

비연결성(Connectionless)

  • 비연결성은 클라이언트와 서버 간의 연결이 지속되지 않기 때문에 각 요청마다 새로운 연결이 설정되고 응답 후에는 서버와의 연결이 끊어진다
  • 비연결성으로 인해 서버는 응답 후 연결을 끊기 때문에 동시에 많은 연결을 유지할 필요가 없어지므로 서버의 부하를 줄이고 확장성을 높이는데 도움이 된다
  • 사용자당 요청이 잦은 서비스의 경우 매번 연결을 설정하고 해제하는 오버헤드가 발생할 수 있습니다.
오버헤드(Overhead)
어떤 작업을 수행하는 데 추가적인 비용이나 부담을 의미한다.

 

 


쿠키 (cookie)

  • 브라우저에 저장되는 텍스트 파일이며 key-value 형태로 저장되며, 사용자 인증이나 세션 관리 등에 사용된다
  • 쿠키는 별도로 삭제처리하거나 유효기간이 만료되지 않는 이상 서버와 통신할 때 자동으로 주고받게 된다
  • 서버에서 클라이언트에게 특정 API 요청에 대한 응답을 보낼 때, 응답의 헤더(Header)에 Set-Cookie 속성을 포함하여 쿠키 정보를 클라이언트에게 전송할 수 있으며 응답을 받은 브라우저는 쿠키를 브라우저에 자동으로 저장한다
  • 서버에 http 요청할 때마다 브라우저에 저장되어 있는 쿠키는 자동으로 서버에 보내진다. (단, 동일한 Origin 또는 CORS를 허용하는 Origin에만 쿠키를 보낸다. ex- 유튜브 서버에서 받은 쿠키는 유튜브 이용 시에만 주고받을 수 있다.)
쿠키 확인 방법
(저장된 쿠키정보는 개발자도구 → 애플리케이션 → 저장용량 → 쿠키에서 확인 가능)

Origin(출처)
protocol + host + port를 의미한다.

CORS(Cross Origin Resource Sharing)
다른 출처에 리소스 요청하는 것을 허용하는 정책
다른 출처에 리소스 요청하는 것을 허용하는 정책

Origin 예시 이미지

 


세션 (session)

  • 사용자와 서버 간의 연결이 활성화된(인증이 유지되고 있는 상태(로그인상태)) 상태를 의미하는 개념으로 세션은 서버 측에 클라이언트 상태 정보를 저장한다.(로그인 정보)
  • 클라이언트가 서버에 접속하면 서버는 클라이언트에게 고유 ID를 부여하고 저장하며 클라이언트가 요청을 보낼 때마다 서버에서 세션 ID를 확인하고 저장된 상태 정보를 가져와 사용한다
  • 로그인 성공 → 서버에서 세션 생성 및 저장(key-value 형식) → key(sessionId)를 브라우저에 응답(by 쿠키)

JWT(JSON Web Token) 토큰 인증 방식

  • 인증(Authentication)과 정보 교환을 위한 개방형 표준으로 클라이언트와 서버 간의 안전한 통신을 위해 사용된다
  • JWT를 사용하면 서버는 클라이언트에게 정보를 안전하게 전달할 수 있다
  • 로그인 / 회원가입 시 토큰 인증
  • 인가에 필요한 API 요청/ 응답
* 개방형 표준(Open Standard)

특정 기술이나 프로토콜이 자유롭게 사용 가능하고, 공개적으로 문서화되어 있으며, 특정 기관이나 단체에 종속되지 않은 표준을 의미하며, 개발자들이 해당 기술이나 프로토콜을 쉽게 이해하고 구현할 수 있도록 해준다.

* 개방형 표준의 예시

HTTP(Hypertext Transfer Protocol)
HTTP는 웹 브라우저와 웹 서버 간의 통신을 위한 프로토콜로, 웹에서 가장 널리 사용되는 표준이다

JSON(JavaScript Object Notation)
JSON은 데이터를 교환하기 위한 경량의 데이터 형식으로, 자바스크립트에서 사용되는 객체 표현 방식을 기반으로로한다

OAuth
OAuth는 인터넷 서비스에서 사용자의 인증 및 인가를 위한 개방형 표준으로 클라이언트 애플리케이션이 사용자의 리소스에 접근할 수 있는 권한을 획득하는 프로토콜이다

 

JWT(JSON Web Token) 토큰 사용 방법

  1. 토큰 생성: 사용자가 로그인하거나 인증되면 서버는 해당 사용자에 대한 JWT를 생성한다 이 JWT는 일련의 정보를 포함하고, 일반적으로는 사용자 ID, 권한 등이 포함된다
  2. 토큰 전달: 서버는 클라이언트에게 생성된 JWT를 전달한다. 일반적으로는 HTTP 헤더의 Authorization 헤더나 쿠키 등의 방법을 통해 전달된다.
  3. 토큰 검증: 클라이언트가 서버에 요청을 보낼 때마다 JWT를 함께 전송한다 서버는 해당 JWT를 검증하여 사용자의 신원과 권한을 확인하며 이를 통해 인증을 수행한다
  4. 토큰 갱신: 일부 JWT는 만료 기간이 있을 수 있다.(로그인 유효 시간 등) 만료된 JWT는 더 이상 유효하지 않으므로 클라이언트는 새로운 JWT를 요청해야 한다 일부 시스템은 만료된 JWT를 갱신할 때마다 새로운 JWT를 발급하여 사용합니다.(새 인증 번호 발급)
Refresh Token
보안 강화 리소스 접근 인가를 받기 위해 사용되는 토큰을 Access Token이라고 부른다
Access Token의 만료기간을 길게 잡고 인증상태를 오래 가져갈 경우 서버 부담은 줄어드나 보안성(탈취당할 경우)에 허점이 있다.
인증 보안이 중요한 서비스의 경우 인증 시 2개의 토큰 (Access Token, Refresh Token)을 발급하며 Access Token의 기간은 30분 정도로 짧게 유지되고, Refresh Token은 1~2주 정도로 길게 유지시키는 경우가 많다.
서버에서는 Access Token이 만료되었을 때 Refresh Token 이 유효한 상태면 새로운 Access Token을 클라이언트에 발급해 주고 인증상태를 유지할 수 있도록 하고, Refresh Token 만료 시 다시 로그인하라는 메시지를 응답한다(일정 시간이 지나면 로그인 상태가 만료되는 것)
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함