IMAD 서비스에서 회원탈퇴를 구현하기 위한 각 auth provider 별 방법 정리
- DB에서 해당 User 관련 데이터 삭제
Oauth2 업체와의 연결을 해제하기 위해서는 access token이 필요하다. 이 때문에 DB에 access token을 저장하는 칼럼을 따로 추가해주려고 한다. 이를 이용한 회원 탈퇴 절차는 다음과 같다.
- (클라) 유저가 회원 탈퇴 버튼 CLICK
- (서버) 해당 유저의 db에 저장된 auth access token을 통해 oauth2 업체 측에 회원탈퇴 요청
- access token이 validate 할 경우 : 3번으로
- refresh token이 validate 하지 않은 경우
- 유저에게 소셜 재로그인을 요구하고 access token 발급 받아 db에 저장
- 메세지 등을 띄워서 회원탈퇴 버튼을 다시 누르도록 유도함 (1번으로)
- (서버) oauth2 업체에게 회원탈퇴(revoke) 요청
- (서버) revoke 완료 응답 수신
- (클라) 유저에게 회원탈퇴가 정상적으로 완료되었음을 display
https://kapi.kakao.com/v1/user/unlink
에 access token을 첨부하여 요청- 정상적으로 처리되었다면 응답으로 해당 유저의 회원번호를 받음
- 로그아웃 또한 함께 진행되어 access token과 refresh token이 만료 처리됨
이름 | 설명 | 필수 |
---|---|---|
Authorization | 사용자 인증 수단, 액세스 토큰 값Authorization: Bearer ${ACCESS_TOKEN} | O |
curl -v -X POST "https://kapi.kakao.com/v1/user/unlink" \
-H "Content-Type: application/x-www-form-urlencoded" \
-H "Authorization: Bearer ${ACCESS_TOKEN}"
- 개인 정보 삭제나 잔여 캐시 안내 등의 후처리를 위해 콜백 API를 설정할 수 있음
https://nid.naver.com/oauth2.0/token
에 요청하여 연동 해제 진행
요청 변수명 | 타입 | 필수 여부 | 기본값 | 설명 |
---|---|---|---|---|
client_id | string | Y | - | 애플리케이션 등록 시 발급받은 Client ID 값 |
client_secret | string | Y | - | 애플리케이션 등록 시 발급받은 Client Secret 값 |
access_token | string | Y | - | 유효한 접근토큰 값 |
grant_type | string | Y | - | 요청 타입. delete 으로 설정 |
https://nid.naver.com/oauth2.0/token?grant_type=delete&client_id=CLIENT_ID&client_secret=CLIENT_SECRET&access_token=ACCESS_TOKEN
Revoke tokens | Apple Developer Documentation
https://appleid.apple.com/auth/revoke
에 POST로 요청하여 연동 해제- parameter로 access toekn 또는 refresh token을 필요로 함
curl -v POST "https://appleid.apple.com/auth/revoke" \
-H 'content-type: application/x-www-form-urlencoded' \
-d 'client_id=CLIENT_ID' \
-d 'client_secret=CLIENT_SECRET' \
-d 'token=ACCESS_TOKEN' \
-d 'token_type_hint=access_token'
아무리 구글링해봐도 관련 공식문서가 안 보이고, 블로그에서도 정확하게 명세해둔 곳이 없어 혹시나 하는 마음으로 chat gpt에게 물어보았다. 그랬더니 바로 답을 내주더라…
https://accounts.google.com/o/oauth2/revoke?token=YOUR_ACCESS_TOKEN
위의 URL에 access token 넣어서 GET 요청 날려주면 된다.