티스토리 뷰
오늘은 토큰에 대해서 배웠고,
토큰을 이용한 로그인, 로그아웃 실습을 진행하였다.
실습 중에서 가장 어려움을 겪었던 부분이 있었는데, 그 부분을 간단히 적어보려고 한다.
토큰
웹 보안에서의 토큰은 인증과 권한 정보를 담고 있는 암호화된 문자열 의미
이를 이용해 특정 애플리케이션에 대한
사용자의 접근 권한을 부여가 가능하다
오늘 진행한 실습의 전체적인 과정과 유사한 이미지이다.
이중에서 오늘 가장 어려움을 겪었던 부분은 F, G, H 부분이다.
이 부분에 대해서 설명을 하자면, accessToken이 만료된다면 refreshToken을 이용하여서 다시 accessToken을 얻어온 뒤,
클라이언트로 보내는 과정이다.
이 과정에서 어려웠던 점은 조건 분기를 적절하게 해야되는 것이었다.
쿠키로부터 받아온 accessToken이 존재할 경우, acessToken이 검증이 된 경우,
refreshToken이 존재하는 경우, refreshToken이 검증이 된 경우 를 고려해서 처리를 해주어야 했다.
적절하게 분기 처리하는데에 어려움을 느껴서 해결하는데 2시간 정도 걸렸다...
결국 accessToken이 만료되고 refreshToken을 이용한다는 의미는
accesssToken이 존재하지만 검증에 실패하고, refreshToken이 존재하고 검증에 성공한다는 의미와 같다.
따라서 이때만, 새로운 acessToken을 생성해주고 쿠키에 저장시켜주었다.
server
userInfo.js
module.exports = async (req, res) => {
const accessToken = req.cookies.access_jwt;
const refreshToken = req.cookies.refresh_jwt;
//accessToken 존재할 때
if (accessToken) {
decodedToken = verifyToken("access", accessToken);
//decodedToken 검증 성공 시
if (decodedToken !== null) {
const userInfo = {
...USER_DATA.filter((user) => user.id === decodedToken.id)[0],
};
delete userInfo.password;
res.send(userInfo);
}
//검증 실패 시
else {
//refreshToken 존재할 때
if (refreshToken) {
decodedToken = verifyToken("refresh", refreshToken);
//decodedToken 검증 성공 시
if (decodedToken !== null) {
const userInfo = {
...USER_DATA.filter((user) => user.id === decodedToken.id)[0],
};
const cookiesOption = {
domain: "localhost",
path: "/",
httpOnly: true,
secure: true,
};
const { accessToken, refreshToken } = generateToken(userInfo, true);
res.cookie("access_jwt", accessToken, cookiesOption);
res.redirect("/userInfo");
}
}
}
}
res.status(401).send("Not Authorized");
};
'코드스테이츠' 카테고리의 다른 글
기술면접 준비 - (0) | 2023.03.13 |
---|---|
TIL 23.03.09 (0) | 2023.03.09 |
TIL 23.03.07 (0) | 2023.03.08 |
TIL 23.02.24 (0) | 2023.02.24 |
TIL 23.02.23 (0) | 2023.02.23 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 코테
- SEB43
- dictionary
- SEB43기
- 코드스테이츠
- 그리디 알고리즘
- 감정일기장
- SEB 43기
- 프로젝트
- 스택오버플로우
- 백준
- seb
- React quill
- 기술면접
- 회고
- 브루드포스
- 인적성
- Redux
- Python
- 프리프로젝트
- 개인 프로젝트
- 다이나믹 프로그래밍
- dfs
- BFS
- 프로그래머스
- 감정 일기장
- SEB 43
- 프론트엔드
- til
- useContext
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
글 보관함