HTTPS - 토큰 기반 인증 JWT

김도영·2022년 6월 8일
0
post-custom-banner

토큰 기반 인증 - JWT

JWT의 종류

1.Access Token
2.Refresh Token

Access token은 각종 정보들(연락처, 사진, 이메일 등)이 보호된채 접근할 수 있는 권한부여에 사용한다. 클라이언트가 처음 인증(로그인)을 받게 될 때, 실제로 권한을 얻는 데 사용하는 토큰이다. 즉, 권한을 부여하는데엔 Access token만 필요하다. 하지만, 악의 적인 유저의 공격 때문에 짧은 유효기간을 주어 탈취 되어도 사용할 수 없도록 하는 것이 좋다. 여기서 Refresh Token을 사용하여 새로운 Access token을 발급한다. 이 때, 유저는 다시 로그인을 할 필요가 없다.

JWT의 구조

JWT의 구조는 다음과 같이 이루어져 있다.

  • Header
  • Payload
  • Signature
  • Header부분은 이것이 어떤 종류의 토큰인지, 어떤 알고리즘으로 할지가 JSON형태로 적혀있다. 이 JSON 객체를 base64 방식으로 인코딩된다.

    {
      "abc": "abc123",
      "qwe": "qwe456"
    }

    Payload부분에는 정보가 담겨져 있다.각정 정보들에 대한 권한을 담을 수도 있고, 필요한 데이터를 이곳에 암호화 시킬 수 있다.

    {
      "name": "Hong"
      "sub": "154545345"
    }

    Signature부분에는 base64로 인코딩된 부분을 원하는 비밀키를 사용하여 암호화한다.

    DYSHA256(base64UrlEncode(header) + '.' + base64UrlEncode(payload), secret);

    JWT 사용 예시

    새로 다운받은 A앱이 Gmail과 연동되어 이메일을 읽어와야 한다고 가정해보자.

    1. Gmail 인증서버에 로그인 정보를 제공한다.
    2. 성공적으로 인증시 JWT를 발급받는다.
    3. A앱은 JWT를 이용해 해당 유저의 Gmail을 사용할 수 있다.

    토큰 기반 인증 절차

    1. 클라이언트가 서버에 아이디/비밀번호를 담아 로그인 요청을 보낸다.
    2. 정보가 일치하는지 확인하고, 클라이언트에게 보낼 토큰을 암호화 한다. 여기서 accessrefresh토큰을 생성하는데 토큰에 담길 payload는 유저를 식별할 정보, 권한이 부여된 카테고리가 될 수 있다.
    3. 토큰을 클라이언트에게 보내면, 클라이언트는 토큰을 저장한다.
    4. 클라이언트가 HTTP헤더(authorization header)에 토큰을 담아 보낸다.
    5. 서버는 토큰을 해독한 뒤 일치하면, 클라이언트에게 응답을 보내준다.
    profile
    Blockchain Developer
    post-custom-banner

    0개의 댓글