アプリケーション (ASP.NET MVC) には、ブラウザー クライアントによって呼び出されるのではなく、Azure Scheduler やモバイル アプリケーション (Android) などのプロパティの他の外部アプリケーションから呼び出されることを意図したアクションがいくつかあります。
これらのアクションが期待どおりに機能するには、秘密のパラメーターと値を渡す必要があります。
public ActionResult SendPendingMessages(string secret = "")
{
if (!secret.Equals("hardcoded_secret"))
return null;
// Real stuff here...
}
上記のアクションは、スケジューラによって 30 分ごとに呼び出され、スケジュールされたメッセージを送信します。
その他の例:
public ActionResult DownloadUndownloadedMessages(string secret = "")
{
if (!secret.Equals("hardcoded_secret"))
return null;
// Real stuff here...
}
上記のアクションは、私の Android アプリケーションによって呼び出されます。
未読メッセージを取得します。
これらの外部アプリケーションでは、私は常に HTTPS を使用しているため、ハードコードされたパスワード (および URL 自体) は秘密であると確信しています。
私はここでやっていることが好きではありません。気持ち悪いです。
このアプローチの問題点をいくつか挙げると、次のようになります。
- ハードコーディングされたシークレットは長期的なシークレットです。
- 他の開発者がこれらの外部アプリケーションで作業している場合、彼らは秘密の URL を知っています。
- URL を知っているだけでこれらのアクションを呼び出せるのは好きではありません。URLを隠すだけでなく、もっとしっかりしたものが欲しいです。
最後に、問題は次のとおり
です。この目的を達成するための最も正しい方法は何ですか?
たとえば、開発者がWhatsAppで働いていて、解雇された場合。彼は、WhatsApp クライアント アプリを見て得た知識を使って、WhatsApp サーバーのアクションを呼び出すことができますか?