【发布时间】:2016-04-05 15:06:51
【问题描述】:
我正在尝试提出一种自定义的身份验证方法。也就是说,用户信息在表格中,我自己在 API 中进行用户名和密码验证。
对于这个解决方案,我尝试不使用 ASP.NET Identity。
在以前的项目中,我做了类似的事情,我将验证提供的密码,成功后,在响应 cookie 中返回一个会话 GUID,然后让客户端将此会话 GUID 与所有后续请求一起发送到 API。
通过操作过滤器,然后我将使用 GUID(以及发出请求的客户端的 IP)在表中查找,以查看会话是否仍处于活动状态并匹配最初创建会话的 IP地点。
这次我希望避免在每次收到 API 请求时都在数据库中查找。
有没有办法在服务器的内存中注册 GUID 令牌和其他信息?
我应该查看哪种身份验证?
【问题讨论】:
-
我建议您让 Identity 处理所有这些,并将其修改为仅提供自定义用户名和密码验证。除此之外,您可能会不厌其烦地创建类来处理 ConcurrentDictionary 并将您的数据存储在那里;不确定这是否是最好的方法。
-
在网络案例中,我建议使用像 Redis 这样的分布式缓存。它是外部过程,因此您不必对某个服务器实施粘性。如果您的服务器出现故障,您的 Guid 将保留。
-
在 Web API 中使用过滤器。创建一个继承 AuthorizationFilterAttribute 的类。这只会在到达方法之前拦截调用。如何进行身份验证完全取决于您。
标签: c# .net authentication asp.net-web-api