1

RESTful 服务的新手,但阅读了很多关于该主题的内容。在 VS2010 C# 中实现

在 stackoverflow 上已经提出并回答了类似(几乎相同)的问题,但老实说,我从回复中一无所获。

我想实现一个 AuthenticatUser 调用,其中发送用户名和密码并返回身份验证密钥。

鉴于这需要使用 GET、POST、PUT 或 DELETE 来完成,看来 GET 是最合适的。

所以也许 GET mydomain/myservice/authenticate/{username}/{password}

我不喜欢这样,因为用户名和密码是在 URI 中传递的,但据我所知,在 GET 中发送正文不是一个好主意。所以 POST 或 PUT 会起作用,但这似乎与 RESTFul 哲学背道而驰。

问题1:可以在URL中发送密码等敏感数据吗?该站点将使用 SSL。

问题 2:在 GET 中,当传递多个参数时,URI 概念似乎有点疯狂,应该如何以 RESTful 方式处理复杂的查询?

问题 3:在 RESTful API 中,首选(正常、最常见)的身份验证方法是什么?

4

1 回答 1

1

在 url 中传递密码是不正确的。我对此做了一些研究。首先,如果可能的话,您应该使用基于 SSL 的基本身份验证。在 Authentication 标头中传递用户 ID 和密码。现在就休息而言,会话不在服务器中维护。因此,您需要为每个呼叫传递用户 ID 和密码。将密码存储在本地存储中是有风险的。因此,使用 POST 调用进行首次身份验证并传递用户 ID 和密码。然后在成功认证返回时,服务器返回一个 tokenkey 和 tokenvalue。tokenkey 和 tokenvalue 最初类似于 Amazon 私钥共享。从下一个请求开始发送令牌密钥并使用令牌值对您的数据进行签名。每次都传递令牌密钥和签名。在服务器端,服务器验证签名,因为它具有 tokenvalue 的副本。如果可能的话,tokenkey 和 tokenvalue 可以加密存储在本地。你不能永远使用 tokenkey 和 tokenvalue。因此,对于每个请求,服务器都会发送一个 nonce 作为响应。该随机数存储在服务器端的数据库中,并针对每个请求进行更改。当您向服务器发送请求时,请包含此随机数。随机数是使用时间戳形成的。如果在 15 分钟后发送请求,则解密随机数并发现时间戳超过 15 分钟,因此您将他重定向到登录页面。Nonce的形成在 该随机数存储在服务器端的数据库中,并针对每个请求进行更改。当您向服务器发送请求时,请包含此随机数。随机数是使用时间戳形成的。如果在 15 分钟后发送请求,则解密随机数并发现时间戳超过 15 分钟,因此您将他重定向到登录页面。Nonce的形成在 该随机数存储在服务器端的数据库中,并针对每个请求进行更改。当您向服务器发送请求时,请包含此随机数。随机数是使用时间戳形成的。如果在 15 分钟后发送请求,则解密随机数并发现时间戳超过 15 分钟,因此您将他重定向到登录页面。Nonce的形成在http://www.ietf.org/rfc/rfc2617.txt。一旦 nonce 被成功验证,这个 nonce 就会被丢弃,并且现在会发送一个新的 nonce(使用最新的时间戳再次形成)。这也将有助于防止重放攻击。

于 2013-09-26T09:50:54.310 回答