일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- Apple
- IOS
- mac
- JPA
- darkmode
- SwiftUI
- Code
- geofencing
- Xcode
- Session
- Swift
- Firebase
- window
- Notification
- stack
- FLUTTER
- 한글
- MacOS
- github
- error
- iOS16
- view
- Git
- 웹뷰
- Realm
- 개발자
- Archive
- appstore
- UIButton
- rxswift
- Today
- Total
EEYatHo 앱 깎는 이야기
JPA, Swift ) Kakao 로그인 클라-서버 2중 인증 - EEYatHo iOS 본문
열심히 iOS + 서버개발 인턴 하는 중. 시니어 개발자분이 말씀하시길!
iOS에서 SNS 로그인으로 토큰을 받고, 서버에 넘겨주면,
서버는 받은 토큰으로 SNS 서버에 유효성을 검증한 뒤, ( + 프로필 정보를 새로 뽑은 뒤 )
'어 유효한 유저맞네~' 하고 우리가 관리하는 JWT Token을 넘겨주는게 국룰이라 하심.
이렇게 2중으로 인증하는 걸 구현 해야하는 SNS는 카카오, 구글, 애플 3종류...
ㅇㅋ 하믄되지..
[ 1. 카카오 ]
우선 카카오다.
카카오의 오픈 API를 이용하여 로그인 할 때,
핸들러로 oauthToken를 받아오는데, ( 변수명 from 카카오 문서 )
얘가 가진 accessToken을 이용하면 된다.
let serviceTerms = ["tag1", "tag2"]
AuthApi.shared.loginWithKakaoTalk(serviceTerms: serviceTerms) { oauthToken, error in // 카톡으로 로그인 실시
// 에러 처리
if let error = error {
print(error)
return
}
// 로그인 리퀘스트 생성
let signInRequest = SignInRequest(name: "[유저 이름]",
accessToken: oauthToken?.accessToken ?? "",
socialType: .kakao,
uuid: "[UUID]")
// 로그인 리퀘스트 발싸
NetworkManager.singIn(request: signInRequest) { [weak self] result in
self?.signInResultProcessor(request: signInRequest, result: result)
}
}
iOS 측에서 accessToken을 서버에 보내는 코드다.
( name은 사실상 필요없다.
서버에서 유저의 프로필을 가져오고, 그 프로필 정보로 우리 서비스의 회원을 생성할 것인데,
애플은 서버에서 재확인시 이름을 얻을 수 없다.
그렇지만 애플을 따로 처리하기 보다는 리퀘스트 모델을 통일 시키는게 났다고 판단해서 넣은 상태다. )
( uuid는 여러 기기로 로그인하는 것을 방지하는 용도다. 마찬가지로 필요없다. )
이 accessToken을 받은 서버는, 이렇게 처리한다.
if (socialType.equals("kakao")) {
// 카카오 accessToken -> 카카오 토큰 유효성 확인 및 프로필 정보 얻기
// URI 준비
URI url = URI.create("https://kapi.kakao.com/v2/user/me");
HttpHeaders header = new HttpHeaders();
header.add("Authorization", "Bearer " + accessToken);
HttpEntity httpEntity = new HttpEntity(header);
// Http Request 발싸
RestTemplate restTemplate = new RestTemplate();
ResponseEntity response = restTemplate.exchange(url, HttpMethod.GET, httpEntity, String.class);
// Json 파싱
JsonUtil jsonUtil = new JsonUtil();
KakaoDTO kakaoDTO = jsonUtil.convert(response.getBody().toString(), KakaoDTO.class);
return SocialDTO.builder()
.name(kakaoDTO.getKakaoAccount().getProfile().getNickname())
.email(kakaoDTO.getKakaoAccount().getEmail())
.build();
} else if ( ... ) { ... }
간단하다.
https://kapi.kakao.com/v2/user/me 에다가,
헤더에 Authorization : Bearer [액세스 토큰] 을 넣어서 보내면,
유저정보를 다시 얻으면서 유효성을 검증할 수 있다.
추후엔 이때 얻은 유저정보를 가지고, 우리 서비스의 회원을 만든다.
구글과 애플은 다음글에.
'iOS, Swift > Feature' 카테고리의 다른 글
Swift ) xlsx 이미지까지 자유롭게 - EEYatHo iOS (0) | 2022.02.21 |
---|---|
Swift) .CSV 파일 만들기 - EEYatHo iOS (0) | 2022.02.02 |
Swift ) 디바이스 여유공간 구하기 - EEYatHo iOS (3) | 2021.07.21 |
JPA, Swift ) Apple 로그인 클라-서버 2중 인증 - EEYatHo iOS (1) | 2021.02.27 |
JPA, Swift ) Google 로그인 클라-서버 2중 인증 - EEYatHo iOS (0) | 2021.02.27 |