Asp.net Web api身份验证模式

Asp.net Web api身份验证模式,asp.net,authentication,asp.net-web-api,Asp.net,Authentication,Asp.net Web Api,我正在实现一个RESTAPI来使用新的WebAPI框架。此api将被其他公司使用,因此我们将添加一个身份验证方法 关于身份验证,我想实现一些基于令牌的东西。像这样的 客户端向登录方法提供凭据 系统对客户端进行身份验证并发送令牌 客户端在以下api调用中使用此令牌 我想知道这个模式对我的场景是否有用。操作将主要是原子操作,基本上客户端将定期ping此api以获取某些特定数据,因此不确定拥有会话令牌是否有意义(在某个时候令牌应该过期,并且不确定如何管理) 您建议如何在此场景中实现身份验证架构?当

我正在实现一个RESTAPI来使用新的WebAPI框架。此api将被其他公司使用,因此我们将添加一个身份验证方法

关于身份验证,我想实现一些基于令牌的东西。像这样的

  • 客户端向登录方法提供凭据
  • 系统对客户端进行身份验证并发送令牌
  • 客户端在以下api调用中使用此令牌
我想知道这个模式对我的场景是否有用。操作将主要是原子操作,基本上客户端将定期ping此api以获取某些特定数据,因此不确定拥有会话令牌是否有意义(在某个时候令牌应该过期,并且不确定如何管理)


您建议如何在此场景中实现身份验证架构?

当您生成令牌时,我会将其存储在数据库中,并将外键返回到经过身份验证的登录名的主键。我还(使用令牌)存储它建立的日期和时间,以及超时时间(您可以为每个令牌设置此时间,或者将其存储在配置中)。每次用户ping服务时检查令牌/时间,然后在该时间到期后强制他们重新验证(通过对照令牌存储的创建日期进行检查)

这将确保登录信息仅在令牌过期后传输,当生成新令牌时,它将删除旧令牌记录


我理解您的要求了吗?

制作这样一个基于令牌的身份验证方案并不容易

对于如何以一种良好且安全的方式实现它,我真的没有答案。但是,我将提供一些关于您必须处理的问题的想法:

  • 令牌的生成需要很好的随机化,并且令牌需要“足够长”(对于“足够长”的某些定义),以防止某人仅仅发送一堆不同的令牌来查看他是否“得到了成功”
上述问题不应太难实施。但更棘手的是:

  • 您如何能够可靠地验证代币未被“绑架”
如果令牌只是一个随机字符串,那么任何碰巧在Transfer(使用SSL)中“看到”它的人都将能够假定生成令牌的用途的身份

当您的服务收到令牌时,您将知道:

  • 您的应用程序将令牌颁发给用户/应用程序/实体X
  • 令牌完好无损(尚未更改)
  • 您与代币一起存储的任何其他物品(是否过期等)
但是,如果没有进一步的努力,它将不会让您确定它是由用户/应用程序/实体X发送的。它可能是设法获得令牌的Y


当然,许多身份验证方案都是这样,因此,根据您的数据的敏感程度以及通过您的服务可以执行的操作类型,这对您来说可能不是一个大问题。

使用HMAC身份验证查看一下这一点:使用现有的令牌生成器(如ASP.NET forms身份验证)如何?