Security 인증방식의 종류와 차이점

2021. 11. 10. 02:15학습일지

Security 인증방식

개요

security를 직접 적용하고 사용하기 전에, 인증방식의 종류와 선택의 기준을 확고히 하기 위해 이 문서를 작성함.

인증(Authentication)이란?

  • Who are you?
  • 보편적으로는 아이디, 비밀번호를 입력하여 사용자를 확인하는 과정을 말한다.
  • API의 경우 호출하는 대상을 확인하는 절차가 필요하다.

Session

Session 이란?

  • 일반적으로 사용자가 인증을 하기위해 아이디/비밀번호를 입력하면, 서버는 Session DB는 해당 사용자 Session을 생성한다.
  • Session에는 별도의 ID가 있다.
  • 웹 브라우저에서는 일반적으로, Session ID를 쿠키로 저장하여, 인증이 필요한 리소스에 요청을 할 때마다, Session ID의 쿠키 값을 이용한다.

Token

Session의 경우, 웹 브라우저 뿐만 아니라, 안드로이드, IOS 환경에서도 활용할 수 있다. 그러나, 쿠키는 브라우저에서만 사용이 가능하기 때문에, Session ID를 쿠키로 관리한다면, 앱 환경에서는 세션ID를 저장하여 사용할 수 없다. 바로 이경우 활용할 수 있는 것이 Token 이다.

Token 이란?

  • Token은 간단히 말자하면 무작위의 조합으로 생성된 문자열이다.
  • 따라서 앱 환경에서는 Token을 활용하여, Session 서버에 일치하는 토큰 값을 통해 사용자를 찾아 인증여부를 확인할 수 있다.

JWT

  • Token 방식을 활용하여, 사용자 인증을 처리하는 방식.
  • 일반적인 경우, Token의 값 자체는 의미 없는 무작위의 문자열이지만, JWT의 Token 값은 Claim 형태의 사용자 정보를 Base64 기반으로 인코딩하여 저장한 값이다.
  • JWT의 토큰값은 암호화가 적용되지 않았기 때문에, 비밀번호와 같은 민감한 정보는 포함해선 안된다.

만약 웹 뿐만이 아니라, 다른 플랫폼(안드로이드나 IOS)과 같은 환경에서도 호환되는 인증방식을 채택하고 싶다면, token 형태의 인증 방식을 채택해야 한다. 그리고 그 토큰에 저장할 값을 상황에 따라, session ID와 같이 그 자체로는 크게 의미 없는 값을 토큰에 넣어서, 사용자 인증을 서버에게 완전히 위임하느냐, 혹은 JWT 처럼 사용자 인증에 필요한 정보를 Token에 저장하여 좀더 느슨한 방식의 인증을 하느냐를 생각하면 될 것 같다.

Session(with cookie or token)의 장점과 단점

Session의 장점

  • 사용자 정보를 서버에 저장하고 있기 때문에, 안전하다.
  • 사용자의 인증 정보를 서버에서 관리할 수 있기 때문에, 원격 로그아웃 및 사용자 정보를 활용하는 서비스를 구현할 수 있다.
    • 예시. 넷플릭스의 경우, 하나의 계정으로 동시에 사용할 수 있는 사용자의 수를 조절할 수 있다.
    • 만약 인증정보를 탈취당하게 될 경우, 서버에서 원격으로 강제 로그아웃을 시킬 수 있다.

Session의 단점

  • session 방식의 인증의 경우, 사용자 인증에 필요한 정보가 전부 서버에 있기 때문에, 각 요청마다 서버는 Session ID를 받아서 사용자를 찾는다. 즉, 요청이 있을때마다 DB를 찾아야 한다.
  • 즉 유저가 늘어남에 따라 세션 DB 리소스가 더 많이 필요한 경우가 생긴다.
  • 관리하는 애플리케이션 서버가 증가함에 따라, 사용자의 세션정보의 일관성을(로그인하는 사람은 로그인 상태를 유지하는 등) 유지하기 위한 별도의 서버가 필요하다.

JWT의 장점과 단점

JWT의 장점

  • session과 다르게 토큰 값 자체에 사용자 인증에 필요한 정보가 포함되어 있다. 그래서 서버는 해당 토큰이 유효한지만, 검사하면 된다.
  • 즉 세션을 자세하게 관리할 세션 DB가 없어도 된다.

JWT의 단점

  • 인증 과정에서 서버를 거치지 않기 때문에, 만약 토큰값을 탈취당할 경우, 서버에서 대처할 수 있는 방법이 없다.
  • 사용자를 쫓아내거나, 원격으로 사용자 세션을 제어하는 등의 서비스 기능을 사용할 수 없다.