1

我的应用程序 (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 服务器的操作吗?

4

1 回答 1

0

我认为您最好的方法是遵循 WebAPI 路径并实现下面的帖子提供的答案之一:

如何保护 ASP.NET Web API

于 2014-04-23T06:34:48.540 回答