2012-11-18 1 views
8

iPhone 및 기타 휴대 기기를 대상으로 오프라인 웹 앱을 구축하고 있습니다. WebSql 로컬 스토리지를 사용하여 사용자 인증을 유지할 수있는 방법이 있습니까? 오프라인있는 동안 당신이 웹 응용 프로그램을 열 때오프라인 웹 응용 프로그램에 대한 사용자 로그인을 만드는 방법은 무엇입니까?

그래서, 내가 어느 사용자가 이미 로그인하거나 사용자가 로그인 할 수 있어야합니다.

+2

흥미로운 질문은 사용자 자격 증명을 로컬에 저장해야하므로 매우 안전하지 않다는 의미입니다. 이를 달성하기위한 안전한 방법이나 모범 사례가 있는지 궁금합니다. –

+1

그냥 생각해 봐야 할 것입니다. 자격 증명을 확인하는 것이 자바 스크립트의 클라이언트에서 이루어지면 응용 프로그램의 js 속성을 에뮬레이트하거나 인증을 우회하여 누군가를 에뮬레이트하거나 무시할 수 있습니다. 예를 들어 온라인 상태가되었을 때 클라이언트 측 데이터가 서버에 동기화되었다고 가정하면 문제가 발생할 수 있습니다. – user888734

답변

1

내가 제대로 질문을 이해한다면,이 방법이 할 수있다 그것을 :

(온라인)에 로그인 :

  • 도 인증 서버에 대해, 그것은 맞습니다 경우 WebSql 데이터베이스의 사용자 이름과 (Crypto JS를 사용하여 예를 들어) 해시 암호를 저장합니다.
  • 계정이 로컬 데이터베이스에 이미있는 경우 마지막 로그인 이후 사용자가 암호를 변경 한 경우 새 해시를 생성하십시오. 로컬 데이터베이스에 대해

    • 인증합니다 :

  • 은 (오프라인)에 로그인합니다.

물론 로컬로 로그인하기 전에 적어도 한 번 이상 온라인 버전으로 로그인해야합니다. 이것은 예를 들어 Windows 8이 연결이 끊긴 상태에서 누군가가 자신의 Microsoft 계정에 로그인을 시도 할 때이를 수행하는 방법입니다.

1

클라이언트 상태 데이터 (keychain in iOSAndroid에 있음)를 저장하거나 사용하는 방법을 모르지만 웹 앱 관점에서 볼 때 아무 것도 할 필요가 없습니다. 당신은 안전하지 못하기 때문에 아무것도 할 필요가 없습니다. 로그인 후 서버는 며칠 또는 몇 주 동안 HTTP only cookie을 설정합니다. 이 시간 동안 서버에 대한 요청 with credentials은 항상 브라우저에 의해 인증됩니다. 로그인 이메일 등을 서버에 요청할 수 있습니다. 추가 보안 목적으로 서버는 XSRF token을 요청할 수 있습니다. 이 경우 localStorage에 저장하십시오. 이 토큰을 잃어 버리면별로 의미가 없습니다.

이것은 가장 안전한 방법이며 WebView를 통한 인터넷 뱅킹을 포함하여 모바일 클라이언트에서도 사용됩니다. 브라우저에 인증을 사용하면 가장 쉽고 안전합니다. 왜냐하면 인증서 저장소, 올바른 SSL 인증서 확인, 암호화 등의 약점이 많이 있기 때문입니다. 웹보기에서는 모든 것이 브라우저에서 처리됩니다.

이러한 서버 코드가 어떤 방식인지 알고 싶다면 Appengine cross domain authentication server code으로 설명을했습니다.