我正在实现一个基于身份验证的API,参考了这篇文章:
http://www.thebuzzmedia.com/designing-a-secure-rest-api-without-oauth-authentication/
同一位作者的相关回答实现一个双腿OAuth提供者。
在API中,我有一个可行的概念,如下所示,其中签名参数是使用客户端私钥生成的密钥参数的SHA256 HMAC:
[HttpGet] [ActionName("List")]
public ActionResult ListGet(string key, string signature)
{
string serverSignature = GetSignature(key);
if (serverSignature != signature)
{
throw new ArgumentException("Invalid signature", signature);
}
// get and return the list
}
HMAC部分运行得很好,我能够在客户端生成签名并将其与服务器上预期的签名进行比较。
但是这个新参数“signature”需要应用于每个API调用。在MVC 2中是否有一种通用的方法来完成此操作,而不是手动添加签名参数和检查签名代码到每个操作方法中?
也就是说,是否有任何方法可以避免在每个控制器的每个操作中编写此内容?
public ActionResult List(string key, string signature) { GetSignature(key); // etc }
public ActionResult Add(string key, string signature) { GetSignature(key); // etc }
public ActionResult Update(string key, int id, string signature) { GetSignature(key, id); // etc}
public ActionResult Delete(string key, int id, string signature) { GetSignature(key, id); // etc}
public ActionResult Action1(string key, string x, string signature) { GetSignature(key, x);//etc}
我觉得像这样重复使用同一段代码很不好(违反DRY原则)。有更好的方法吗?