3

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

我想为多平台提供我的webAPI,就像浏览器的javascript,或者windows phone等等,所以我决定用HTTP-BASIC隐式验证,“(原谅我的英语不好),问题是,在过去的时间。

我总是在SESSION中获取一些用户信息,但是我们知道RESTful风格的webAPI是无会话状态的,那么如何存储用户信息:

我得到了一些想法,我希望你能帮助我做出正确的选择,非常感谢

1. 将除用户密码等重要信息外的信息放入浏览器的cookie中。每次我发出http请求时,我都会获取cookies。在服务器端,我可以查询用户的信息。并进行其他步骤。(该序列不适用于移动平台,因为cookies仅在浏览器中)

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

4

1 回答 1

2

我见过的大多数 REST API 都通过以下两种方式之一处理身份验证:

  1. HTTP 标头,无论是基本身份验证,还是一些用于传递凭据的自定义标头。这将是您的选择 2。这仅在您通过 HTTPS 运行时才真正好用,因为凭据将在标头中以明文形式显示。
  2. 使用一对令牌,一个作为标识符(有点像用户名)和一个在客户端和服务器之间共享的秘密(有点像密码)。然后由标识符、请求参数的部分和秘密组成散列。然后将该哈希和标识符与请求一起发送。服务器知道秘密,然后使用相同的方法计算哈希,并确保它们匹配(亚马逊网络服务使用这种方法,以及任何使用 OAuth 的方法)。

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

OAuth 的RFC 5849 第 3.4 节,虽然干读,但通过了用于创建哈希的过程,如果您愿意,可能是实施的一个很好的起点。OAuth Google Code 网站上提供了C# 的基本实现,这可能是一个更好的选择。

于 2012-06-10T07:13:16.380 回答