另一分钟我读了一篇关于OAuth的文章.它特别描述了在一系列请求期间在客户端和服务提供者之间交换的令牌.
文章还提到OAuth在RESTful API中作为授权层获得了极大的普及.据我所知,REST应该完全无状态.
问题:难道这种重复的令牌交换不会破坏REST的"无国籍"原则吗?恕我直言,令牌可以看作是一种会话ID,不是吗?
OAuth令牌明确是会话标识符,OAuth令牌协商协议中的请求之间的交互不是无状态的,因为请求必须按特定顺序执行,并且它们确实需要服务器上的每个客户端存储,因为您需要跟踪事件,例如何时他们被发行了.所以,是的,OAuth确实违反了RESTful架构的严格原则.
不幸的是,真实世界TM需要与我们需要做的事情竞争,例如允许应用程序代表个人进行身份验证,而无需请求他们的密码,OAuth做得相当不错.没有这种状态,就不可能实现类似的安全认证方案.实际上,OAuth(1.0a)所需的一项更改是为令牌协商协议添加更多状态以降低安全风险.
那么,它是否破坏了REST的无状态原则?是.那有关系吗?除非你住在象牙塔里,否则不会:-)
身份验证是在处理Web交互时必须以某种方式跟踪的状态.最后,如果您的应用程序是宁静与否,服务器必须能够跟踪每个用户的"认证状态",不幸的是,需要某种之上的HTTP的基本无状态特性以及任何额外的运输/技术(如REST)规避它.
因此,要开发任何类型的经过身份验证的应用程序,状态原则必须在某个地方出现,如果在REST之上碰巧是OAuth,那就必须如此!