19

小さなモバイル アプリ (Android および iOS) と、REST API を使用した小さなバックエンド サーバーを構築したいと考えています。

アプリのユーザー (Android または iOS) は Facebook にログインする必要があります。私はfacebooks mobile sdkを使ってそれを行います。ログインが成功すると、facebook SDK は認証トークンを返します。これは現在、ユーザーのスマートフォンにあります。

考え方は次のとおりです。アプリがデータを必要とするときはいつでも、アプリは HTTPS 経由でサーバー バックエンド (REST) に接続します。例: アプリは単純な HTTP GET を作成し、取得した Facebook authenticationToken を渡します。My Server はこの facebook authenticationToken を取得し、このトークンを使用して、ユーザーが認証されているかどうかを判断し、facebook のプロファイル情報 (名、姓など) を取得します。したがって、サーバーは facebook にも接続し、HTTP GET 要求に対するパーソナライズされた応答を生成します。

私の質問は次のとおりです。

  1. サーバーが正しい関連付けられた facebook ユーザーを取得するために、REST API 呼び出しごとにこの facebookAuthentication トークンを渡すだけで十分でしょうか?
  2. 私は HTTPS を使用しているので、接続は十分に暗号化されていると思いますよね?
  3. 署名メカニズムが必要だと思うので、(HTTPS 経由で) 各 REST API 呼び出しに署名して、facebookAuthentication トークンがモバイル アプリからのみ送信されていることを確認します。私なら、RSA と SHA-1 を使用して、REST API 呼び出しに署名します。しかし、このアプローチの問題点は、クライアントがアプリ内のどこかに秘密鍵を保存する必要があり (署名要求用)、サーバーが公開鍵を知っている (署名照合用) ことです。これは正しいです?はいの場合、モバイルアプリ(特にアンドロイド)を逆コンパイルして秘密鍵を取得できるため、セキュリティ上の大きな問題だと思います。この秘密鍵をアプリに安全に保存するにはどうすればよいですか? 他にお勧めできる署名システムはありますか?

Bt: iOS および Android 用の優れた RSA ライブラリをご存知ですか?

4

1 に答える 1

8

1) はい。それは十分だ。クライアント (モバイル アプリ) にトークンがある場合、ユーザーが Facebook に対して認証されたことを証明します。したがって、この方法でユーザーを認証しました。ただし、モバイル アプリを認証するだけでは十分ではありません (これについては、#3 で説明します)。

2) はい。両方の方法で暗号化されています。

3) 難しいですね。これは、リモート認証と呼ばれます。これには多くの問題があります。

この方向に進む前に、2 つの質問を自問する必要があります。

  • あなたは誰から保護していますか?

  • いくら投資してもいいですか?

サーバーを使用する別のモバイルアプリを作成する可能性のある、非常に限られた知識しか持たない学生から身を守る場合は、署名で問題ありません。

少しだけ高度なソフトウェア エンジニア (アプリケーションをリバース エンジニアリングできるエンジニア) から保護する場合は、十分ではありません。このエンジニアは、アプリケーションから秘密鍵を抽出し、それを使用して自分のアプリケーションでリクエストに署名できます。

リモート認証については、ここここで読むことができます。

単純なリバース エンジニアリングからユーザーを保護できるソリューションは非常に複雑です。

PS RSAライブラリについて。

Androidの場合はこれを見てください:

Android の非対称暗号

そして、これはiOS用です

公開鍵を使用した RSA 暗号化

于 2013-01-24T17:49:32.273 に答える