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

时间:2015-02-27 09:56:51

标签: c# asp.net asp.net-web-api2

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

2 个答案:

答案 0 :(得分:1)

我按以下步骤执行此操作:

  1. 用户调用Login并获取访问令牌guid和到期时间戳。
  2. 用户使用访问令牌向后续调用添加请求标头。
  3. 我检查访问令牌是否仍然有效/没有超过配额,并且请求来自与原始登录相同的IP,如果可以,则授权它。我使用自定义AuthorizationFilterAttribute执行此操作,我可以轻松地修饰我的API方法。
  4. 我成功通话延长到期时间。
  5. 希望这很清楚。

答案 1 :(得分:0)

您所描述的内容听起来像是基于cookie的身份验证。对于你可以看看一个ASP.NET Identity 2.0,它(大多数)与WebAPI 2.0完美配合。

在标准设置中(使用表单登录),ASP.NET Identity将创建一个包含身份验证证明的会话cookie,以便不需要后续数据库调用。此外,您可以免费获得索赔和角色等内容,并且可以与极少数LOC的社交认证提供商集成!它也可以与Entity Framework很好地结合使用,所以如果你已经使用它,那就去Identity!

如果您想自己滚动,可能需要将“用户配置文件”序列化为cookie并以加密方式对其进行签名,以使其防篡改。然后中间件只需要对其进行反序列化并将其作为用户标识放入请求对象中(考虑到您使用的是OWIN)