服务是否应该在每次请求时要求凭据?

时间:2010-08-06 12:29:50

标签: web-services security language-agnostic authentication service

我想知道什么是服务和Web服务的最佳身份验证方法:

  1. 每次请求都会发送用户/密码
  2. 发送一次用户/密码以获取将在每次请求时发送的身份验证代码
  3. 还有其他选择吗?哪个更好?为什么呢?

3 个答案:

答案 0 :(得分:5)

取决于协议。

如果服务请求是明文(http),那么您可能需要考虑一个安全(https)登录事务,它会获得一个限时令牌来授权将来的请求(会话cookie,实际上)。然后,至少窃听者不会获得永久工作的凭据,只是在一段有限的时间内。

同样,即使登录事务不安全,至少如果它只发生一次,则稍微难以窃听。它也稍微难以使用。

如果您不关心安全性,我甚至不会使用用户名/密码,只使​​用API​​密钥。相同的东西,但如果用户没有选择它,那么至少它不会与他们的任何其他密码相似,所以当它被盗时它不会影响其他任何东西。

如果你足够关心安全性,一切都是通过https完成的,那么你使用的识别机制AFAIK并没有太大的区别。所以做一些简单的事情。

最后,您可能关心身份验证的安全性,但不关心请求本身的保密性。所以,你不介意窃听者看到飞行中的数据,你只是不希望他们能够发出自己的请求(或欺骗响应)。在这种情况下,您可以使用公共/私人密钥对或HMAC共享密钥对请求(和响应)进行签名。这可能(或可能不)比SSL更容易设置和降低带宽。当心重播攻击。

答案 1 :(得分:0)

通过优化,您在考虑性能吗?我建议发送凭据并对每个请求进行身份验证,除非您确实发现这是一个瓶颈。 SSL根本不够,它只提供Web服务的加密和身份验证。但是考虑一下客户端身份验证(客户端证书可以在这里提供帮助)和授权,可能并非所有Web服务用户都不允许调用所有方法,并且需要记录所有方法调用以进行审计。在这种情况下,需要为每个呼叫呈现用户身份。

我开发和维护在WCF中开发的基于SOA的核心系统Web服务,该服务使用Windows身份对基于.Net的客户端进行身份验证和授权,并对Java客户端使用双向证书身份验证,我没有性能问题。

答案 2 :(得分:0)

Steve Jessop为我澄清了一些事情:

  1. 如果凭证被记忆,我应该在收到凭证后提供临时身份验证Cookie,

  2. 但如果凭据以数字方式存储,那么我应该只使用API​​密钥,因为任何可以访问凭据存储的人都不需要访问cookie

相关问题