5

我正在设计一个 web api。我需要让用户进行身份验证。我有点犹豫是否让用户以明文形式传递他们的用户名/密码..类似于:api.mysite.com/auth.php?user=x&pass=y

我读到的另一个选项是对用户名/密码进行 Base64 编码,然后发送 HTTP 请求。那么这是否意味着在服务器端;我会 _GET['user'] 和 _GET['password'] 然后以某种方式解码它们?

这就是 twitter 所做的:http ://apiwiki.twitter.com/REST+API+Documentation#Authentication吗?

4

6 回答 6

7

Base64 根本没有保护作用。使用 SSL 实现真正的安全性。

于 2009-03-10T14:46:58.370 回答
5

正如 truppo 所说,首先使用 SSL。

许多 Web 服务所做的是有一个“身份验证”服务,它返回一个稍后使用的令牌,并且可以以明文形式使用,因为它仅在有限的时间内有效。当它过期时,客户端只需进行另一个身份验证。

这样做的主要好处是它减少了 SSL 请求的数量,从而减轻了服务器的负载。

于 2009-03-10T14:53:19.103 回答
3

就在本周,IETF 发布了一份新草案,讨论了 HTTP 中各种身份验证机制的安全属性。您应该在那里找到有用的信息。

就个人而言,我建议至少阅读摘要身份验证并分析它是否适合您。

使用 SSL 也可能是一种选择。但是,它也以牺牲性能、可缓存性等为代价解决了其他问题。它使有效载荷数据保密。如果这是一个要求,那么这就是你要走的路。

于 2009-03-10T14:52:42.133 回答
2

如果这是一个网络服务,您最好使用更安全的身份验证形式。例如,查看 LiveJournal 协议:Challenge-Response

于 2009-03-10T14:48:21.690 回答
1

请不要对 api 使用常规的用户名/密码身份验证。人们真的不应该被迫将来自外国服务的凭据放入混搭服务中。

请考虑使用 oauth http://oauth.net/或至少一些基于挑战-响应的系统,就像 Eugene 建议的那样。

一种简单的方法是让访客服务生成一个连接到他的应用程序和用户的令牌。如果你投入一些工作,你甚至可以使令牌创建安全,只允许具有一些私钥/公钥机制的外部服务。

用户必须先在您的应用程序中授权此令牌,然后访客服务才能使用它进行身份验证。

于 2009-03-10T15:16:49.780 回答
0

我发现这篇文章令人大开眼界。

简而言之:每个用户使用一对 API 密钥。一种用于客户端身份验证,一种用于参数签名。

于 2012-10-26T14:40:39.493 回答