3
我根据这篇文章的实施使用认证的API:C#MVC实现API参数
http://www.thebuzzmedia.com/designing-a-secure-rest-api-without-oauth-authentication/
而这种相关答案由同一作者Implementing a 2 Legged OAuth Provider
我有一个工作概念在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以通用的方式做到这一点,而不必手动添加签名参数和检查签名代码到每一个单一的行动方法?
即反正是有,以避免在每一个控制器的每一个行动,这样写:(!DRY)
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}
它看起来非常错误的我有相同的代码重复这样的。有没有更好的办法?
那么我的答案是否有所帮助? – Shannow