如何检查用户是否在 Web 中进行了身份验证 API 2

How to check if user is authenticated in Web API 2

我有 Web API 2 服务。在 ApiController 中,我创建了一些不同的方法。其中一种方法用于用户登录。在这种方法中,我可以检查来自数据库的用户名和密码散列 select,如果它们正确,我可以为当前用户会话标识生成 SessionID。但是当我调用其他方法并尝试检查在上一步中生成的 SessionID 时,此 ID 为空 (null)。如何保存此 SessionID 以及如何检查用户是否已在服务中通过身份验证?我不想 select 在每个新方法调用时从 DB 中散列用户名和密码。我只想将此信息存储在某处,并能够在每个 ApiController 方法或其他地方读取它。

你的描述对我来说听起来像是基于 cookie 的身份验证。你可以看一下 ASP.NET Identity 2.0,它(大部分)完美地与 WebAPI 2.0 一起工作。

在标准设置中(使用表单登录)ASP.NET Identity 将创建一个包含身份验证证明的会话 cookie,这样就不需要后续的数据库调用。此外,您还可以免费获得诸如声明和角色之类的东西,并且您可以使用很少的 LOC 与社交身份验证提供商集成!它在 Entity Framework 上也能很好地发挥作用,所以如果你已经在使用它,那就去 Identity!

如果您想自己推出,您可能需要将 "user-profile" 序列化为 cookie 并对其进行密码签名,以使其防篡改。然后中间件只需要对其进行反序列化并将其作为用户身份放入请求对象中(考虑到您使用的是 OWIN)

我按照以下步骤进行操作:

  1. 用户调用登录并取回访问令牌 GUID 和到期时间戳。
  2. 用户使用访问令牌向后续调用添加请求 header。
  3. 我检查访问令牌仍然有效/没有超过配额,并且请求来自与原始登录相同的 IP,如果正常,则授权它。我使用自定义 AuthorizationFilterAttribute 执行此操作,我可以轻松地装饰我的 API 方法。
  4. 我在成功调用时延长了有效期。

希望这是清楚的。