我的应用程序 (ASP.NET MVC) 中有几个操作不打算由浏览器客户端调用,而是从我的财产的其他外部应用程序调用,例如 Azure 调度程序和我的移动应用程序 (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 服务器的操作吗?