2013-01-22 13 views
19

REST APIを搭載した小さなモバイルアプリケーション(AndroidおよびiOS)と少しのバックエンドサーバーを構築したいと考えています。私のサーバーに安全なFacebook認証を提供する

私のアプリのユーザー(アンドロイドまたはiOS)はFacebookにログインする必要があります。私はfacebook mobile sdkを使ってそれを行います。ログインが成功すると、facebook sdkはauthentificationsTokenを返します。これはユーザーのスマートフォンに表示されます。

アイデアは次のとおりです。 私のアプリケーションには何らかのデータが必要なときはいつでも、アプリケーションはHTTPS経由でサーバーバックエンド(REST)に接続します。例:アプリケーションは簡単なHTTP GETを作成し、取得したFacebook認証トークンを渡します。 My Serverはこのfacebook authenticationTokenを取得し、このトークンを使用して、ユーザーが認証されているかどうかを判断し、Facebookのプロフィール情報(firstname、lastnameなど)を取得します。したがって、サーバーはFacebookにも連絡し、HTTP GET Requestのためのパーソナライズされた応答を生成します。

私の質問は以下のとおりです。それは、サーバーが正しい関連付けられているFacebookのユーザーを取得するために、それぞれのREST API呼び出しのために、このfacebookAuthenticationトークンを渡すことが本当に十分な

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

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

答えて

8

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

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

3)これは厳しいものです。リモートアテステーションと呼ばれています。これには多くの問題があります。

あなたはこの方向に行く前に、あなた自身にあなたがから保護されている2つの質問

  • を依頼する必要がありますか?

  • どのくらい投資したいですか?

あなたが署名して大丈夫です、あなたのサーバーを使用する他のモバイルアプリを書くことが非常に限られた知識を持つ学生、に対して自分自身を保護している場合。

少し洗練されたソフトウェアエンジニア(あなたのアプリケーションをリバースエンジニアリングすることができます)から保護しているのであれば、それだけでは不十分です。このエンジニアは、アプリケーションから秘密鍵を抽出し、それを使用してアプリケーション内の要求に署名することができます。

リモートアテステーションhereおよびhereについて読むことができます。

簡単なリバースエンジニアリングからお客様を保護するソリューションは非常に複雑です。

P.S. RSAライブラリについてAndroid用この時

ルック:iOSの

RSA Encryption using public key

ため

Asymmetric Crypto on Android

そして、これ

関連する問題