如何将身份验证密钥传递给宁静的Web服务?
一些现有的Web服务消费我有一个看起来像这样的方法:如何将身份验证密钥传递给宁静的Web服务?
List<Employee> employees =
employeeService.GetEmployees(accessKey, allDepartments);
的ACCESSKEY有两个目的;它充当认证和识别。只有有效的访问代码被响应(认证),并且它作为特定客户端数据的链接提供服务。
如果服务都可以重新做一个宁静的方式我不知道如何做到这一点来实现。我绝对不想做这样的事情:
http://www.business.com/<GuidHere>/Employees/
因为这将显示ACCESSKEY,这有点秘密,(即,其通常在使用这个客户端上的加密文件),我们不能在URI中显示GUID。这样的事情是如何使用宁静的架构实现的?
你可以使用HTTP头发送认证令牌。
特洛伊奥尔福德指出,我原来的建议是不正确的。你不应该在这种情况下使用POST。您应该使用HTTP头中的身份验证信息使用GET请求。看看basic access authentication的一种方法来做到这一点。
虽然他提到这是一个RESTful服务。除非要将某些内容保存到服务器,否则不应在RESTful体系结构中使用“POST”动词。 – 2012-11-02 17:32:24
如果这是一个RESTful 网络服务我假设它正在被一台机器使用,所以为什么不在URL中传递访问密钥?
在然后结束,你需要把它的地方,并在浏览器中隐藏它们隐藏的表单字段(如果服务是要浏览的)这一天是不是安全的方式很多。
如果该键是非常敏感的,为什么不是对称加密每个会话的服务器上,并通过该值左右呢?
只是有些想法。
Kev
如果时间不是实施OAuth安全性的问题可能会有用。 OAuth使用公钥,也是一个秘密。乱七八糟的(大多数情况下),服务器将使用公钥+它的秘密副本做相同的哈希,并确保其结果匹配请求。
的好处是,你不需要使用HTTPS或POST。获取* REST api方法应该使用HTTP GET方法(我不确定是否RESTful是你的目标,只是认为我会指出)。我同意庞先生使用http://www.business.com/employees。查询字符串可能包含部门标识列表。
对于你的情况,服务调用不会有'accessKey'参数,而是它会成为公钥(我想象)并用于头部,查询字符串或POST参数。
OAuth的一些好的信息:http://www.hueniverse.com/hueniverse/
是 - 在一个RESTful的环境中做到这一点的首选方法肯定是把它放到一个cookie /头。 – 2012-11-02 17:32:58
你可以粘贴一些代码片段吗?我正在使用球衣来使用RESTFul服务 – vikifor 2017-05-18 13:57:28