개발을 하다보면 문제가 발생할 곳이라 생각해서 예외처리를 해두지만,실제는 다른 곳에서 발생하는 경우가 많았습니다. 어느날 평화롭게 Firebase에서 사용자의 앱 안정성 확보를 위해 crashlytics 모니터링중 예상치 못한 버그가 발생하는 것을 확인했습니다.
백업 너어는 정말…
안드로이드에서는 개발을 할때 백업 기능이 기본적으로 활성화 되어 있었습니다. Android security를 통해 암호화를 진행하고 EncryptedSharedPreferences에 저장을 하고나서 복보화키는 Android KeyStore에 저장되는 구조였습니다. 그러나 여기서 문제가 발생합니다. 안드로이드에서 백업이 이루어질때 SharedPreferences도 백업이 이루어지지만, KeyStore에 저장된 복보화된 키는 백업이 되지 않기 때문에 나중에 앱사용할때 키는 없는데 데이터가 존재하니 KeyStoreException가 발생했습니다.
해결방법은?
일단 본직적인 문제는 KeyStore키 백업 문제이기 때문에 AndroidManifest.xml 파일에 있는 항목중에서 android:allowBackup="false” 로 변경하여 비활성화 하였습니다. 문제는 해결되었지만 완벽한 해결이 아닌것 같아 다른 방법을 조금더 연구가 필요해보입니다. 루팅을 통해 접근하여 어찌해서 탈취가 일어났을때 사용자정보를 복보화하여 확인할 수 있을거라 생각이 들기 때문에 Refresh Token 외에 다른 Token 수단을 만들어 발급수단을 새로 만들거나 해야하는 기능을 고민을 해봐야할 것 같습니다.