使用REST Web服务时,在每次发出请求时都使用身份验证令牌,而不是通过HTTPS /加密发送用户名和密码,这有什么价值?
我知道,例如OAUTH具有一些好处,因为您不需要向第三方透露密码,您可以将令牌传递给您不想共享用户名/密码的受信任的第三方。
但是除了我在我的情况下当然不需要的特殊好处之外,为什么我还是使用令牌而不是每次发送用户名/密码。
这可能使客户的生活变得轻松,并且不必每次都发送用户名/密码。好的,但是现在客户必须记住我的令牌,并在每次请求时将令牌发送给我。因此,现在无需记住/发送用户名/密码,而是对令牌执行相同的操作!因此,客户端实现代码不会少。
那么,这里的真正价值是什么?
它确实取决于场景-
在不了解API的情况下很难说出来-但“身份验证令牌”的使用远非通用,很正确,许多API不需要(也不使用)它们。许多API只是要求在每次请求时都发送一个API密钥(通常通过HTTPS来防止它被拦截),或者需要一个API密钥来识别用户,还需要带有“秘密密钥”的数字签名来证明用户的身份(请参阅使用大多数API时,为什么它们需要两种类型的身份验证,即密钥和密钥?)。
用户名/密码在公共API中不常用,因为它们不够灵活,并且不能在用户身份和应用程序身份之间提供足够的“分隔”。例如,您注册为开发者以使用Flickr
API并创建一个使用该API的iPhone应用-
您是否真的希望将开发者的用户名/密码内置到该应用中?如果您以后更改密码怎么办?如果您要开发5个应用程序并分别跟踪它们的使用情况并且能够在不影响其他应用程序的情况下随时关闭它们,该怎么办?
但是,对于您真正只想识别人类用户而不是识别应用程序的情况(例如,仅会为您自己的应用程序提供服务的私有API后端,而不是公共API),在大多数情况下,我看不到任何错误以及您的建议,即每个请求都通过HTTPS提供用户名/密码。哦,顺便说一句,身份验证令牌具有“可限制”(可以在特定时间到期,只能限制于某些操作等)的附加优点,但是显然,这仅在非常特定的情况下有用。
另外,正如用户“Dan”所指出的那样,当设计一个API时,它要求在每个请求(或实际上是任何请求,即使只是登录请求)中发送用户名/密码,请谨慎操作。如果您使用的是默认情况下浏览器支持的技术(例如HTTP
Basic Auth),那么您就无法防止自己向跨域用户安全地公开API(即,很可能永远无法从浏览器中直接安全地调用您的API) ,即来自AJAX /Flash / Silverlight代码)。
这是一个复杂的主题,在这里无法完全说明,但是请记住,如果您的API依赖于浏览器可以记住的任何安全凭证,然后“无声地”注入每个请求(例如HTTP BasicAuth,Cookie),那么使用任何跨域技术(CORS,JSONP,crossdomain.xml等)来启用对该API的跨域访问都是不安全的。
我有一个REST Jersey web服务。 php中基于令牌的身份验证 它在答复中提到; “然后它发送此令牌和请求的某些特征的哈希来验证请求,例如sha1(令牌+时间戳+请求URL+请求正文)。您的服务器可以对此进行验证,而客户端不必在每个请求上以纯文本发送令牌。” 另一个问题是,一旦服务器接收到这个令牌的哈希值(包括时间戳和用户ID等),服务器如何在没有存储令牌的查找表或数据库的情况下从这个令
我正在使用C#实现一个REST web服务,它将作为云服务托管在Azure上。因为它是一个REST服务,所以它是无状态的,因此没有cookie或会话状态。 Web服务只能通过HTTPS(由StartSSL. com提供的证书)访问。 用户成功登录服务后,他们将获得一个安全令牌。该令牌将在未来的通信中提供身份验证。 令牌将包含客户端的时间戳、用户ID和ip地址。 所有通信都只能通过HTTPS进行,所
问题内容: 在使用Java EE 6的Web应用程序上,我想将某些功能作为Json Rest Service公开。我想使用身份验证令牌进行登录,用户将发送其用户名,密码,服务器将发送回令牌,该令牌将用于授权用户在给定时间内的进一步请求。 到目前为止,有几个问题困扰着我; 当服务器创建令牌并将其发送给客户端时,服务器是否应该使用像哈希表这样的东西作为用户ID令牌对将其保存在DB或Bean中? 我可以
我刚刚开始在.NET中开发我的第一个REST API。由于它将是无状态的,我将使用令牌进行身份验证: 基本思想(System.Security.Cryptography): null 检查凭据是否有效(用户名,将哈希密码与db值进行比较) 如果为真,则加密数据对象 对生成的令牌使用HMAC,并将其存储到数据库 将令牌(不带HMAC)返回给用户(cookie/字符串) 对需要身份验证的方法的请求:
除了用户名和密码(例如来自ACS的令牌)之外,是否还有其他使用AMQP对Azure服务总线进行授权的方法? 在我的场景中,我希望能够在不公开凭据的情况下为资源级客户端提供对服务总线的访问权限。
将有一个Angular JS客户机应用程序,它将需要发送用户名和密码,并从应用程序获取令牌,以便在顺序请求中使用。在某些时候,可能也会有Android客户端访问此web服务。 我假设Spring Security在内部将令牌映射到用户会话,这意味着它知道令牌XXXXXXXXXXXX是管理用户Bob,令牌AAAAAAAAAA是标准用户Joe。然而,我对Spring Security没有太多的经验,所