设计web api:如何进行身份验证?

时间:2009-03-10 14:41:16

标签: restful-authentication http-authentication

我正在设计一个web api。我需要让用户自己进行身份验证。我有点怀疑让用户以明文形式传递他们的用户名/密码。例如:api.mysite.com/auth.php?user=x&pass=y

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

这是推特的作用:http://apiwiki.twitter.com/REST+API+Documentation#Authentication

6 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:5)

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

许多Web服务都有一个“authenticate”服务,它返回一个稍后再使用的令牌,并且可以在纯文本中使用,因为它只在有限的时间内有效。当它到期时,客户端只进行另一次身份验证。

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

答案 2 :(得分:3)

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

就我个人而言,我建议至少阅读digest authentication并分析是否适合你。

使用SSL也可能是一种选择。但是,它还以牺牲性能,可扩展性等为代价来解决其他问题。它使有效载荷数据保密。如果这是一项要求,那么这就是您的选择。

答案 3 :(得分:2)

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

答案 4 :(得分:1)

请不要对api使用常规的usename / password身份验证。人们真的不应该被迫将外国服务的凭证放在混搭服务中。

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

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

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

答案 5 :(得分:0)

我发现这article令人大开眼界。

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