2015-07-10 149 views
0

我是新开发API的,并已将ASP.NET web api功能构建到我现有的MVC项目中。我希望客户能够发送多个对象实例的JSON,这些对象实例可以保存到我的数据库中,但是目前该API仅包含框架提供的值模板,我想先解决它现在的安全问题前进充分开发API:授权和验证ASP.Net web 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) 
    { 
    } 
} 

的授权标签要求用户在瞬间登录我的网站上,我很困惑,我怎么可能API编程在这种情况下被调用。

我想保护api,客户端要使用它,必须提供其唯一的API密钥才能访问功能。此外,我想使用此API密钥来确定哪个用户调用了API,以便我可以仅使用他们的数据对其进行响应。

从早期的起点(仅集成了Web Api功能)中实施这些步骤所涉及的步骤是什么?

我一直在看,并越来越困惑的HMAC认证,虽然这似乎与我后似乎相当复杂的实现(也许只是因为我在一个新的领域),我想必须有一种更简单的方法来实现我想要的?

+0

除了对用户进行身份验证之外,还想使用HMAC来验证数据的完整性吗?或者你只是想验证用户? –

+0

我不确定是否需要我的场景。我有一个用户可以创建联系人和消息的门户,而API主要是允许其他系统在他们自己创建时在我的系统中创建联系人。使用我提供给第三方开发人员的一些密钥,我觉得验证足够了。你会建议什么? – JonnyKnottsvill

+0

我觉得像这样可能是足够的http://stackoverflow.com/questions/11014953/asp-net-web-api-authentication?rq=1 – JonnyKnottsvill

回答

2

快速解决方案是扩展AuthorizeAttribute并在那里定义您的验证逻辑。示例见this SO question

稍微模块化的方法是创建一个认证过滤器。见ASP.NET docs here。这样你可以分开认证和授权。

至于HMAC与基本身份验证,我会更简单基本身份验证是安全性不是您的系统的关键组件。这样你可以更快地发布v1.0。