如何将身份验证密钥传递给restful Web服务?

时间:2009-01-09 19:11:10

标签: web-services authentication rest

我使用的一些现有Web服务的方法看起来像这样:

List<Employee> employees = 
        employeeService.GetEmployees(accessKey, allDepartments);

accessKey有两个目的;它充当身份验证和身份验证。只有有效的访问代码才会被响应(身份验证),并且它将作为特定客户端数据的链接提供服务。

如果要以宁静的方式完成服务,我不确定如何实现这一目标。我绝对不想做这样的事情:

http://www.business.com/<GuidHere>/Employees/

由于这会显示accessKey,这有点秘密(即,它通常在使用它的客户端上的加密文件中),我们无法在URI中显示GUID。使用宁静的架构如何实现这样的目标?

4 个答案:

答案 0 :(得分:7)

您可以使用HTTP标头发送身份验证令牌。

答案 1 :(得分:1)

如果这是一个RESTful Web服务我假设它正被机器使用,为什么不通过URL中的访问密钥?

当天结束时,你需要把它放在某个地方并将它们隐藏在浏览器中的隐藏表单字段中(如果服务是可浏览的)并不是很安全。

如果密钥非常敏感,为什么不在每个会话的服务器上对称加密并传递该值呢?

只是一些想法 千电子伏

答案 2 :(得分:1)

如果时间不是问题,实施OAuth安全性可能会有用。 OAuth使用公钥,也是秘密。混乱是散列的(在大多数情况下),服务器将使用公钥+它的秘密副本进行相同的散列并确保其结果与请求匹配。

好处是您不需要使用HTTPS或POST。获取* REST api方法应该使用HTTP GET方法(我不确定RESTful是否是你的目标,只是想我会指出这一点)。我同意彭先生的意见,使用http://www.business.com/employees。查询字符串可以包含部门ID列表。

对于你的情况,服务调用没有'accessKey'参数,而是它将成为公钥(我想象),并在头文件,查询字符串或POST参数中使用。

关于OAuth的一些好消息:http://www.hueniverse.com/hueniverse/

答案 3 :(得分:0)

正如Troy Alford指出的那样,我原来的建议是错误的。在这种情况下你不应该使用POST。您应该在HTTP标头中使用带有身份验证信息的GET请求。看看basic access authentication有一种方法可以做到这一点。