본문 바로가기
개발/차근차근 개발일지 TIL

TIL 230515 항해99 페이스북 클론코딩2 [Access/Refresh Token]

by 코딩하는짱구 2023. 5. 15.
반응형

TIL 230515 클론코딩2 [Access/Refresh Token]

✅오늘학습 Keyword

Access/Refresh Token

  • Access Token : 사용자의 권한이 확인(ex로그인)되었을 경우 해당 사용자를 인증하는 용도로 발급, Access Token을 가지고 인증을 요청할 경우 비밀키를 가지고 인증하기때문에 간단하다. 하지만 Stateless(무상태)이기 때문에 서버가 죽다 살아나도 여전히 사용자를 인증하는 모든 정보를 가지고 있고, 그 사용자가 처음 발급한 사용자 본인인지 확인할 수 없음. 
  • Refresh Token : 특정사용자가 Access Token을 발급받기 위한 용도, 즉 사용자가 아닌 서버가 해당 사용자의 정보를 db에 저장하여 관리

✅오늘 겪은 문제 및 해결

1. Access Token은 Bearer 방식인데 Refresh는 Bearer를 지정해주지 않는 이유가 궁금했다. 

이 문제를 파악하기 위해 알아야할 개념은 아래와 같다.

 

a. 왜Bearer를 붙이는가?

b. 왜 Access Token에만 Bearer를 적용하는가? 

 

 

자 우리가 '계정'의 개념이 있는, 즉 리소스가 특정 사용자에게 귀속되는 서비스를 구현할땐 인증이 꼭 필요하고,

인증시스템을 구현하기 위해선 아래와 같은 절차를 거친다. 

 

  • 인증정보의 위치 결정: request body, query parameter, cookie 헤더, Authorization 헤더
  • 인증 스키마: Basic, [비표준]OAuth 1.0a를 사용하는 Bearer, OAuth 2.0을 사용하는 Bearer, [비표준]JWT 또는 JWT를 사용하는 Bearer, Digest, HoBA

이때까지 강의에서 배우고 적용했던 인증방식은  Authoriztion헤더->[비표준]JWT 또는 JWT를 사용하는 Bearer 에 기반한 것이다. 

(그 이유는 링크 참조: https://velog.io/@city7310/%EB%B0%B1%EC%97%94%EB%93%9C%EA%B0%80-%EC%9D%B4%EC%A0%95%EB%8F%84%EB%8A%94-%ED%95%B4%EC%A4%98%EC%95%BC-%ED%95%A8-5.-%EC%82%AC%EC%9A%A9%EC%9E%90-%EC%9D%B8%EC%A6%9D-%EB%B0%A9%EC%8B%9D-%EA%B2%B0%EC%A0%95)

 

그러니까 Bearer는 인증타입인거고, JWT에 대한 토큰을 사용하는 것까진 알겠는데.. 그게 Access에만 붙는 이유는 뭘까?

결론적으로 두개의 Tokens의 목적과 사용 방법이 다르기 때문이라고 한다. 

 

  • Access Token: Access Token은 사용자를 인증하고 API 엔드포인트에 접근할 수 있는 권한을 부여하는 데 사용됩니다. 주로 짧은 유효 기간을 가지며, 사용자가 애플리케이션에 로그인할 때 발급됩니다. Bearer 타입을 지정함으로써 서버에서 클라이언트로 안전하게 전송되어야 하며, 클라이언트가 API 요청 헤더에 Bearer 토큰을 포함시켜야 합니다. 이를 통해 서버는 클라이언트의 Access Token을 검증하고 인증 여부를 확인할 수 있습니다.
  • Refresh Token: Refresh Token은 Access Token의 갱신을 위해 사용됩니다. 주로 긴 유효 기간을 가지며, Access Token이 만료되었을 때 클라이언트가 서버에 새로운 Access Token을 요청할 때 사용됩니다. Refresh Token은 보안 상 민감한 정보이므로 Access Token과 다른 방식으로 관리되어야 합니다. 대부분의 경우 Refresh Token은 암호화되어 안전한 저장소에 저장되며, 서버 측에서 직접적으로 접근되는 것을 피하기 위해 Bearer 타입을 지정하지 않는 것이 보안상 더 안전합니다. Refresh Token은 주로 토큰 엔드포인트에서 사용되며, Access Token을 발급하는 데 사용되는 인증 프로세스와는 분리되어 관리됩니다.

 

따라서, Access Token과 Refresh Token은 목적과 사용 방법이 다르기 때문에 Access Token에 Bearer 타입을 지정하고 Refresh Token에는 지정하지 않는 것이 일반적입니다. 이는 일관성을 유지하고 보안을 강화하는데 도움이 됩니다.

 

 

 

2. 프로필 이미지 사진 등록하기!

 

 

 

 

✅오늘 알게된 점 및 추후 학습계획

Bearer에 관해선 이전에 들었던 강의를 전부 훑고 구글링도 했지만 뭔가 시원하고 명확하게 이유를 설명해주진 않는 것 같다. 내가 알고싶은건 그래서 Bearer가 실제로 어떻게 작용하고 access에서 어떤 역할을 하는지인데..

 

ex) 그러니까 Bearer타입을 지정하면 어떻게 안전해진다는건데.. ?

Bearer 타입을 지정함으로써 서버에서 클라이언트로 안전하게 전송되어야 하며, 클라이언트가 API 요청 헤더에 Bearer 토큰을 포함시켜야 합니다. 

 

기술매니저님과 논의하고 좀 더 개념을 명확하게 할 예정이다. 

 

반응형