2013-04-19 1 views
1

다른 certs/키로 서명 된 두 개의 애플리케이션이 있습니다.서명이 서로 다른 두 앱 간의 맞춤 권한

인증을 신청하려면 응용 프로그램 A에서 응용 프로그램 B (제 3자는 그러한 호출을 할 수 없음)에서 (서비스로) 호출하십시오.

Android의 일반적인 솔루션은 서명 보호 수준의 맞춤 권한입니다. 그러나 두 가지 응용 프로그램이 다른 certs (다른 회사에서 개발 한)로 서명했기 때문에 내 경우에는 작동하지 않습니다.

그래서 질문이 있습니다. 이 경우 가장 좋은 방법은 응용 프로그램 A (또는이 회사에서 개발 한 응용 프로그램) 만 응용 프로그램 B에서 서비스를 호출하거나 바인딩하도록하려면 어떻게해야합니까?

+0

이것은 웹 서비스 API 클라이언트 인증 문제와 매우 유사하므로 여기에서 사용 된 솔루션에서 영감을 얻을 수 있습니다. –

답변

2

정말 IMHO가 없습니다.

권한이 signature이 아닌 경우 사용자가 권한을 요청한 모든 앱에 권한을 부여 할 수 있으므로 권한이 도움이되지 않습니다.

바인딩 패턴이있는 서비스를 사용하는 경우 BindergetCallingUid()이 있으며이 번호를 사용하여 호출하는 응용 프로그램의 UID를 찾을 수 있습니다. 일부 작업을 수행하면 해당 UID의 패키지 이름을 PackageManager에서 찾을 수 있습니다. 해당 패키지 이름을 확인하는 방법은 귀하가 결정합니다 (구운 화이트리스트, 패키지의 의미를 PackageManager에서 이해해보십시오). 그렇다고해서 누군가가 APK를 망치고 인증 루틴을 해킹하는 것을 막을 수는 없습니다.

+0

패키지 서명 유효성 검사는 어떻게됩니까? 내 말은, 당신이 Uid를 얻으면, 패키지를 얻고 서명을 얻고 응용 프로그램 B에 저장된 인증서에 대해 유효성을 검사합니까? 이 방법으로, 나는 서명이 검사 될 것이기 때문에 아무도 APK 어플리케이션을 엉망으로 만들 수 없다고 생각한다. –

+0

"유효성 검사 루틴을 해킹"한다고 말하면 응용 프로그램 B (A가 아님)를 변경한다는 의미입니까? –

+0

@VictorRonin : 미안하지만, 내 대답은 공격으로부터 스스로를 방어해야하는 것이기 때문에, 애플리케이션 B를 거의 완전히 언급하고있었습니다. – CommonsWare