jwt와 oauth

둘다 최종 결과는 토큰

결론적으로 최종 결과인 토큰을 클라이언트에서 유지하기 위한 방법 중 쿠키에 httpOnly옵션을 주어 저장하는 것이 낫다.

jwt(JSON Web Token) 방식

핵심: access token, refresh token

동작과정

OAuth(Open Authentication) 방식

실제 비밀번호 대신 access token (비밀키)를 이용한다.

OAuth 인증을 필요한 구성

동작과정

토큰을 어디에 저장해야할까

<aside> ❗ 가장 좋은 방법은 refresh token을 사용하는 방법이다. 백엔드에서 refresh token을 httpOnly 쿠키로 설정하고 url이 새로고침 될 때마다 refresh token을 request에 담아 새로운 accessToken을 발급 받는다. 발급 받은 accessToken은 js private variable에 저장한다.

</aside>

<aside> ❗ 토큰을 통한 인증 방식은 만료시간이 가장 중요, 토큰의 유효시간이 존재하므로 자연스럽게 토큰의 만료와 함께 해커 진입 차단. 하지만 어렵다면 refresh token없이 access token만으로 구현하자

</aside>

토큰을 refresh token과 access token으로 나눠서 생각해야 한다.

access token은 만료시간이 짧기 때문에 좀 더 오픈된 공간에 저장해도 되지만, refresh token은 쉽지 않다. 웹에서 사용자의 로그인 정보를 저장할만한 공간은 클라이언트에서는 로컬스토리지, 쿠키 등이 있고, 서버에는 세션이나 db가 있다.

refresh token은 서버에 저장하는 것이 가장 좋고, access token의 경우 만료기간이 짧다면 클라이언트 단에 저장해도 된다.

클라이언트 단에 refresh나 access token을 저장할 때 로컬스토리지와 쿠키 중 쿠키에 httponly와 secure 옵션을 사용한다면 어느 정도 보안은 된다.

https://github.com/kimyouknow/CS-JS-Algorithm/blob/main/웹/token/token저장위치.md#-http-request시-token은-어디에-넣어야-할까?