Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 授权和身份验证ASP.NETWebAPI_C#_Asp.net Mvc_Authentication_Asp.net Web Api - Fatal编程技术网

C# 授权和身份验证ASP.NETWebAPI

C# 授权和身份验证ASP.NETWebAPI,c#,asp.net-mvc,authentication,asp.net-web-api,C#,Asp.net Mvc,Authentication,Asp.net Web Api,我是开发API的新手,已经将ASP.NET web API功能构建到我现有的MVC项目中。我希望客户端能够发送多个对象实例的JSON,我可以将其持久化到我的DB中,但目前API仅包含框架提供的值模板,我希望在全面开发API之前,现在就对其进行整理: [Authorize] public class ValuesController : ApiController { // GET api/<controller> public IEnumerable<strin

我是开发API的新手,已经将ASP.NET web API功能构建到我现有的MVC项目中。我希望客户端能够发送多个对象实例的JSON,我可以将其持久化到我的DB中,但目前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)
    {
    }
}
[授权]
公共类值控制器:ApiController
{
//获取api/
公共IEnumerable Get()
{
返回新字符串[]{“value1”,“value2”};
}
//获取api//5
公共字符串Get(int-id)
{
返回“值”;
}
//后api/
公共作废帖子([FromBody]字符串值)
{
}
//放置api//5
公共void Put(int id,[FromBody]字符串值)
{
}
//删除api//5
公共无效删除(int-id)
{
}
}
Authorize标记要求用户现在登录到我的站点,我不知道在这个实例中如何以编程方式调用我的API

我想保护api,因此,希望使用它的客户端必须提供其唯一的api密钥才能访问功能。此外,我想使用这个API键来确定哪个用户调用了API,这样我就可以只使用他们的数据来响应他们

从我所处的早期起点(刚刚集成了WebAPI功能)开始,将这一点落实到位需要哪些步骤


我一直在看HMAC认证,并对其感到困惑,尽管这似乎与我所追求的类似,但它的实现似乎相当复杂(可能只是因为我在这里的一个新领域)我认为必须有一种更简单的方法来实现我想要的?

一个快速的解决方案是扩展
AuthorizeAttribute
并在那里定义身份验证逻辑。有关示例,请参见

更模块化的方法是创建一个身份验证过滤器。看见通过这种方式,您可以将身份验证和授权分开


至于HMAC与基本身份验证,我将使用更简单的基本身份验证,因为安全性不是系统的关键组件。通过这种方式,您可以更快地发布v1.0。

除了验证用户身份之外,您还想使用HMAC验证数据的完整性吗?还是只想验证用户身份?我不确定这对我的场景是否有必要。我有一个门户,用户可以在其中创建联系人和消息,API主要允许其他系统在自己的系统中创建联系人时在我的系统中创建联系人。我觉得使用我提供给第三方开发人员的一些密钥进行身份验证就足够了。您有什么建议?我觉得这样的东西可能足够HMAC提供更多的价值(有效负载完整性验证),但您需要决定需要多少安全性。如果高安全性不是基本要求,那么就从简单开始。使用API密钥/密码的基本身份验证应该可以工作。快速而肮脏的解决方案是扩展
AuthorizeAttribute
()。更好的方法是设置身份验证过滤器()。如果我是你,我可能会从扩展
AutorizeAttribute
开始。