2012-10-03 2 views
11

iOS 응용 프로그램을 만들고 사용자가 웹 서비스를 통해 인증합니다. 앱이 시작될 때마다 (토큰이 한 달 동안 지속될 때마다) 로그인하는 것을 원하지 않습니다. 그래서이 장치를 어딘가에 캐시하고 싶습니다.iOS에 인증 토큰 저장

안전하게이를 수행하는 가장 좋은 방법은 무엇입니까?

정지 상태로 남아있는 응용 프로그램에만 의존하고 '메모리'에 토큰을 유지할 수 있습니까?

+0

OWASP 가이드 라인 (https://www.owasp.org/index.php/IOS_Developer_Cheat_Sheet – rajagp

답변

15

이 옵션

NSUserdefault
  • 만들기 사용하는 작업을 수행하는 (권장)
  • 키 체인 접근 (액세스 토큰 또는 텍스트 필드 입력으로 가게 [나에게 옵션을 기억하십시오).

NSUserdefaults는 인증 목적으로 사용되는 신뢰할 수있는 값을 저장하는 데 안전하지 않습니다. 반면에 키 체인은 안전하고 안전하게 수행됩니다.

7

iOS가 응용 프로그램을 메모리에 영원히 보관할 것이라고 믿을 수는 없습니다. 따라서 토큰을 어떤 시점에서 영구 저장소에 저장해야합니다.

보기 Keychain Service for iOS. 암호, 토큰 및 기타 키를 저장하는 가장 좋은 장소입니다.

+0

)을 살펴볼 수도 있습니다.하지만 자격 증명이 원격 DB에 있고 그 자격 증명을 저장하지 않으려면 어떻게해야합니까? 장소 상에서? 어쨌든 토큰 또는 그와 유사한 것을 저장하기 위해 키 체인을 사용할 필요가 있습니까? –

+1

아니요. 키 체인에 아무 것도 저장할 필요가 없습니다. 비밀은 어디에 저장해야 할 것인지는 당신에게 달려 있습니다. 그러나 원격 DB에 자격 증명을 저장한다고 가정 해 보겠습니다. 이제 문제는 응용 프로그램이 원격 DB에 대해 어떻게 인증되는 것입니까? 하드 코드 된 사용자 이름/암호를 저장하면 누군가가 응용 프로그램을 디 컴파일하여 원격 DB의 사용자 이름/암호를 가져 와서 실제 자격 증명을 얻는 데 사용할 수 있습니다. 따라서 결국 장치에 무언가를 저장해야하며 키 체인 서비스는 일반적이며 안전하게 수행 할 수있는 방법입니다. –

5

"안전하게"수행 할 수 없습니다. 토큰은 공개 된 지식이며 해커가 장치를 보호하려고 할 때 해커가 액세스하려고 할 때 장치에 액세스 할 수있게되면 즉시 해독 할 수 있습니다. 키 체인에 넣으면이 사실이 바뀌지 않습니다. 거기에 보관하는 동안 안전하게 보관할지라도, 다음에 유선에 올 때 만료 될 때까지 기다린 다음 다음 번에 걸릴 수 있습니다. 실제로 모바일 환경에서 액세스 토큰을 사용할 수 없기 때문에 액세스 토큰은 보안에 대해 걱정할 필요가 없습니다.

이것이 의미하는 바는 원하는 어디서나 저장할 수 있다는 것입니다. NSUserDefaults는 괜찮습니다. 키 체인은 괜찮습니다. 데이터베이스는 괜찮습니다. 문서 디렉토리의 텍스트 파일은 문제가 없습니다. 결정된 해커가 원하는 데이터에 액세스 할 수있는 적절한 기회를 기다릴 수 있기 때문에이 모든 것이 동일하게 안전합니다. 대신 사용자의 인증 자격 증명 보안에 대해 걱정해야합니다. 키 체인에 이들을 저장하고 올바른 SSL 인증서가있는 서버로 HTTPS를 통해 API와 통신해야합니다.

+6

손상된 장치 나 연결로 인해 대부분의 일이 안전하지 않을 것이라는 데 동의하지만 보안은 주로 공격자가 정보에 액세스하거나 무언가를 습득하는 것을 어렵게 만듭니다. 이를 염두에두고 보안이 강화 된 환경 (예 : iOS 키 체인)에 더 중요한 정보를 저장하는 것이 좋습니다. 확실하게 결정된 해커는 아마 그것을 물리 칠 수 있지만, 덜 결정된 사람은 그렇지 않을 것이며 그것은 승리입니다. – lm2s