인가 (Authorization)

이상철·2021년 10월 1일
0

TIL

목록 보기
2/3
post-thumbnail

인가는 무엇일까요?

바로, 사용자가 서버에 로그인 하면 해당 사용자가 맞는지 확인하는 과정입니다.

@http 통신의 특징

  • 바로 request / response 요청과 응답.
  • Stateless한 성질 (저장하지 않는 성질)

@Talk about Token

토큰은 백에서 관리하고 발급하고, 프론트가 들고다니며 관리합니다.
토큰은 메타데이터이고, http에서 header에 보관합니다.

JSON Web Token

위의 그림은 JWT의 구조입니다.

헤더
에는 어떤 정보가 들어갈까요 ?

  • 토큰의 타입과 해시 알고리즘 정보가 들어갑니다.
  • 헤더의 내용은 BASE64 방식으로 인코딩해서 JWT의 가장 첫 부분에 기록됩니다.
  • ex) {"alg": "HS256", "typ":"JWT"}

다음은 JWP의 내용(payload)입니다.

  • 내용에는 exp와 같이 만료시간을 나타내는 공개 클레임
  • 클라이언트와 서버간 협의하에 사용하는 비공개 클레임
  • 위의 두가지 요소를 조합하여 작성한 뒤 BASE64 인코딩하여 두번째 요소로 위치합니다.
  • ex) {"user-id":1, "exp":1539517391}

마지막으로 서명(signature)입니다.

  • JWT가 원본 그대로라는 것을 확인할 때 사용하는 부분
  • 시그니쳐는 BASE64URL 인코드된 header와 payload 그리고
    JWT secret(별도 생성)을 헤더에 지정된 암호 알고리즘으로 암호화하여
    전송합니다.(복호화 가능)
  • 프론트엔드가 JWT를 백엔드 API 서버로 전송하면 서버에서는 전송받은 JWT의 서명부분을 복호화 하여 서버에서 생성한 JWT가 맞는지 확인합니다.
  • 계약서의 위변조를 막기위해 서로 사인하는 것과 같다고 보면 됩니다.
  • 마지막으로 주의할 점은 header와 payload는 BASE64 인코딩한 것이므로
    (암호화 아님) 누구나 원본을 볼 수 있으니 개인정보를 담아서는 안됩니다.
profile
헤더부터 푸터까지!!!

0개의 댓글