替代使用外部调用的秘密URL

时间:2014-04-23 05:37:55

标签: android asp.net-mvc azure secret-key

我的应用程序(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更实用的东西。

问题是,最后:
实现此目的的最正确方法是什么?

如果开发人员在WhatsApp等公司工作,他就被解雇了。他可以通过看到WhatsApp客户端应用程序获得的知识来调用WhatsApp服务器的操作吗?

1 个答案:

答案 0 :(得分:0)

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

How to secure an ASP.NET Web API