我正在使用Web API 2编写C#Web服务,其中一些CRUD操作需要根据用户的订阅获得一些安全性。
每个用户都有一个唯一的字符串令牌作为订阅的一部分。
在我编写用于Web服务安全性的代码之前,如果以下是一种安全有效的技术,有人可以通知我,如果没有,为什么这不安全有效以及其他一些方法来完成此任务。
我在考虑作为每个webservice请求的一部分,包含带有用户令牌的字符串参数。然后使用此令牌确保发出请求的用户拥有该对象。
以下是没有安全性的当前函数的示例:
[System.Web.Http.HttpGet]
[Route("Getdata/{id:int}")]
[ResponseType(typeof(Data))]
public async Task<IHttpActionResult> GetData(int id)
{
Data data = await dbSetService.Get(id);
if (data == null)
{
return NotFound();
}
return Ok(data);
}
以下是基于令牌的安全性的函数示例:
[System.Web.Http.HttpGet]
[Route("Getdata/{string:token},{id:int}")]
[ResponseType(typeof(Data))]
public async Task<IHttpActionResult> GetData(string token, int id)
{
Data data = await dbSetService.Get(id);
if (data == null)
{
return NotFound();
}
//Check if the owner of the data object has the correct token, and the object is returned if the token is correct
return Ok(data);
}
任何人都可以从任何应用程序访问Web服务。
答案 0 :(得分:0)
令牌本身不是问题,但在GET中将令牌作为查询字符串的一部分将使其对客户端和服务器之间的每个人都可读。即使你使用https。在http请求的标头中添加令牌更安全(例如,使用Authorization
标头);头部也将使用https加密(与请求不同)。如果您不打算使用https,那么我认为这并不重要。
此外,我会添加一个过滤器类(并添加为控制器的属性),这样您就不需要在每个方法中进行检查。但是对于一个有3个动作的简单控制器,它可能有点过分。