アプリケーションのREST APIを設計する際には、一部のサービスは公開されているはずですが、他のサービスは非公開にする(つまり公開することはできません)。 OAuthはサービスアプリケーションによって使用されます。RESTfulリソースへのアクセスを制限する
対策はどのようなものですか?心の中で
いくつかのアイデア:
- は、難読化されたURIの下で民間のリソースを公開します。
- 特別なアクセスキーが必要です。 (認可されたクライアントのみが知る)。
アプリケーションのREST APIを設計する際には、一部のサービスは公開されているはずですが、他のサービスは非公開にする(つまり公開することはできません)。 OAuthはサービスアプリケーションによって使用されます。RESTfulリソースへのアクセスを制限する
対策はどのようなものですか?心の中で
いくつかのアイデア:
最もスケーラブルな方法は、仲介のみ、特定のユーザーのためのみんなといるために利用可能なリソースを知ることは自明であるようにURLを設計しています。
次に、プロキシまたはサーブレットフィルタ、または現在のニーズに合ったフィルタを使用して承認を行い、許可されていない要求をすべてブロックします。 実際のサービスは、到達したすべての要求を盲目的に信頼して処理できるようになりました。
懸念事項とそのすべてを分離してください。
例:
非認証要求が到達することができます。username "ジョー" で認証
/myapi/public
要求にも到達することができます:
/myapi/personal/joe
401権限:
/myapi/personal/anything_but_joe
M/myapi/personal/otheruserと/ myapi/personal/nonexistentuserは区別できない応答を返します。
オーディエンスの特定のセグメントに保護され、制約される必要のあるリソースは、適切なアクセスコントロールを備えている必要があります(基本的には、ポイント2で話していることです)。目安として、Twitterなどの成功したサービスからAPIを参照すると、常にトークンが含まれています。
難読化は受け入れられません。これは単にsecurity through obscurityであり、根本的に欠陥があります。 OWASPトップ10、failure to restrict URL accessの一部をよく読んでください。 RESTfulであろうとなかろうと、同じルールがあらゆるリソースに適用されます。
アクセス制御は、最初の尺度である必要があります。深いセキュリティでは、URLを推測するのは難しいでしょう。 – Ellead
適切なアクセスコントロールの代わりにそれほど価値がなく、無意味なものがあります。「セキュリティは弱いセキュリティコントロールです」:https://www.owasp.org/index.php/Avoid_security_by_obpurity –
などです。この場合、アクセス制御はOAuthトークンによって制御されます。既知のキーのセットのみを受け入れます。さもなければ、私は404が満足すると思う。 – Ellead
私はこれが正しいとは思わない。 APIはHATEOASを中心に設計されている必要があります。つまり、ルートURIの応答(「ブックマーク」する必要がある唯一のURI)は、特定のユーザーがアクセスできないURIへのリンクを提供しません。管理者としてログインすると、特定のユーザーとしてログインしているユーザーとはAPIから返されたリンクが全く異なります。認証されていない場合は、公開されているURIのみが表示されます。 IMOこれらのURIは、可視性ではなく、リソース階層を記述するだけでよい。特定のリソースまたはフィードにアクセスできるユーザーは、同じURIを持つ必要があります。 –
そして、 "should"とは、RESTfulなサービスを作成し、ブックマークされた "root" URI以外のURIではなく、リンク関係に頼るだけの発見/堅牢性のメリットを得ることを意味します。HATEOASをやっていないなら、あなたはRESTをやっていません。HTTP APIだけです。これらのメリットが不要で、その作業をしたくないのであれば問題ありません。 –