인증에 대한 고민들

심재익·2021년 4월 16일
0

백엔드 공부

목록 보기
2/3

이제 드디어 대망의 인증/인가에 대해서 고민을 할 때가 왔다.
부스트캠프에서도 똑같은 고민을 했었는데, 그 때 했던것을 기반으로 이번 졸작도 해볼려고 한다.

이번 포스트는 설치&사용 보다는 왜 내가 passport와 JWT를 썼는가에 대해 써보겠다.

인증(Authentication) vs 인가(Authorization)

들어가기에 앞서, 인증과 인가에 대해 구분할 필요가 있다고 생각했다. auth로 쓰이는 의미가 두개가 있는데, 이를 헷갈리지 않게 하기 위함이다.

인증?

클라이언트가 자신이 주장하는 사용자와 같은 사용자인지를 확인하는 과정

인가?

권한부여, 클라이언트가 하고자 하는 작업이 해당 클라이언트에게 허가된 작업인지를 확인하는 과정

인증과 인가의 차이점

인증을 거친 후 인증된 사용자에 대한 특정한권한을 부여 한다고 생각 한다면 쉽게 이해가 될 수 있다.

내가 이해한 바로는, 로그인을 통해서 인증을 거치고(ID,PW가 맞는지), 회원 정보를 저장해서 그 정보를 통해 post나, group에서의 권한(authorization)을 확인해서 생성,수정,삭제를 진행해야 할 것 같다.
( 아마 권한은 JWT을 이용해서 할 것 같다. )


passsport.js

passport.js 란?

passport는 단어 그대로 여권이라는 뜻과 같이 서버에서 사용자를 인증하기 위해 사용하는 Node.js용 미들웨어이다. passport는 다양한 인증 메커니즘(session, jwt 등)을 각 모듈로 패키지화 해 제공하고 있으며 편리하게 인증을 구현할 수 있다.

전략(strategies)

패스포트는 유저네임/비밀번호를 이용한 인증 뿐만 아니라 페북/트위터 소셜 인증, jwt 인증 등 방법이 무척 많다. 공통의 인증 로직은 passport가 담당하고 구체적인 방법은 "전략"이라는 개념으로 분리해 놓았다.

  • 유저네임/비밀번호 인증은 passport-local
  • 페북/트위터는 passport-facebook, passport-twitter
  • jwt 방식은 passport-jwt

passport는 Node.js에서 사용되는여러가지 전략에 따라 인증을 도와주는 미들웨어이기에 고민없이 passport를 사용하게 되었다.


JWT

JWT(JSON Web Token)은 클라이언트와 서버 혹은 서비스간의 통신시 정보를 JSON객체를 통해 안전하게 전송하고 권한(Authorization)을 위해 사용하는 토큰이다.

JWT의 구조

JWT는 위와 같이 3개의 부분으로 나눠져 있고, 각각의 부분은 .으로 구분된다.

  1. HEADER : 토큰 검증을 위한 서명 알고리즘, 토큰 유형으로 구성된다.
  2. PAYLOAD : 토큰에 저장할 데이터들로 구성된다.
  3. SIGNATURE : HEADER와 PAYLOAD를 서명한 값으로 구성되어 있다. 헤더에서 정의한 알고리즘과 사용자가 비밀키를 이용해 서명하기 때문에, 토큰을 탈취당해도 서명한 값과 비교하여 데이터의 무결성을 확인할 수 있다.

두 가지 방법으로 고민을 상당히 많이 했었다. 결국엔 JWT로 결정을 내렸는데, 선택하게 된 이유에 대해 간단하게 설명한다.

이 페이지를 참고했다. -> https://tansfil.tistory.com/58

JWT를 선택하게 된 이유

  • session을 따로 관리 할 필요가 없다.
    -> 물론 세션을 전문적으로 관리할 만큼 스케일이 크지는 않지만, JWT의 이점인 session을 관리 할 필요가 없다는 것을 써보고 싶었다.
  • github, google login과 같은 소셜 로그인관리가 편하다.
    -> 여러가지 Strategy를 활용해서 소셜 로그인이 편하다.

위와 같은 내용으로, 그리고 JWT를 써보고 싶다는 이유로 JWT를 선택하게 되었다.

참고 사항

  • JWT의 보안은 암호화 기법에 의존하는데, expired time을 짧게 둬서 복호화에 필요한 시간을 줄여, 보안을 유지한다고 한다.

참고 자료

profile
치킨을 좋아하는 개발자

1개의 댓글

comment-user-thumbnail
2021년 6월 30일

멋있으십니다!

답글 달기