2009-06-30 14 views
4

私はモバイルデバイスとWebサービスの間の接続を保護するプロトコルを探しています。私は、モバイルデバイスだけがWebサービス上でアクションを実行できるようにしたいと思います。データを暗号化する必要はありません。モバイルデバイスとWebサービス間の接続を保護するプロトコル?

私はOauthを知っていますが、3つの異なるエンティティ(サーバー、コンシューマー、および認証)を取得したときに接続を保護するために使用されるようです。ここでは、消費者とユーザーは同じ人物になります。

これを行う簡単なプロトコルはありますか(Oauthの場合のように、ユーザーがログインしてからアクセストークンを承認する必要はありません)。

私はこれを別のプレートフォームで使用する必要があるため、少なくともiPhoneとPHPではプロトコルを使用できるようにする必要があります。

答えて

1

解決策を見つけました。「2足のOauth」プロトコルを使用してください。

このように、私は標準に固執し、私は車輪を再発明する必要はなく、私は安全な解決策を持っています。

私は消費者とユーザーが同じであるため、消費者がユーザーとしてログオンしていることがわかると、消費者が要求している "トークンの要求"を自動的に承認します。

私は何をやっていることです:SSLで

  • :私はユーザーとしてログインし、サーバへのコンシューマキー/秘密を要求
  • サーバーが私のコンシューマキーを私にお返し/秘密
  • はSSLで:私は、ユーザーとしてログインし、
  • 秘密私のコンシューマキー/サーバーとの「リクエストトークン」を要求し、それが自動的にSSLないリクエストトークン
  • を許可するように、私はユーザーだ認識:私は "頼みますアクセストークン "を私の「リクエストトークン」
  • は、サーバーがトークンバック
  • 私はあなたの答えを要求する安全
0

HTTPS接続で共有秘密/片方向暗号化ハッシュを使って自分自身をロールすることができます。

次に、それが特定のデバイスだけであることを確認したい場合は、デバイスIDのハッシュ+タイムスタンプ+デバイスの共有シークレットをパラメータとしてサーバーに渡し、 PHP側。

+0

おかげでジョンを実行するためにそれを使用する私に私のアクセスを与える、私はそれはかなりまっすぐ進むと思います。ただし、誰かが要求をキャッチして再生するのを避けるために、解決策にはナンスも含める必要があります。 – Martin

3

「安全」という意味を明確にする必要があります。正確に何に対して安全?何を心配していますか?

つまり、https(SSL上のHTTP)は良い出発点です。これにより、ウェブサイトをデバイス(またはブラウザ)に認証することができ、どこにでもいることができます。

デバイスを認証する場合は、もう少し手間がかかります。共有秘密情報(乱数)を生成して保存することができます。最初にサイトに接続するときはGET/POSTで提供します。これには多くのバリエーションがありますが、シンプルなものはすべて共有の秘密の確立から生じます。他の何かがおそらく過剰です。これにより、次回の接続時に同じデバイスが再び接続されていることを認識できます。それは、デバイスがログインするためのパスワードのようなものだと考えてください(単語である必要はありませんが、おそらくそうではありません)。

この問題は、プログラムが削除されるとその秘密が失われ、正確に何をしたいかによって次回プログラムが同じデバイスで実行されるときに問題になることがあります。新しい秘密を確立する必要があります。その場合、あなたはこの時間を接続するデバイスが前に接続したデバイスと同じであることを知る方法がありません。必要があれば、行うことは難しい種類のリセットメカニズムを使用する必要があり、デバイスではなくユーザーを認証することになります。

注:iphoneには固有の識別子がありますが、これは実際には秘密ではなく、指定したデバイスが接続しているという証拠はありません。それを提供することは害ではありませんが、アイデンティティの証明ではなく、「私はデバイスfooです」という主張によく似ています。それはログインのユーザー名部分のように考える - あなたはまだいくつかの共有秘密が必要です。

関連する問題