2012-03-02 13 views
0

これまでに回答したと思ったが、すぐにSO searchは何も出てこなかった。RESTful APIへの安全なデータアクセス

APIKeyによってロックされたプライベートAPIがあります。このキーは、リクエストごとに渡す必要があります。このキーを使用すると、APIの任意の部分にアクセスできます。明らかにそれはかなりオープンです。ほとんどの場合、これは受け入れられます。ただし、データがオーナーによって送信されていることを確認したい場合があります。

たとえば、更新またはを削除要求とみなします。他人のデータに対してこの要求を行うことはできません。だから、APIKeyに加えて、私はその要求を行うこのユーザーがそのアクションを実行することを保証するために他に何かを持っていたいと思います。

オーナーIDにこのようなリクエストを渡す必要があります。しかし、それはすぐに偽造されます。それで私は何を得ましたか?

私はこのような状況でSOの他のメンバーが実装していることを聞くことに興味があります。個々のAPIキー?二重認証ですか?

私のAPIはRESTアーキテクチャに準拠しており、PHP/Apacheで開発されています。

答えて

0

APIキーはユーザーごとに一意である必要があります。これにより、ユーザーが確認され、ユーザーがデータにアクセスする必要があることが確認されます。

セキュリティをさらに強化したい場合は、自動有効期限を設定してアクセストークンを取得するために使用できるリフレッシュトークンとしてそのapiシークレットを使用できます。

すべてのリクエストのSSLも提案されています。

+0

* refreshトークン*について詳しく説明できますか? –

+0

https://tools.ietf.org/html/draft-ietf-oauth-v2-23#section-1.5 – abraham

0

各APIユーザーには一意のAPIキーがあります。このキーは、それらをシステムの1人のユーザーとして識別します。より機密性の高いデータを扱う場合は、認証にはclient side certificatesを使用しましたが、通常はSSLを要求するBasic Auth +で十分です。

リクエストが到着したら、APIキーをユーザーにマップし、そのユーザーが対話しようとしているリソースを所有しているかどうかを判断します。

「オーナーを特定する」部分全体は、システムの構築状況に応じてAPIでうまくやることが難しい個別の問題です。私はこれまでのやり方を共有することもできますが、それは少し話題にすぎません。

0

Oauthの使用を検討する必要があります。要約すると、これはどのように動作すべきかです。

API呼び出しを行う各アプリケーションには、Oauthプロセスによる承認のためのそれぞれのアプリケーションレベルのAPIキーが必要です。ここのApikeyはアプリケーション(クライアント)のアイデンティティーを表しています。

Oauth認証プロセス中に、使用に関連付けられた各エンドユーザーは個別に(APIキーとは独立して)認証される必要があります。ユーザのアイデンティティ、認可の範囲などの関連するコンテキストは、アクセストークンと呼ばれるトークンにエンコードされます。

アプリケーションがこのアクセストークンを取得すると、アクセスリソースへのそれ以降のすべてのAPI呼び出しは、有効期限までアクセストークンを使用する必要があります。

API実装側では、アクセストークンの検証により、エンドユーザーのコンテキスト(Oauthプロセスで付与されるアクセスの範囲を含む)が明らかになり、特定のリソースを使用するためのアクセス/許可をリソースサーバー。

関連する問題