1

注:この問題はiOSアプリのコンテキストで発生しますが、その特定のOSで実行されているアプリに限定されているとは思いません。

私はユーザーデータをサーバーにバックアップするiOSアプリケーションを開発しており、更新されるユーザーが実際に実際のユーザーであることをサーバー側で確認するための最良の方法を見つけようとしています。各ユーザーにはID(uid)があります。サーバー側に依存しているのがそれだけだとしたら、プロセスは次のようになると思います。

  • ユーザーが初めてアプリを実行する
  • アプリでアカウントを作成します。これはサーバーと通信して、サーバーでアカウントを作成し、一意の「ユーザーID」(uid)を取得します。
  • アプリはこのuidを保存して、サーバーとのその後の通信でユーザーを識別できるようにします

ただし、誰かが自分のiPhoneでアプリをハッキングした場合、ユーザーIDの値を変更すると、すぐに別のユーザーのデータにアクセスしたり、変更したりできるようになります。

私が検討している現在の解決策は、ユーザーが2つの一意のID、uid(自動インクリメントされた数値)と、より長く、より複雑なキー文字列を受け取ることです。したがって、サーバーとのすべての通信は、uidとキーの両方を送信する必要があります。サーバーは、ユーザーがアプリの言うとおりの人物であることを確認するために、それらが一致することを確認します。

したがって、私の質問は2つあります。

  1. これはこれを達成するための正しい方法ですか?それとも、私が追求すべき他の標準的な方法はありますか?
  2. これが正しいアプローチである場合、一意のキーを生成するための推奨される方法は何ですか?
4

2 に答える 2

4

まず、必要に応じて、最初にユーザーIDとしてより複雑な値を使用できます(UUIDなど)。単調に増加するIDは、サービスの規模が拡大するにつれて管理が難しくなります。

安全なWebサイトがセッションを記憶するためにブラウザに安全なCookieを残す場合と同じ問題が発生します。これらのCookieにはユーザーIDが含まれていますが、改ざんを防ぐ必要があります。これは通常、サーバーでCookieに署名してから送り返すことによって行われます。

だからあなたがすることは:

  1. サーバー上でユーザーIDを生成し、それを使用して、クライアントがサインインする必要があるある種の「認証トークン」を作成します。
  2. サーバーだけが知っている秘密鍵を使用して、サーバー上の認証トークンに署名します。
  3. authトークンをクライアントに送信します。クライアントには、以降のすべてのログイン用に保存されます。他の誰かがネットワーク上でそれをスヌーピングするのを防ぐために、HTTPSを介して認証トークンを転送します。

アプリがログインしたら、認証トークンをサーバーに送信します。ハッキングされた場合、署名の検証は失敗し、クライアントを拒否することがわかります。

署名されたトークンにもタイムスタンプを含めることを検討してください。タイムスタンプはしばらくすると期限切れになり、サーバーに認証トークンを定期的に再生成させます。これにより、キーが危険にさらされた場合に保護されます。ユーザー自身が定期的な認証にも使用できる共有シークレット/パスワードを持っていない限り、これをすべて完全に行うことは困難です。あなたがどこまで行く必要があるかに依存します。

その他の考慮事項:ユーザーについて知っているのが生成されたUIDだけである場合、そのユーザーが後で別のiOSデバイスから戻って、そこでアカウントを復元する方法はありませんよね?一般に、ユーザーが後でアクセスしたい「価値のある」ものを自分のアカウントで作成する場合は、メールアドレスやパスワードなどに裏打ちされた従来のユーザーアカウントを作成することをお勧めします。アプリを再インストールした後、アカウントに再度アクセスします。(これは、あなたのケースに関連する場合と関連しない場合があります。)

于 2012-01-06T23:12:53.950 に答える
0

「標準のWebブラウザの方法」を使用して、ユーザーに電子メール(ログイン)とパスワードを設定させることをお勧めします。

iOSデバイスが(HTTPSを使用して)サーバーに接続すると、通常の「基本認証」を使用してログインし、設定された期間有効なCookieを受信します。デバイスがCookieの存続期間内にサーバーにデータを要求し続ける限り、Cookieは更新され、Cookieの有効期限が切れると、サーバーは保存された情報を使用して再度ログインするようにクライアントに自動的に要求します。

これにはいくつかの利点があります。

  • ユーザーは、定期的にパスワードをリセットして、新しいデバイスで自分のアカウントに再度ログインできます。簡単で簡単に解決できる問題。

  • サーバー側に特別な解決策はありません。サーバー側のスクリプトでは、ブラウザの場合と同じように認証が必要になる場合があります。組み込みの機能です。

  • 独自のセキュリティスキームを考案する必要はありません。このスキームは、Webサイトへの認証のために毎日何百万ものブラウザで使用されています。

  • 特別な電話に縛られることなく、ユーザーが複数のiOSデバイスを持っている場合、ログインするだけですべてのデバイスから同じアカウントを使用できます。特別なセットアップ手順はありません。

言い換えると; ログイン情報の処理方法、実証済みのセキュリティ、使いやすさなど、一般的に解決された問題を開発するための特別なソリューションはありません。

私によると、あなたは本当にそれを打ち負かすことはできません:)

于 2012-01-13T20:08:54.420 に答える