오늘은 부트캠프 48일차이면서 프로젝트 3일차이다. 오전부터 오후까지 추가 요구사항 중에 내가 맡았던 게시글에 대한 카테고리를 구현을 하는 것이다. 오늘 추가 요구사항을 진행하면서 아쉬웠던 점은 구글링으로는 한계가 있다라는 것을 느꼈고, 너무 검색에만 치중되면 실력이 늘지 않고, 나의 요구사항에 대한 이해도와 코드를 설계하는 실력이 있어야되는구나라고 느꼈다. 내일은 팀원들과 다같이 발표자료를 준비해야 겠다.
오늘 배운 것
1. Refresh token이 왜 필요한가?
-Access Token 만을 통한 인증 방식의 문제는 제 3자에게 탈취당할 경우 보안에 취약하다는 점이다.
-Access Token은 발급된 이후, 서버에 저장되지 않고 토큰 자체로 검증을 하며 사용자 권한을 인증하기 때문에, Access Token이 탈취되면 토큰이 만료되기 전까지, 토큰을 획득한 사람은 누구나 권한 접근이 가능해 지기 때문이다.2. Refresh Token
-Access Token은 접근에 관여하는 토큰이고, Refresh Token은 재발급에 관여하는 토큰이므로 행하는 역할이 다르다고 보면 된다.
-유효기간이 짧은 Token의 경우 그만큼 사용자는 로그인을 자주해서 새롭게 Token을 발급받아야 하므로 불편하다는 단점이 있는데 그렇다고 유효기간을 늘리면 토큰을 탈취당했을 때 보안에 더 취약해지는데 유효기간을 짧게 하면서 좋은 방법이다.3. Access/Refresh Token 재발급 원리
3-1. 기본적으로 로그인 같은 과정을 하면 Access Token과 Refresh Token을 모두 발급한다.(Refresh Token만 서버측의 DB에 저장, Access Token을 쿠키 혹은 웹스토리지에 저장)
3-2. 사용자가 인증이 필요한 API에 접근하고자 하면, 가장 먼저 토큰을 검사한다.
-case1 : accsee token과 refresh token 모두가 만료된 경우 -> 에러 발생(재 로그인하여 둘 다 새로 발급)
-case2 : access token은 만료됐지만, refresh token은 유효한 경우-> refresh token을 검증하여 access token 재발급
-case3 : access token은 유효하지만, refresh token은 만료된 경우 -> access token을 검증하여 refresh token 재발급
-case4 : access token과 refresh token 모두가 유효한 경우 -> 정상 처리
3-3. 로그아웃을 하면 Access Token과 Refresh Token을 모두 만료시킨다.4. Refresh Token 인증 과정
-사용자가 ID , PW를 통해 로그인.
-서버에서는 회원 DB에서 값을 비교
-로그인이 완료되면 Access Token, Refresh Token을 발급한다. 이때 회원DB에도 Refresh Token을 저장해둔다.
-사용자는 Refresh Token은 안전한 저장소에 저장 후, Access Token을 헤더에 실어 요청을 보낸다.
-Access Token을 검증하여 이에 맞는 데이터를 보낸다.
-시간이 지나 Access Token이 만료됐다.
-사용자는 이전과 동일하게 Access Token을 헤더에 실어 요청을 보낸다.
-서버는 Access Token이 만료됨을 확인하고 권한없음을 신호로 보낸다.
-사용자는 Refresh Token과 Access Token을 함께 서버로 보낸다.
-서버는 받은 Access Token이 조작되지 않았는지 확인한후, Refresh Token과 사용자의 DB에 저장되어 있던 Refresh Token을 비교한다. Token이 동일하고 유효기간도 지나지 않았다면 새로운 Access Token을 발급해준다.
-서버는 새로운 Access Token을 헤더에 실어 다시 API 요청 응답을 진행한다.