Dev.YoungKyu
YoungKyu's Devlog
전체 방문자
오늘
어제
  • 분류 전체보기 N
    • 부스트캠프
    • iOS N
    • visionOS
    • Backend
    • 알고리즘
    • CS
    • Git
    • Python
    • 끄적끄적

블로그 메뉴

  • 홈
  • 🌝 티스토리 홈
  • ⭐️ 깃허브
  • 태그

공지사항

인기 글

최근 댓글

최근 글

태그

  • 백준
  • 티스토리챌린지
  • Python
  • AVAudioSession
  • constraint
  • MVC
  • Swift5.7
  • Optional
  • alamofire
  • 소프트웨어 공학
  • swift
  • boj
  • 오블완
  • AutoLayout
  • ImageResource
  • image
  • 소프트웨어 테스트
  • Concurrency
  • guard
  • 모듈화
  • Git
  • if let
  • 알고리즘
  • 소프트웨어공학
  • CS
  • 부스트캠프
  • jekyll
  • SwiftUI
  • ios
  • authenticationinterceptor

티스토리

hELLO · Designed By 정상우.
Dev.YoungKyu
iOS

[iOS]카카오 로그인 구현 시 키 값 숨기기

[iOS]카카오 로그인 구현 시 키 값 숨기기
iOS

[iOS]카카오 로그인 구현 시 키 값 숨기기

2022. 9. 11. 15:19

카카오 로그인 iOS SDK 공식 문서

설치방법 : https://developers.kakao.com/docs/latest/ko/getting-started/sdk-ios
사용방법 : https://developers.kakao.com/docs/latest/ko/kakaologin/ios

앱을 출시하려면 필수가 되어버린 소셜 로그인 기능 중 국내에서 가장 많이 사용되는 카카오 로그인!
그런데 SwiftUI 에서 iOS SDK 2.4.0 버전을 다루는 글이 많이 없는 것 같아 직접 맨 땅에 헤딩해보고 사용법과 문제점을 정리해보려고 합니다.

개발 환경

Xcode : 13.1
target iOS : 14.0
Kakao iOS SDK : 2.4.x

로그인 방법

자세한 내용은 카카오 공식문서에서 확인하실 수 있습니다.

1. Info.plist 설정

[Info] > [Custom iOS Target Properties]에 Array 타입 키(Key)인 LSApplicationQueriesSchemes를 추가하고, 해당 키의 Item으로 커스텀 URL 스킴에 사용할 값인 kakaokompassauth, kakaolink를 추가합니다.

2. URL Schemes 설정

URL Schemes 는 kakao{NATIVE_APP_KEY} 형식으로 입력합니다.
예를 들어 네이티브 앱 키가 '123456789'라면 'URL Schemes'에 'kakao123456789'를 입력합니다.

3. SDK 초기화


  
import SwiftUI
import KakaoSDKCommon
import KakaoSDKAuth
...
@main
struct SwiftUI_testApp: App {
...
init() {
// Kakao SDK 초기화
KakaoSDKCommon.initSDK(appKey: "NATIVE_APP_KEY")
}
...
}

SwiftUI의 경우 AppDelegate.swift 가 없으므로 프로젝트명.swift 파일 내 init() 함수 안에서 초기화 해주시면 됩니다.

4. 커스텀 scheme 처리


  
import SwiftUI
import KakaoSDKCommon
import KakaoSDKAuth
...
@main
struct SwiftUI_testApp: App {
...
init() {
// Kakao SDK 초기화
KakaoSDKCommon.initSDK(appKey: "NATIVE_APP_KEY")
}
var body: some Scene {
WindowGroup {
// onOpenURL()을 사용해 커스텀 URL 스킴 처리
ContentView().onOpenURL(perform: { url in
if (AuthApi.isKakaoTalkLoginUrl(url)) {
AuthController.handleOpenUrl(url: url)
}
})
}
}
...
}

5. 카카오톡으로 로그인


  
import SwiftUI
import KakaoSDKCommon
import KakaoSDKAuth
import KakaoSDKUser
struct ContentView: View {
var body: some View {
Button(action : {
//카카오톡이 깔려있는지 확인하는 함수
if (AuthApi.isKakaoTalkLoginAvailable()) {
//카카오톡이 설치되어있다면 카카오톡을 통한 로그인 진행
AuthApi.shared.loginWithKakaoTalk {(oauthToken, error) in
print("👇 oauthToken?.accessToken 👇")
print(oauthToken?.accessToken)
print("👇 oauthToken?.refreshToken 👇")
print(oauthToken?.refreshToken)
print("👇 error 👇")
print(error)
}
}else{
//카카오톡이 설치되어있지 않다면 사파리를 통한 로그인 진행
AuthApi.shared.loginWithKakaoAccount {(oauthToken, error) in
print("👇 oauthToken?.accessToken 👇")
print(oauthToken?.accessToken)
print("👇 oauthToken?.refreshToken 👇")
print(oauthToken?.refreshToken)
print("👇 error 👇")
print(error)
}
}
}){
Text("카카오 로그인")
}
}
}

6. 유저 정보 가져오기


  
UserApi.shared.me() {(user, error) in
if let error = error {
print(error)
}
else {
print(String((user?.id)!))
print((user?.kakaoAccount?.email)!)
}
}

유저 정보는 UserApi.shared.me() 함수를 사용하여 아주 쉽게 가져올 수 있습니다!

앱 키 보안

우선 로그인하는 방법을 아는게 우선이었기 때문에 여기까지는 키 값을 신경쓰지 않고 작성했습니다. 그런데 저흰 본능적으로? 키 값이 공개되면 안된다고 알고 있는데 아래 코드를 보면 코드가 날 것 그자체로 들어가고 있어요.


  
import SwiftUI
import KakaoSDKCommon
import KakaoSDKAuth
...
@main
struct SwiftUI_testApp: App {
...
init() {
// Kakao SDK 초기화
KakaoSDKCommon.initSDK(appKey: "NATIVE_APP_KEY")
}
...
}

한참을 고민끝에 찾은 방법은 두가지였습니다!

1. 유저 디폴트 방식 (Info.plist)


  
<key>KAKAO_APP_KEY</key>
<string>1a2b3c4d5e6f7g8910</string>

Info.plist에 key : value 형식으로 저장해두고


  
import SwiftUI
import KakaoSDKCommon
import KakaoSDKAuth
...
@main
struct SwiftUI_testApp: App {
...
init() {
// Kakao SDK 초기화
let KAKAO_APP_KEY: String = Bundle.main.infoDictionary?["KAKAO_APP_KEY"] as? String ?? "KAKAO_APP_KEY is nil"
KakaoSDKCommon.initSDK(appKey: KAKAO_APP_KEY, loggingEnable:true)
}
...
}

필요시에 key 값을 가져오는 방법으로 키를 숨길 수 있습니다.


카카오 공식문서에 따르면 네이티 앱 키는 SDK를 초기화하는 곳에만 사용하기 때문에 이렇게 간단하게 userDefaults에 저장하는 것만으로도 충분한 것 같습니다.

그러나 이러한 userDefaults 방식은 유저가 OS를 탈옥했을 경우 내용을 볼 수 있다는 취약점이 있습니다. 그래서 더 안전한 방법으로 KeyChain에 저장하는 방법이 있습니다.

2. 키체인 방식 (KeyChain)

키체인은 Apple이 제공하는 보안 프레임워크로,
디바이스 안에 암호화된 데이터 저장 공간을 의미합니다.
이 키체인을 통해 암호화된 공간에 패스워드, 결제데이터, 키값 등 중요한 데이터를 안전하게 보관할 수 있습니다.

참고 링크 : https://adora-y.tistory.com/m/entry/iOS-KeyChain%EC%9D%B4%EB%9E%80-Swift%EC%BD%94%EB%93%9C%EB%A5%BC-%ED%86%B5%ED%95%B4-%EC%82%B4%ED%8E%B4%EB%B3%B4%EA%B8%B0

'iOS' 카테고리의 다른 글

Swift 5.7 릴리즈 - 언어 및 표준라이브러리, 개발자 경험  (0) 2022.09.13
[SwiftUI]커스텀 백버튼 백 제스처 시 화면 멈춤 이슈 해결  (0) 2022.09.11
[iOS][Swift] 프로토콜 vs 인터페이스 차이점  (1) 2022.09.11
[iOS][Swift] guard 문  (0) 2022.09.11
[iOS][Swift] 코딩 컨벤션  (0) 2022.09.11
  • 로그인 방법
  • 1. Info.plist 설정
  • 2. URL Schemes 설정
  • 3. SDK 초기화
  • 4. 커스텀 scheme 처리
  • 5. 카카오톡으로 로그인
  • 6. 유저 정보 가져오기
  • 앱 키 보안
  • 1. 유저 디폴트 방식 (Info.plist)
  • 2. 키체인 방식 (KeyChain)
'iOS' 카테고리의 다른 글
  • Swift 5.7 릴리즈 - 언어 및 표준라이브러리, 개발자 경험
  • [SwiftUI]커스텀 백버튼 백 제스처 시 화면 멈춤 이슈 해결
  • [iOS][Swift] 프로토콜 vs 인터페이스 차이점
  • [iOS][Swift] guard 문
Dev.YoungKyu
Dev.YoungKyu
iOS를 공부하고 있습니다

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.