인가(Authorization)

이선호·2021년 10월 3일

인가(Authorization)

사용자가 서버에 로그인 하면 해당 사용자가 맞는지 확인하는 과정

HTTP의 특징과 연관
request/response 요청과 응답
stateless한 성질(저장하지 않는 성질)

토근의 구조

JWT(JOSN Web Token)

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

Payload

  • 토큰에 담을 정보가 들어있음
  • exp와 같이 만료시간을 나타내는 공개 클레임
  • 클라이언트와 서버간 협의하에 사용하는 비공개 클레임
  • 위의 두가지 요소를 조합하여 작성한뒤 BASE64 인코딩하여 두번째 요소로 위치한다.
  • 담기는 정보 {name: value} 한 쌍을 '클레임(claim)'이라 한다.
'user-id':1, // 유저 아이디
'exp':1539517391 // 만료시간

Signature

우리서버가 발행하는 토큰이라는것을 알려주는 부분

-JWT가 원본 그대로라는 것을 확인할 때 사용하는 부분

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

Header와 Payload값은 정보를 인코딩한 값이 들어있다.
인코딩한 값은 디코딩하면 원본값을 바로 알 수 있는데, 토큰값은 다른 사람이 위변조 할 수 없어야 하므로, 이를 검증하기 위해 비밀키로 해쉬하여 만든다.

0개의 댓글