关于asp.net webAPI的一些问题

时间:2012-06-10 06:46:56

标签: c# asp.net wcf-web-api

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

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

我总是在SESSION中获取一些用户信息,但是我们知道具有RESTful风格的webAPI是Session-stateless,所以如何存储用户的信息:

我有点想法,我希望你可以帮我做出正确的选择,很多

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

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

1 个答案:

答案 0 :(得分:2)

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

  1. HTTP标头,无论是基本身份验证,还是一些传递凭据的自定义标头。这将是您的选择2.如果您使用HTTPS运行,这只是非常好,因为凭据将在标题中以明文形式显示。
  2. 使用一对令牌,一个作为标识符(有点像用户名)和客户端与服务器之间的一个共享密钥(有点像密码)。然后,由标识符,请求参数的一部分和秘密构成散列。然后将该散列和标识符与请求一起发送。知道秘密的服务器然后使用相同的方法计算哈希,并确保它们匹配(Amazon Web Services使用此方法以及使用OAuth的任何内容)。
  3. 与基本身份验证不同,更多的Web API似乎正在迁移到第二种方法,因为它可以抵御篡改和重放攻击。当然,这更复杂。

    对于OAuth来说,

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