본문 바로가기
Flutter/Flutter FAQ

Flutter 플러터에서 API 키를 저장하는 올바른 방법과 최선의 관행을 따르는 방법, Correct way of storing API Keys in flutter following best practises

by 베타코드 2023. 9. 6.
반응형

질문


플러터에서 비밀 API 키를 추가하는 올바른 방법(최선의 방법)은 무엇인가요? 만약 코드를 깃허브에 푸시하려면 어떻게 해야 할까요? 나는 앱이 작동하는지 테스트하기 위해 간단한 앱을 만들었지만, API 키를 일종의 임시 방법으로 사용했습니다. 일반적으로 백엔드에서 애플리케이션을 개발하는 경험에서 키는 어딘가에 저장되며 다른 파일에 저장한 다음 필요한 파일에 해당 파일을 가져와서 API_KEY을 사용합니다. 그리고 해당 파일은 .gitignore 파일에서 제외합니다.

지금까지 다음과 같은 접근 방식을 구현했습니다:

폴더 트리

-lib
  -auth
    -keys.dart
    -secrets.json 

secrets.json

여기에 KEY를 추가하고 이 파일을 .gitignore에 지정하여 코드를 푸시할 때 깃허브에 추가되지 않도록 합니다.

//API 키를 여기에 추가하세요
{
  "api_key": "ee4444444a095fc613c5189b2"
}

keys.dart

import 'dart:async' show Future;
import 'dart:convert' show json;
import 'package:flutter/services.dart' show rootBundle;


class Secret {
  final String apikey;

  Secret({this.apikey=""});

  factory Secret.fromJson(Map<String, dynamic>jsonMap){
    return new Secret(apikey:jsonMap["api_key"]);
  }
}


class SecretLoader {
  final String secretPath;

  SecretLoader({this.secretPath});
  Future<Secret> load() {
    return rootBundle.loadStructuredData<Secret>(this.secretPath,
            (jsonStr) async {
          final secret = Secret.fromJson(json.decode(jsonStr));
          return secret;

        });
  }
}

나는 이러한 접근 방식이 너무 복잡하다고 느낍니다. 더 나은 접근 방식에 대한 제안을 받고 싶습니다.


답변


API Keys must be hard coded.

왜?

외부 소스에서 키를 검색하지 않고는 해당 소스의 키를 얻을 수 없으며, 앱 내에서 키를 안전하게 저장할 수 없습니다.

예시

앱을 Firebase 프로젝트나 Google Cloud 서버에 연결할 때, 하드 코딩된 API 키를 사용하여 인증을 수행합니다. 클라우드 프로젝트를 초기화할 때 앱에 다운로드한 API 키를 사용합니다 (자세히 보기).

보안

중요한 자산을 보호하기 위해 두 가지 필수 단계가 있습니다:

  1. 비밀 키를 버전 관리에서 제외하세요.
  2. 어플리케이션의 역공학을 어렵게 만들고 API 키를 공개하지 않도록 난독화를 사용하세요.

개인적으로, 이러한 단계만으로 앱 API 키를 보호할 수 있습니다.

반응형

댓글