오늘의 공부 👍
오늘은 인증과 인가에 대해서 알아보려고 합니다.
📝 인증 ( authentication )
- 유저가 누구인지 확인하는 절차, 회원가입과 로그인 등이 있습니다.
- 토큰을 받아오는 과정입니다.
- 로그인 API를 만들 때 사용합니다.
▷ 토큰 기반 인증 시스템(JWT)
- 유저가 아이디와 비밀번호로 로그인을 한다.
- 서버에서 해당 계정 정보가 있는지 확인한다.
- 계정 정보가 있다면, 서버에서 유저에서 토큰(accesstoken )을 발급해 준다.
- 클라이언트에서 토큰을 저장하고, 서버에 요청할 때마다 요청과 함께 토큰을 함께 전달한다.
- 서버는 토큰이 맞는지 확인하고, 요청에 응답한다.
▷ JSON Web Token
누구든지 열어볼 수 있기에 많은 데이터를 저장하지 않는 게 좋습니다.
- .으로 구분되는 Header, Payload, Signature의 3가지 문자열로 되어있다.
- 헤더 ( Header )
- 토큰의 타입과 해싱 알고리즘이라는 두 가지 정보를 담고 있다.
- 내용 ( Payload )
- 토큰에 담을 정보가 들어간다.
- 담는 정보의 한 조각은 name/value의 한 쌍으로 이루어진 Claim이라고 부른다.
- 서명 ( Signature )
- Header의 인코딩 값과 Payload의 인코딩 값을 합친 후 주어진 비밀키로 해싱(hashing)하여 생성한다.
📝 인가 ( authorization )
- 로그인이 필요한 서비스들을 이용할 때 해당 유저임을 확인하는 것입니다,
- 토큰을 확인하는 과정입니다.
- 예를 들어 프로필 정보 조회 API 등에서 사용할 수 있습니다.
- 로그인 한 사람만 본인의 프로필을 조회할 수 있기에 토큰( accesstoken )을 통해 인가를 받아야 한다.
- 사용자의 인증이 필요한 경우에 클라이언트는 발급받은 JWT를 Requet Header(HTTP Header)에 실어 같이 보내준다.
- 백엔드에서는 JWT를 받고 Guard를 통해 JWT Strategy를 실행한다.
- JWT를 복호화 한 후에 원하는 API가 수행되고, 응답된다.
출처 및 참고
코드캠프