3

node.js(Express付き)にAPIを構築しました。これは、現在OAuth 2.0サーバー側(明示的)認証をサポートしています。クライアントがjavascriptライブラリ(クライアント側の暗黙的な認証)を介してアプリに接続できるようにしたいと思います。

まず、サーバーでCORSを有効にする必要があることを理解しています。

暗黙的な認証の問題についての私の現在の理解は、JavaScriptクライアントにサードパーティアプリケーションのシークレットをリクエストに含めるように依頼できないという事実です。これには、シークレットをjavascriptにコーディングする必要があり、セキュリティリスクが発生するためです(秘密鍵)。したがって、javascriptクライアントからのリクエストは、アプリケーショントークンのみで署名されます(シークレットはありません)。API側のセキュリティを保証するには、javacsriptを提供するドメインを、代わりに動作していると主張するサードパーティアプリの登録済みドメインと照合する必要があります。

言い換えると、API側では、プロセスは次のように機能するように聞こえます。

  1. 着信リクエストにサードパーティアプリケーションの「秘密」がない場合は、リクエストヘッダーを調べます
  2. このサードパーティアプリに対して登録されているドメイン名に代わってリクエストが行われていることをヘッダーが確認した場合は、アプリケーションが検証済みであると見なします(提供されている場合は、access_tokenの認証に進みます)。

私の混乱はこれです:

ヘッダーのなりすましを要求することはできませんか?リクエストを行っているJavaScriptクライアントが、それが主張しているドメインに本当に存在していることをどのように確認できますか?

4

1 に答える 1

3

ヘッダーにあるリファラー情報をクライアントが変更しないように、ブラウザーを信頼できるはずです。この場合、ほとんどのAPIはリファラーのチェックに満足します。

これは、サーバーがすぐに期限切れになるトークンをクライアントに提供することで改善できます。トークンは、公開されていないシークレットを使用します。

3rd party server asks for token using shared secret to your server
3rd party server serves token to its client
client makes request to your server providing referrer (assured by browser), and token
your server verifies both before replying

もちろん、誰かがコマンドラインツール、ブラウザ拡張機能、またはサーバーを使用している場合、リクエストで必要なものを送信するのは簡単ですが、トークンが期限切れになるウィンドウしかありません。クライアントのIPがサービスを悪用していると思われる場合は、常にIPアドレスを禁止できます。

于 2013-03-13T09:39:08.413 に答える