2009-05-11 19 views
35

私は、他のウェブサイト/アプリケーションが(PHPゲートウェイ経由で)私のウェブサイトのデータベースにアクセスするための簡単なREST JSON APIを持っています。基本的にこのサービスは次のように動作します:call example.com/fruit/orange、serverはオレンジ色のJSON情報を返します。ここに問題があります。私はこのサービスにアクセスすることを許可するウェブサイトだけを望んでいます。シンプルなAPIキーシステムでは、承認されたWebサイト(潜在的に)のクライアント側コードからキーをコピーすることで、どのWebサイトでもすぐにキーを取得できます。私はOAuthを見てきましたが、私がやっていることは少し複雑です。ソリューション?シンプルで安全なAPI認証システム

+0

HTTP HTTPSによる基本認証。 – Petah

答えて

4

誰かのクライアント側のコードが侵害された場合、新しいキーを取得する必要があります。あなたのコードが公開されていれば、できることはあまりありません。

ただし、許可されたサーバーのIPアドレスを指定したキーのシステムに登録する必要があります。これは余分なステップを追加し、過度の可能性があります。

"シンプルなAPIキー"を使用して何を意味するのかよく分かりませんが、プライベートキー(クライアントとサーバーのみが認識できる)を使用して何らかの種類のチェックサムアルゴリズムを実行する必要がありますクライアントが実際に自分が誰だと思っていることを確実にし、データが転送中に変更されていないことを確認します。 Amazon AWSはこれを行う方法の素晴らしい例です。

私は、あなたのクライアント側でコードが改ざんされていないことを保証するために少し厳しいかもしれないと思います。私は自分のデータのセキュリティのためにクライアントに責任を置くことは合理的だと思います。もちろん、これは、攻撃者がそのクライアントのアカウントを台無しにすることができることを前提としています。

おそらく、特定のアカウントのIP要求がログに記録されている可能性があります。新しいIPが来たら、アカウントにフラグを立てて、クライアントに電子メールを送信し、そのIPを許可するように依頼してください。私は多分それがうまくいくような何かを知らない。

2

基本的には、IPによるアクセスを制限するか、APIキーを使用するかの2つのオプションがあります。どちらのオプションも、正と負の2つのオプションがあります。

制限IP
これは、サービスへのアクセスを制限する便利な方法です。特定の認証機能を実装することなく、サービスにアクセスするサードパーティのサービスを正確に定義することができます。しかしながら、この方法の問題は、サードパーティのサービスが例えばJavaScriptで完全に書かれている場合、要求が行われると、着信要求のIPはサードパーティのサービスのサーバIPではなく、ユーザのIPになることであるサーバーではなくユーザーのブラウザーによって実行されます。 IP制限を使用すると、クライアント主導のアプリケーションを書くことが不可能になり、すべての要求が適切なアクセス権を持つサーバーを通過するよう強制されます。 IPアドレスも偽装することができます。

APIキー
APIキーの利点は、既知のIPのリストを維持する必要はなく、APIキーのリストを維持する必要がありますが、メンテナンスを自動化する方が簡単です。基本的にこの仕組みは、ユーザーIDと秘密パスワードなどの2つのキーがあることです。サービスへの各メソッド要求は、リクエストパラメータ、ユーザーID、およびこれらの値のハッシュ(ハッシュソルトとして使用されるパスワード)からなる認証ハッシュを提供する必要があります。このようにして、アクセスを認証し制限することができます。この問題は、サードパーティのサービスがクライアント主導型(JavaScriptやActionScriptなど)として記述されている場合、誰でもコードからユーザーIDと秘密のsalt値を解析できます。

基本的には、あなたが定義したサービスのほんの一部があなたのサービスにアクセスできるようにするには、IP制限を使用して、サーバからすべての要求をルーティングするオプションがあります。APIキーを使用する場合、これを強制する方法はありません。

28

OAuthを使用する必要があります。

実際には2つのOAuth仕様、3-leggedバージョンと2-leggedバージョンがあります。 3足歩行バージョンは、ほとんどの注目を集めるもので、ではなく、を使用します。

2足版はまさにあなたが望むもので、アプリケーションが共有秘密鍵(AmazonのWebサービスモデルに非常によく似ていますが、HMAC- SHA1署名方式)または公開鍵/秘密鍵方式(署名方式RSA-SHA1を使用)を使用します。悪い知らせは、まだ3足版とほぼ同じくらいサポートされていないということです。そうしなければならない場合よりももう少し作業をしなければならないかもしれません。

基本的に、2足のOAuthは、現在の日付、「ノンス」と呼ばれる乱数、およびリクエストのパラメータを含むいくつかのフィールドに「署名」する(ハッシュを計算する)方法を指定します。これにより、が非常に難しくなります。 Webサービスへの要求を偽装します。

OAuthはゆっくりとしていますが、確かにこの種のものの受け入れられた標準になっています。あなたがそれを受け入れるならば、人々はそのために利用できるさまざまなライブラリを活用できるため、

初心者よりももっと精巧ですが、多くの人が多くの時間を費やして、何かを忘れていないことを知っていることが良いニュースです。素晴らしい例は、最近TwitterがOAuthセキュリティのギャップを見つけ、コミュニティが現在閉鎖中に取り組んでいることです。あなた自身のシステムを発明したならば、あなた自身でこのすべてのものを見つけ出す必要があります。

幸運を祈る!

クリス

21

OAuthがここにソリューションではありません。
OAuthは、エンドユーザがいて、サードパーティのアプリケーションでエンドユーザのパスワードを処理しないようにする場合です。シンプルなAPIキーため http://blog.apigee.com/detail/when_to_use_oauth/

移動:OAuthの使用するとき。
さらに安全なソリューションが必要な場合は、追加の対策を講じてください。

は、ここで接続取得する前にユーザーに巨大なバグを生成思わIPのセキュリティの生産のすべてのhttp://blog.apigee.com/detail/do_you_need_api_keys_api_identity_vs._authorization/

+0

LOL:blog.apigee.comへのリンクが壊れており、「アクセスが拒否されました:あなたはこのページにアクセスする権限がありません」と表示されます。しかし、それは2009年からとにかく、情報がどれほど関連性があるのか​​わかりません。 – auco

+1

誰かがまだ興味があるなら、私はまだインターネットアーカイブのリンクです(私はまだそれと思っていました): https://web.archive.org/web/ 20140708081525/https://blog.apigee.com/detail/do_you_need_api_keys_api_identity_vs._authorization – Gerard

0

、いくつかの詳細情報です。 Symbian 60sは、複数のユーザー(Opera Handler UI 6.5、Opera Mini v8、および10を適用)の中で、コード化されたUI、完全に満たされたネットワーク設定と共に、トラスされていない、信頼できる安全な信号を放置する完全な能力を持っています。最終的により高速なリンク方法を発見する方法が得られたとき、他の機能を制限するのはなぜですか?より正確に識別されたアカウントを維持し、その「真のアカウント」を適切に監視する - 支払い請求書のトラックコンプライアンス上にあり、ユーザーが期限切れの残高を保っているかどうかを知ることで、インターネット信号の人気/業界。なぜセキュリティの機能をサイトに導入する前に、そのアカウントを毎月訪問すると接続の問題がすべて消えてしまうのでしょうか?未使用の請求書を持っている場合、モバイルのすべてのユーザーは「接続する」機能を持たないはずです。支払いをしているかどうか(パスワードの問題が懸念される) - 「監視機能」を備えた代わりに、「オールインワン」 - 登録/アプリケーションアカウント、OSで修正されたプログラム(おそらく電子メールアカウント)を提供してみませんか他の部門に)。そして、もし彼らのアカウントを正確にターンオフし、他のリンク機能を 'オフ'にすれば彼らのそれぞれは、あなたがロックを解除した場合には、毎回魅力的な場所に自分自身の利益を持ちます。支払いを再開し、より責任あるユーザーになるために期限切れになる可能性があります。維持されなければ口座。ネットワークプロバイダとのコラボレーションによって特定された「真のアカウント」を毎月監視またはアクセスすることにより、データサービスを表示するために、常にユーザの名前とパスワード、場所、アクセス権を要求するのではなく、 IPはすでに最初のアイデンティティまたは「ユーザーの所在地を見つける」とマークされているため、ブラウザーの事前検索に配置するのは変わっていません。なぜ「データの入手」または「データの処理」を使用しないのですか?

+0

可読性を向上させるために、回答をブロックに再構成することをお勧めします。 – Jendas

関連する問題