-
Notifications
You must be signed in to change notification settings - Fork 3
세션 토큰을 통한 익명 유저관리
shl0501 edited this page Dec 1, 2024
·
1 revision
세션 토큰을 통해 유저를 인식하는 방법에 대해 설명합니다.
ASK-IT은 세션페이지에서 자신이 작성한 글을 수정 및 삭제할 수 있습니다. 이때 로그인한 유저뿐만 아니라 로그인하지 않은 익명의 유저또한 글을 수정 및 삭제할 수 있습니다.
익명의 유저가 세션페이지에 재접속했을 때도 자신이 작성한 글을 수정 및 삭제할 수 있도록 특정 글이 어떤 유저가 작성한 것인지 확인할 수 있는 기술이 필요합니다.
유저는 세션에 접속할 때 해당 세션에서만 유효한 토큰을 발급 받습니다. 해당 토큰은 USER_ID와 함께 DB와 로컬스토리지에 저장되며, 사용자가 세션에 다시 접속할 경우 USER_ID와 토큰을 통해 사용자를 확인합니다.(익명 사용자의 USER_ID는 null입니다)
유저를 확인할 때는 다음과 같이 클라이언트로부터 받은 토큰과 USER_ID의 존재여부에 따라 4가지의 케이스가 존재합니다.
토큰 | ID | 검증 데이터 | 데이터 존재여부 | 반환 값 | 비고 |
---|---|---|---|---|---|
O | O | {토큰, ID} | O | 입력받은 토큰 | 로그인한 유저가 접속한 경우 |
O | O | {토큰, ID} | X | 새로운 토큰 | 로그인한 유저가 세션에 처음 접속한 경우 |
O | X | {토큰, NULL} | O | 입력받은 토큰 | 익명의 유저가 세션에 다시 접속한 경우 |
O | X | {토큰, NULL} | X | 새로운 토큰 | 로그인한 유저가 로그아웃 후 익명으로 접속한 경우 |
X | O | {ID} | O | 저장된 토큰 | 이전에 접속했던 유저가 토큰 삭제 후 다시 접속한 경우 |
X | O | {ID} | X | 새로운 토큰 | 로그인한 유저가 세션에 처음 접속한 경우 |
X | X | {} | X | 새로운 토큰 | 익명의 유저가 세션에 처음 접속한 경우 |
-
로그인한 유저가 토큰을 조작한 경우
DB에서 세션의 ID에 유저의 ID가 매핑되어 있는경우 저장된 토큰을 발급함으로써 문제를 해결하였습니다.
-
로그인한 유저가 로그아웃 후 익명으로 접속할 경우
이 경우 로그인 했던 유저의 토큰을 통해 익명의 사용자가 접속을 시도합니다. 세션 ID에 클라이언트로부터 받은 토큰이 매핑되어 있지만, 유저의 ID가 같지 않으므로 익명으로 접속할 수 있도록 합니다.
위와 같이 특수한 케이스를 포함한 모든 상황에 대해 유저는 문제없이 자신이 작성한 글을 수정 및 삭제할 수 있습니다.