2012-06-10 39 views
3

我现在构建在服务器端使用asp.net的WebAPI一个应用程序,我得到了有关验证问题:一些关于asp.net的WebAPI问题

我想提供我的WebAPI的多平台,就像浏览器的javascript或windows手机等等,所以我决定用HTTP-BASIC暗示验证,“(原谅我可怜的英语),问题是,在过去的时间。

我总是拿SESSION中的一些用户信息,但我们知道使用REST风格的webAPI是会话无状态的,因此如何存储用户的信息:

我想到了一些想法,我希望你能让我做出正确的选择,thx很多

1. 把信息放入浏览器的cookie,除了用户的密码和其他重要的信息。每次我发出http请求时,我都会把cookies和在服务器端,我可以查询用户的信息并进行其他步骤(该序列不适用于moblie平台,仅在浏览器中使用cuz cookie)

2.user HTTP-BASIC验证,每次服务器获取httpRequest时,都会在HTTP-Headers中获取用户名和密码,服务器端也可以查询用户信息。

回答

2

大多数REST API的我见过处理身份验证的方式有两种:

  1. HTTP头,无论是基本身份验证,或一些自定义头传递的凭据。这将是您的选项2.如果您通过HTTPS运行,这只是非常好,因为证书将在标头中以明文形式显示。
  2. 使用一对令牌,一个作为标识符(有点像用户名)和一个客户端和服务器之间的共享密钥(有点像密码)。然后对标识符,请求参数的一部分和秘密进行散列。这个散列和标识符随后与请求一起发送。知道秘密的服务器然后使用相同的方法计算哈希,并确保它们匹配(Amazon Web Services使用此方法以及使用OAuth的任何内容)。

与基本认证不同的是,更多Web API似乎正在迁移到第二种方法,因为它抵御篡改和重放攻击。当然,这更为复杂。

RFC 5849 Section 3.4对于OAuth而言,干读时会经历用于创建散列的过程,如果您愿意,可能会是一个很好的实施起点。 C#中的基本实现是provided on the OAuth Google Code site,并且可能是更好的选择。

+0

非常感谢 –