サーバーとの通信に多くの AJAX を使用する Web ページに取り組んでいます。サーバーには、Web クライアントによって呼び出されるさまざまな操作を公開する広範な REST/JSON API があります。
この Web サイトは、匿名ユーザーと認証済みユーザーの両方によって使用されます。ご想像のとおり、認証されたユーザーによって発行された Web サービスの呼び出しには認証が必要であるため、権限のないユーザーやアプリケーションから保護されます。
ただし、Web サイトには認証を必要としない多くの機能があり、それらのいくつかは匿名 Web サービスを利用しています。部外者がこの Web サービスを呼び出すのを防ぐために私が使用している唯一の方法は、CSRF トークンを使用することです。CSRF トークンは、この点ではあまり役に立ちません...しばらく時間があれば、CSRF トークンを使用している場合でも、Web サービスを使用する方法を理解できます。
もちろん、CAPTCHA を使用して、アプリケーションやボットが Web サービスを自律的に使用するのを防ぐことができます。しかし、どんな人間でもそれを使うことができます。
一方、クライアントとサーバーの間で秘密鍵を共有しても意味がありません。これは、部外者が Web ページのソース コードからそれを読み取ることができるためです。
これらの Web サービスをサード パーティ アプリケーションからできるだけ呼び出しにくくしたいと考えています。CSRF トークンを使用する以外に何をしますか? 少しばかげているように聞こえますが、ちょっとばかげているのかもしれません。時間を無駄にしているだけです。
注: このアプリケーションはクライアントとして「実行可能ファイル」ではなくブラウザを使用するため、この質問は議論とは関係ありません。サーバーとクライアントの間でシークレットを使用できません (少なくとも私の知る限り)