TIL_인증/보안(OAuth)

Today 공부

  • OAuth
  • jsonwebtoken

OAuth

OAuth 란?

  • 인증을 중개해주는 메커니즘
  • 보안 된 리소스에 액세스하기 위해 클라이언트에게 권한을 제공(Authorization)하는 프로세스를 단순화하는 프로토콜 중 한 방법
  • 이미 사용자 정보를 가지고 있는 웹 서비스(GitHub, google, facebook 등)에서 사용자의 인증을 대신해주고, 접근 권한에 대한 토큰을 발급한 후, 이를 이용해 내 서버에서 인증이 가능해진다
  • 인증(Authentication)을 다른 서비스에 맡길 뿐,
  • 접근 권한 관리(Authorization)는 순전히 내 서버의 몫

OAuth 알아야 할 용어

  • Resource Owner : 액세스 중인 리소스의 유저
    한 사람이 구글 계정을 이용하여 App에 로그인할 경우, 이때 Resource owner은 그 사람이 된다.
  • Client : Resource owner를 대신하여 보호된 리소스에 액세스하는 응용프로그램
    클라이언트는 서버, 데스크탑, 모바일 또는 기타 장치에서 호스팅할 수 있다.
  • Resource server : client의 요청을 수락하고 응답할 수 있는 서버
  • Authorization server : Resource server가 액세스 토큰을 발급받는 서버
    즉, 클라이언트 및 리소스 소유자를 성공적으로 인증한 후 액세스 토큰을 발급하는 서버
  • Authorization grant : 클라이언트가 액세스 토큰을 얻을 때 사용하는 자격 증명의 유형
  • Authorization code : access token을 발급받기 전에 필요한 code
    client ID로 이 code를 받아온 후, client secret과 code를 이용해 Access token 을 받아온다
  • Access token : 보호된 리소스에 액세스하는 데 사용되는 credentials
    Authorization code와 client secret을 이용해 받아온 이 Access token으로 이제 resource server에 접근을 할 수 있다
  • Scope : scope는 토큰의 권한을 정의,
    주어진 액세스 토큰을 사용하여 액세스할 수 있는 리소스의 범위

소셜 로그인 로직 플로우


jsonwebtoken 토큰 해독/검증

  • jsonwebtoken라이브러리를 이용하여 토큰을 생성하는 방법
const jwt = require('jsonwebtoken');
const token = jwt.sign(토큰에_담을_값, ACCESS_SECRET, { 옵션1:, 옵션2:, ... }
  • jsonwebtoken라이브러리를 이용하여 토큰을 verify(해독, 검증) 하는 방법
const jwt = require('jsonwebtoken');

const authorization = req.headers['authorization'];
const token = authorization.split(' ')[1];
const data = jwt.verify(token, ACCESS_SECRET);

좋은 웹페이지 즐겨찾기