| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- Spring Data JPA
- JPQL
- 페이징
- Spring Container
- dockerhub
- @Transactional
- JWT
- JdbcTemplate
- 스프링 부트
- docker compose
- docker
- DLQ
- Routing Key
- CORS
- @ComponentScan
- Spring
- redis
- kafka
- mybatis
- AWS
- 컨테이너
- JPA
- 쿠버네티스
- 지연 로딩
- MSA
- securitycontextholderfilter
- 서블릿 컨테이너
- DI
- Web
- Dead Letter Queue
- Today
- Total
look-forest
앱 소셜 로그인 본문

소셜 로그인 후 탈퇴 시 unlink/revoke API를 백엔드에서 호출하여 연결 해제를 처리하는 게 권장/필수라고 한다.
소셜 서비스와의 연결(Authorization Grant)을 명시적으로 해제하지 않으면, 탈퇴 후에도 "연결된 앱" 상태가 유지됨.


# 애플
1. 최초 로그인 시 얻은 authorization_code로 refresh token을 얻고 저장
2. db 저장된 refresh token로 연결 해제 시도 -> 성공 시 앱에 성공 응답
3. refresh token이 유효하지 않을 시 -> 앱에 실패 응답
애플에서 refresh_token이 만료/무효(예: 비밀번호 변경 등)된 경우,
authorization_code로 다시 /token 요청해도 refresh_token이 다시 발급되진 않는다
만약 무효/만료된 경우 Apple API에서 unlink 불가 → “이미 해제됨”으로 처리하거나,
사용자에게 안내(Apple 정책상 재발급 불가)해야 한다.
※ refresh_token 발급 방식
1. 앱에서 애플 로그인 → authorization_code 획득
2. 이 authorization_code를 사용해,https://appleid.apple.com/auth/token에 POST 요청
이 요청에 client_id, client_secret, code, redirect_uri 등 파라미터 필요
3. 이 요청의 응답에서 refresh_token(및 id_token, access_token 등)이 함께 반환됨
즉, refresh_token을 받으려면 반드시 server(client_secret 발급 가능)에서 토큰 교환을 해야 함.
참고로 애플의 refresh_token은 "authorization_code"로 최초 1회만 발급받을 수 있다. (id_token은 재발급 가능)
# 카카오
1. 앱 어드민 키(REST API admin key) 준비
카카오 개발자센터 > 내 애플리케이션 > 앱키에서 어드민 키 확인
2. 카카오 사용자 식별 정보 확보
회원가입 시 저장한 카카오 userId 필요
3. POST https://kapi.kakao.com/v1/user/unlink
- 헤더에 앱 어드민 키
- 파라미터에 userId
※ userId 획득 방식
1. 앱에서 access_token 받아서 백엔드에 전달
2. POST https://kapi.kakao.com/v2/user/me 호출 -> userId 저장
client_secret이 뭐고 왜 필요한가?
토큰 발급/폐기(revoke) API 호출 시 검증용으로 사용하여
우리가 "애플 개발자 포털에 등록된 진짜 서비스 서버"임을 증명하는 역할을 한다.
애플이 요구하는 형식대로 우리 서버에서 직접 생성해야 하며,
_일반 문자열이 아니라, 특정 필드를 넣어서 private key로 서명한 JWT(ES256)_이다.
애플 개발자 계정에서 발급받은 키로 서명한 JWT를 매번 만들어서 애플 API에 제출해야 한다.
client_secret(JWT) 생성 방법
- team_id: Apple 개발자 계정의 팀 ID
- client_id: 서비스 ID (ex: com.http://m.example.app)
- key_id: Apple에서 발급한 키의 ID
- private key: Apple에서 다운로드한 AuthKey_XXX.p8 파일 내용
client_secret 생성에 사용되므로 client_id를 제외하고는 앱 코드에 노출되면 안된다.
'회고록 > 배운 것' 카테고리의 다른 글
| [JPA, Spring Security 기반 웹 애플리케이션 개발] 지식, 이슈 정리 (0) | 2025.03.03 |
|---|