개발/안드로이드

(Android) 네이버/카카오 API 키 안전하게 관리하기

DinoDev 2024. 1. 8. 00:24
728x90
반응형

안드로이드 애플리케이션 개발에서는 다양한 Third Party Library를 활용하여 기능을 향상시키고 개발 시간을 단축합니다. 이러한 라이브러리들은 종종 API 키를 필요로 하는데, 이는 서비스 제공자와 애플리케이션 간의 인증을 위해 사용됩니다. 하지만 이 API 키가 노출될 경우, 보안 위험이 발생할 수 있습니다. 불법적인 접근, 데이터 유출, 비용 상승 등 다양한 문제가 생길 수 있기 때문에, API 키를 안전하게 관리하고 보호하는 것이 중요합니다.

 

네아로(네이버 아이디 로그인), 카아로(카카오 아이디 로그인)과 같이 메신저 로그인을 연동할 때도 위와 같은 상황이 동일하게 적용되기 때문에 API 키 관리를 중요하게 생각해야합니다.

 

이를 위해 개발자는 코드 내에서 직접적으로 키를 노출하지 않고 관리해야 합니다.

이 블로그 포스트에서는 local.properties와 build.gradle.kts를 통해서 구현하는 방법에 대해 설명하고자 합니다.

 

local.properties

project root에 local.properties 파일이 존재합니다. 이 파일은 기본적으로 .gitignore에 추가되어 있기 때문에 git에 포함되지 않도록 되어있습니다. 실수로 .gitignore에서 제거하지 않도록 조심해야 합니다.

아래와 같이 kakao developers에서 발급한 api key를 추가해줍니다.

// local.properties
KAKAO_API_KEY="{NATIVE_API_KEY}" // String으로 들어가서 "" 필요
KAKAO_REDIRECT_URI=kakao{NATIVE_API_KEY} // "" 불필요

ex)
KAKAO_API_KEY="123456789"
KAKAO_REDIRECT_URI=kakao123456789

 

build.gradle.kts

gradleLocalProperties() 함수를 통해서 local.properties에 추가한 KAKAO_API_KEY를 가져오고 BuildConfig.KAKAP_API_KEY 형태로 접근 할 수 있도록 합니다.

만약 AndroidManifest.xml에서 사용하려면 addManifestPlaceholders() 함수를 사용해서 추가해야 합니다.

import com.android.build.gradle.internal.cxx.configure.gradleLocalProperties

android {
    defaultConfig {
        ...
        buildConfigField("String", "KAKAO_API_KEY", gradleLocalProperties(rootDir, providers).getProperty("KAKAO_API_KEY"))
        addManifestPlaceholders(mapOf("KAKAO_REDIRECT_URI" to gradleLocalProperties(rootDir).getProperty("KAKAO_REDIRECT_URI")))
    }
}

 

여기까지 하고 build를 하는 순간 이런 에러를 만나게 될 수 있습니다.

Caused by: java.lang.RuntimeException: com.android.builder.errors.EvalIssueException: defaultConfig contains custom BuildConfig fields, but the feature is disabled.

 

gradle.properties

위 처럼 에러를 만나게 되면 gradle.properties에 아래 코드를 추가하면 됩니다.

android.defaults.buildfeatures.buildconfig=true

 

사용하기

Application class를 상속받은 클래스에서 onCreate에서 사용할 때는 BuildConfig 클래스로 접근하여 사용합니다.

class MyAppApplication : Application() {
    override fun onCreate() {
        super.onCreate()

        KakaoSdk.init(this, BuildConfig.KAKAO_API_KEY)
    }
}

 

AndroidManifest.xml에서는 이렇게 사용합니다.

<activity 
    android:name="com.kakao.sdk.auth.AuthCodeHandlerActivity"
    android:exported="true">
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        
        <!-- Redirect URI: "kakao${NATIVE_APP_KEY}://oauth" -->
        <data android:host="oauth"
                android:scheme="${KAKAO_REDIRECT_URI}" />
    </intent-filter>
</activity>

 


블로그 글에 대해 궁금한 점이 있다면 아래 카카오톡 오픈채팅에 들어와서 질문해주세요

 

Android Kotlin Compose QnA

 

open.kakao.com

 

728x90
반응형

'개발 > 안드로이드' 카테고리의 다른 글

(Android) Dynamic App Icon  (0) 2024.02.21