【发布时间】:2015-07-14 09:15:27
【问题描述】:
我是开发 API 的新手,并且已将 ASP.NET Web api 功能构建到我现有的 MVC 项目中。我希望客户能够发送多个对象实例的 JSON,我可以将这些实例持久保存到我的数据库中,但目前 API 仅包含框架提供的值模板,我想现在解决它之前的安全问题继续全面开发 API:
[Authorize]
public class ValuesController : ApiController
{
// GET api/<controller>
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
// GET api/<controller>/5
public string Get(int id)
{
return "value";
}
// POST api/<controller>
public void Post([FromBody]string value)
{
}
// PUT api/<controller>/5
public void Put(int id, [FromBody]string value)
{
}
// DELETE api/<controller>/5
public void Delete(int id)
{
}
}
Authorize 标记目前要求用户登录我的网站,我对在这种情况下如何以编程方式调用我的 API 感到困惑。
我想要保护 api,因此想要使用它的客户端必须提供其唯一的 API 密钥才能访问功能。此外,我想使用这个 API 密钥来确定哪个用户调用了 API,这样我就可以只使用他们的数据来响应他们。
从我所处的早期起点(刚刚集成了 Web Api 功能)开始实施这一点所涉及的步骤是什么?
我一直在研究 HMAC 身份验证并对此感到困惑,尽管这似乎与我在实现起来似乎相当复杂之后的情况相似(可能只是因为我在这里处于一个新领域)并且我认为那里一定是实现我想要的更简单的方法?
【问题讨论】:
-
除了对用户进行身份验证之外,您还想使用 HMAC 来验证数据的完整性吗?还是您只是想对用户进行身份验证?
-
我不确定我的场景是否有必要。我有一个门户,用户可以在其中创建联系人和消息,API 主要是允许其他系统在我的系统中创建联系人时在他们自己的系统中创建联系人。我觉得使用我提供给第三方开发人员的一些密钥进行身份验证就足够了。你有什么建议?
-
我觉得这样的东西可能就足够了stackoverflow.com/questions/11014953/…
-
HMAC 提供更多价值(有效负载完整性验证),但您需要决定需要多少安全性。如果高安全性不是基本要求,那就从简单开始。带有 API 密钥/秘密的基本身份验证应该可以工作。快速而肮脏的解决方案是扩展
AuthorizeAttribute(stackoverflow.com/questions/13264496/…)。更好的方法是设置身份验证过滤器 (asp.net/web-api/overview/security/authentication-filters)。 -
如果我是你,我可能会从扩展
AutorizeAttribute开始。
标签: c# asp.net-mvc authentication asp.net-web-api