背景:私はnode.jsとexpressを使用してAPIを作成しています。標準のコンシューマー/ユーザーキー/シークレット方式(Twitter、Facebookなどと同じ方法)でAPIサーバーにOAuthを実装しました。これらの一般的なAPIと同じ方法で、サードパーティが私のAPIに接続することを期待しています。
通常、クライアントはアプリケーショントークン/シークレットに接続します(たとえば、Facebook開発者としてFacebookアプリを作成すると、これらが提供されます)。ただし、コードが安全でない方法で実装されているために、クライアントがアプリケーションのシークレットを提供できない場合があります。具体的には、Javascriptライブラリを参照しています。たとえば、開発者は、アプリケーションシークレットがプレーンテキストであり、悪意のあるユーザーによって読み取られる可能性があるため、Javascriptコードでアプリケーションシークレットを公開することを望んでいません。
Facebookがこの問題を回避していることに気づきました。開発者は、アプリケーショントークン(シークレットではない)のみをJavascriptライブラリに提供する必要があります。ライブラリを根本的に安全でなくして、APIに同様のオプションを提供する方法がわかりません。つまり、安全性の高いトークン/シークレットを提供せずにJavascriptクライアントライブラリからAPIに対してリクエストが行われている場合、それらのリクエストはOAuth APIによってどのように認証されますか?
知的に、私が考えることができる最善の解決策は、ライブラリが使用する秘密を返すために、HTTPS接続を介してJavascriptクライアントライブラリとAPIサーバーの間で何らかのトークンハンドオフを行うことです。ただし、なりすましを防ぐためにこのハンドオフをどのように保護するかはよくわかりません。