cs

로그인

ssoonn 2024. 7. 15. 22:08

인증과 인가

 

인증: 유저가 누구인지 확인하는 절차

인가: 유저의 요청에 대한 권한을 확인하고, 허가함

 

세션기반인증방식

session과 cookie가 사용되며, 아래와 같이 진행된다.

 

1. 유저가 로그인을 하면 서버 메모리 상에 세션이 저장됨 (세션 구분 위해 세션id를 기준으로 정보 저장)

2. 클라이언트의 브라우저에 쿠키로 세션id가 저장됨

3. 브라우저는 해당 사이트에 대한 모든 request에 세션id를 쿠키에 담아 전송

4. 서버는 클라이언트가 전송한 세션id와 서버 메모리를 관리하는 세션 id 비교

5. 일치 시 인가 수행

 

  • 사용자가 로그인하면 서버는 사용자의 인증 정보를 기반으로 세션을 생성 및 관리. 사용자가 로그아웃하거나 세션이 만료되면 세션은 삭제됨
  • 서버에 저장되는 세션 정보로 인해 서버의 자원이 사용될 수 있으며, 확장성이 제한될 수 있음

 

토큰기반인증방식 (JWT)

1. 유저가 로그인 요청

2. id, pw 정보가 유효 -> 서버에서 secret key를 사용해 유저에게 토큰 발급

3. 클라이언트: 발급받은 토큰 저장. 서버에서 요청할 때마다 해당 토큰을 서버에 전달

4. 서버는 토큰을 검증하고, 요청에 응답

 

  • 서버에서 세션을 관리하지 않기 때문에 서버의 부하가 줄어들고, 확장성이 높아짐. 토큰은 보안적으로 서명되어 있어 변조 어려움
  • 토큰은 만료 기간을 가질 수 있고, 이를 통해 보안 수준을 더욱 향상 가능

JWT의 종류

access토큰

Access token은 보호된 정보들(유저의 이메일, 연락처, 사진 등)에 접근할 수 있는 권한부여에 사용한다.

클라이언트가 처음 인증을 받게 될 때(로그인 시), access, refresh token 두가지를 다 받지만, 실제로 권한을 얻는 데 사용하는 토큰은 access token 이다.

비교적 짧은 유효기간을 주어 탈취 되더라도 오랫동안 사용할 수 없도록 하는것이 좋다.

refresh토큰

Access token의 유효기간이 만료된다면 refresh token을 사용하여 새로운 access token을 발급받는다. 이때, 유저는 다시 로그인할 필요가 없다.

 

 

토큰 기반 인증은 분산 시스템/서버 간 통신을 위한 API 보안에 적합한 반면, 세션 기반 인증은 전통적인 웹 애플리케이션에 더 적합하다.

 

ref.

https://velog.io/@chickenrun/%EC%84%B8%EC%85%98-%EC%9D%B8%EC%A6%9D-%EB%B0%A9%EC%8B%9D-VS-Token-%EC%9D%B8%EC%A6%9D%EB%B0%A9%EC%8B%9D%EC%9D%B8%EC%A6%9D%EA%B3%BC-%EC%9D%B8%EA%B0%80

 

세션 인증 방식 VS Token 인증방식(인증과 인가)

HTTP는 본래 정보를 유지하지 않는 statless한 특성을 가져, 각 통신의 상태가 저장되지 않기 때문에 웹사이트에서 인증을 관리하기 위한 방법이 필요하다.유저가 어떤 사이트를 이용 중일 때 유저

velog.io

https://velog.io/@usreon/%ED%86%A0%ED%81%B0-%EA%B8%B0%EB%B0%98-%EC%9D%B8%EC%A6%9D-Token-based-Authentication

 

토큰 기반 인증 (Token-based Authentication)

세션 기반 인증은 서버(혹은 DB)에 유저 정보를 담는 인증 방식이었다. 서버에서는 유저가 민감하거나 제한된 정보를 요청할 때마다 "지금 요청을 보낸 유저에게 우리가 정보를 줘도 괜찮은가?"

velog.io