RESTful身份验证意味着什么?它是如何工作的?我在谷歌上找不到好的概览。我唯一的理解是在URL中传递会话密钥(记住),但这可能是错误的。


当前回答

首先也是最重要的,RESTful web服务是无状态的(或者换句话说,无会话的)。因此,RESTful服务没有也不应该包含会话或cookie的概念。在RESTful服务中进行身份验证或授权的方法是使用RFC 2616 HTTP规范中定义的HTTP授权头。每个请求都应该包含HTTP授权头,并且请求应该通过HTTPs(SSL)连接发送。这是在HTTPRESTful web服务中进行身份验证和验证请求授权的正确方法。我已经为Cisco Systems的Cisco PRIME Performance Manager应用程序实现了RESTful web服务。作为web服务的一部分,我还实现了身份验证/授权。

其他回答

这当然不是关于“会话密钥”,因为它通常用于指在REST的所有约束条件下执行的无会话身份验证。每个请求都是自我描述的,携带足够的信息,可以在没有任何服务器端应用程序状态的情况下自行授权请求。

最简单的方法是从RFC 2617中的HTTP内置认证机制开始。

以我的理解来回答这个问题。。。

一种使用REST的身份验证系统,因此您不需要实际跟踪或管理系统中的用户。这是通过使用HTTP方法POST、GET、PUT、DELETE完成的。我们采用这4种方法,并将它们视为数据库交互的CREATE、READ、UPDATE、DELETE(但在web上,我们使用POST和GET,因为这是锚标记当前支持的)。因此,将POST和GET视为我们的CREATE/READ/UPDATE/DELETE(CRUD),然后我们就可以在web应用程序中设计路由,从而推断出我们正在实现的CRUD操作。

例如,在RubyonRails应用程序中,我们可以构建我们的web应用程序,以便如果登录的用户访问http://store.com/account/logout则该页面的GET可以被视为用户试图注销。在我们的rails控制器中,我们将在中构建一个操作,将用户注销并将其发送回主页。

登录页面上的GET将生成一个表单。登录页上的POST将被视为登录尝试,并获取POST数据并使用它进行登录。

对我来说,这是一种使用映射到其数据库含义的HTTP方法的实践,然后构建一个身份验证系统,您不需要传递任何会话id或跟踪会话。

我还在学习——如果你发现我说的任何错误,请纠正我,如果你了解更多,请将其张贴在这里。谢谢

用于保护任何web应用程序的有效提示

如果你想保护你的应用程序,那么你应该首先使用HTTPS而不是HTTP,这样可以确保你和用户之间建立一个安全的通道,防止嗅探来回发送给用户的数据,并有助于对交换的数据保密。

您可以使用JWT(JSON Web令牌)来保护RESTful API,与服务器端会话相比,这有很多好处,好处主要是:

1-更具可扩展性,因为您的API服务器不必为每个用户维护会话(当您有多个会话时,这可能是一个很大的负担)

2-JWT是独立的,具有定义用户角色的声明,例如,他可以访问的内容,并在日期和到期日发布(之后JWT将无效)

3-更易于跨负载平衡器处理&如果您有多个API服务器,因为您不必共享会话数据,也不必配置服务器将会话路由到同一服务器,只要JWT请求命中任何服务器,就可以对其进行身份验证和授权

4-减少了数据库的压力,也不必为每个请求不断存储和检索会话id和数据

5-如果您使用强密钥签署JWT,JWT不会被篡改,因此您可以信任随请求发送的JWT中的声明,而无需检查用户会话&无论他是否获得授权,您只需检查JWT,然后您就可以知道该用户可以做什么。

许多库提供了在大多数编程语言中创建和验证JWT的简单方法,例如:在node.js中,最流行的是jsonwebtoken

由于REST API通常旨在使服务器保持无状态,因此JWT与这一概念更为兼容,因为每个请求都使用自包含的授权令牌(JWT)发送,而服务器无需跟踪用户会话,而会话使服务器保持有状态,从而记住用户及其角色,然而,会话也被广泛使用并有其优点,如果需要,可以搜索。

需要注意的一点是,您必须使用HTTPS将JWT安全地交付给客户机,并将其保存在安全的地方(例如,本地存储)。

您可以通过此链接了解有关JWT的更多信息

使用公钥基础结构(其中密钥的注册涉及适当的绑定)可确保公钥以确保不可抵赖的方式绑定到分配给其的个人

看见http://en.wikipedia.org/wiki/Public_key_infrastructure . 如果您遵循正确的PKI标准,可以识别并锁定不正确使用被盗密钥的人或代理。如果要求代理使用证书,则绑定变得非常紧密。一个聪明且行动迅速的小偷可以逃跑,但他们会留下更多的面包屑。

我认为restful身份验证涉及将身份验证令牌作为请求中的参数传递。示例是api对apikey的使用。我认为使用cookie或http身份验证不合格。