该系统如何。为此,我需要一些评论,甚至可能是重要的安全性部分。
我使用的系统可能有点复杂,但是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。 如果没有-新建一行。
作为第一个请求的响应,将此令牌发回(来自第2项)
在第二个请求中,发件人必须再次使用相同的RequstID和令牌(来自之前的响应)
服务器将检查 组合RequstID和令牌 令牌验证(取决于当前日期时间);
一切正常,用户已通过验证 如果不是-BadRequest或其他
欢迎任何建议或评论:)
答案 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