✏️OAuth & JWT

케이·2022년 6월 19일
5

학습기록

목록 보기
1/5
post-thumbnail

학습한 내용을 재정리한 글입니다. 틀린 부분이 있다면 언제든 지적해주시면 감사하겠습니다.🙏🏻

OAuth?

출처: https://www.varonis.com/blog/what-is-oauth

  • open-standard authorization protocol or framework
  • 요약: OAuth는 사용자와 서비스 공급자 간에 비밀번호를 공유하지 않는 대신에 인증 토큰을 사용해 사용자를 식별한다.

OAuth Roles

  • Resource Owner: 사용자(=유저)
  • Client: 사용자의 계정에 접근하려고 하는 어플리케이션
  • Resource Server: 보호된 사용자의 계정을 가지고 있는 리소스 서버
  • Authorization Server: 사용자를 식별하고 access token을 발행하는 서버.

OAuth의 전체적인 흐름 살펴보기

조금 더 쉽게 접근하기

  1. 사용자가 로그인 페이지에 접근한다.
  2. 서비스는 사용자에게 로그인 페이지를 제공하게되고 사용자는 로그인 페이지의 깃헙(or 페이스북, 구글 등등) 로그인 버튼을 누른다.
  3. 사용자가 로그인한 서비스(깃헙, 페이스북, 구글 등등)에 로그인 할 수 있도록 창이 뜬다.
  4. 사용자가 아이디와 비밀번호를 입력하여 로그인을 하면 서비스가 사용하려고 하는 기능에 대해 사용자의 승인을 요청한다.
  5. 사용자가 승인하는 경우 authorization code를 발급하고 redirect url(callback url)에 code를 전송한다.
  6. 서비스는 authorization code를 가지고 access token을 발급한다. (이 때 서버에 회원의 정보를 저장한다)
  7. 사용자는 최종적으로 로그인이 된다.

이후에 사용자가 서비스를 이용해 요청을 보낼 때마다 access token을 요청과 함께 보내면 서버에서는 검증을 하고 서비스를 제공하게 된다.

한줄 요약: 결국 access token 받기 위한 여정

Github OAuth App

GitHub OAuth App을 사용할 경우 Refresh Token이 따로 존재하지 않고 Access Token 만료 시간도 없다. Github OAuth App을 사용하는 경우 그냥 Access Token만 다루면 된다.
위의 Githup App과 OAuth App은 다름에 주의하자.

위의 내용을 모르고 github oauth app을 사용해 과제를 진행하는 중에 왜 refresh token이 없는지 이것저것 찾아보며 엄청 삽질을 했었다;;;

JWT (Json Web Token)

  • 인증에 필요한 정보들을 암호화 시킨 토큰

JWT 구조

aaaaaa.bbbbbb.cccccc
 헤더.  페이로드. 시그니쳐

JWT는 .을 구분자로 Header, Payload, Signature로 나누어진다.

Header에는 알고리즘 형식을 담는다.

Payload 에는 토큰에서 사용할 정보들을 담는데. 이 때 사용자를 구별할 수 있는 민감하지 않은 정보를 담고 비밀번호 같은 중요한 정보는 담으면 안된다.

Signature는 Header의 인코딩 값과 정보의 인코딩 값을 합친후에 비밀키로 생성한다. 이 때 Header에서 정의한 알고리즘으로 암호화를 한다.

JWT 사이트 에서 위의 내용을 확인 할 수 있다.

JWT 특징

  • JWT 토큰은 서버가 클라이언트에게 던져주고 나면 이를 저장할 필요가 없어서 서버의 오버헤드를 차단한다.
  • 토큰을 탈취당하면 대응이 어렵다.

JWT 사용방법

한줄요약: 클라이언트가 jwt 토큰을 http 헤더에 담아 서버에 보내면 서버가 이를 식별한다.

  1. 클라이언트가 접속을 하면 서버에서 해당 클라이언트에게 인증되었다는 의미로 토큰을 부여한다.
  2. 이 토큰을 클라이언트 쪽에서 보관하고 있다가 서버에 요청을 보낼 때 마다 헤더에 토큰을 담아서 보낸다.
  3. 서버에서는 해당 토큰이 서버에서 제공한 토큰과 일치하는지 체크하여 인증 과정을 처리한다.

참고

https://inpa.tistory.com/entry/WEB-📚-JWTjson-web-token-란-💯-정리
https://www.varonis.com/blog/what-is-oauth
https://inpa.tistory.com/entry/WEB-📚-OAuth-20-개념-💯-정리
https://blog.itcode.dev/posts/2021/10/23/oauth2-java-server-7

profile
삽질하며 깨닫고 배웁니다. (a.k.a 프로삽질러) + 이 구역의 회고왕

4개의 댓글

comment-user-thumbnail
2022년 6월 20일

안보고 적기에는 내용이 많은데 노력 많이 하셨네요 케이~!! 저도 안 보고 쓸 수 있도록 암기암기암기~~

답글 달기
comment-user-thumbnail
2022년 6월 20일

OAuth 내용 쉽지 않고, 아직도 어려운데 ㅜㅜ
처음부터 끝까지 요약을 잘하셨네요.!
중간 중간 요약한 내용 덕분에 흐름에 어려움없이 읽을 수 있었어요~
이 댓글 달기위해 구글 OAuth 로그인하며 다시 복기할 수 있어 더 좋았답니다🤣👍
잘 보고갑니다

답글 달기
comment-user-thumbnail
2022년 6월 22일

케이의 오오쓰 정리 잘 읽고갑니다!!! ㅎㅎㅎ

답글 달기
comment-user-thumbnail
2022년 6월 24일

OAuth2.0에 대해서 알려주시면 감사하겠습니다.ㅎㅎ

답글 달기