安全的WebApi概念

时间:2018-10-16 09:32:38

标签: c#

该系统如何。为此,我需要一些评论,甚至可能是重要的安全性部分。

我使用的系统可能有点复杂,但是100%自定义,应该很好。这是用于向Asp.NET发送请求的自定义身份验证系统  WebApi

系统可以发送2个请求

您需要的是2对数据。第一个是公开的,第二个是秘密的。

必须对双方(发送方和接收方)都知道第二对数据

public:ApiKey和RequstID,其中ApiKey为“正常”,而requstID必须始终唯一;

秘密:用户名和密码(双方都必须知道这些数据)

发件人: 发送带有3个参数的第一个请求:1st = ApiKey,2nd = RequstID,3rd = Hash(ApiKey + RequestID + USerName + Pass)

服务器: 读取RequstID 读取ApiKey并获取有关该用户ApiKey的用户UserName和Pass的数据 从自己的角度来看:Hash(ApiKey + RequestID + USerName + Pass)

检查发件人的哈希是否与服务器中的相同

如果为False: BadRequest-或其他...

如果为真

首先-在表上的数据库上创建以收集有关请求的数据。 这是带有列的表格(例如): ID(自动递增),RequstID,令牌,TokenValidateDateTime

在创建新行之前,请检查该RequestID是否已经存在,以及是否存在返回BadRequest。 如果没有-新建一行。

  1. RequstID是请求中的RequstID;
  2. 令牌-生成令牌(例如Guid.NewGuid()。ToString());
  3. TokenValidateDateTime = DateTime.Now.AddMinutes(2)-或其他一些值...

作为第一个请求的响应,将此令牌发回(来自第2项)

在第二个请求中,发件人必须再次使用相同的RequstID和令牌(来自之前的响应)

服务器将检查 组合RequstID和令牌 令牌验证(取决于当前日期时间);

一切正常,用户已通过验证 如果不是-BadRequest或其他

欢迎任何建议或评论:)

1 个答案:

答案 0 :(得分:0)

听起来与传统的网站用户名/密码身份验证类似,该身份验证会返回会话cookie。

但是您还包括一个api键和请求ID和一个哈希。除非共享盐,否则散列不会增加太多价值,因为一旦有人弄清楚了您的散列技术,它将是vulnerable to dictionary attacks

生成Guid令牌也不是“加密安全”的,它被设计为唯一,但通常基于system clock meaning it is predictable

通常不建议建立定制的安全机制;定制加密绝对是“不不”(据我所知,您没有这样做)。定制身份验证的风险可能较小,但是考虑到安全专家已经批评了许多现有框架,我建议首先研究是否适合这些框架。

我建议您查看asp.net核心的安全选项:https://docs.microsoft.com/en-us/aspnet/core/security/?view=aspnetcore-2.1