繁体   English   中英

RESTful Web服务使用PHP登录

[英]RESTful web service Logins with PHP

我正在尝试用PHP创建RESTful Web服务。

根据Roy fielding的说法,客户端和服务器之间的通信本质上必须是无状态的。

那么在PHP $ _SESSION变量中存储登录信息(如当前登录用户的用户名)是错误的方式,因为这意味着存储会话状态? 这是为了允许访问用户的私人数据。

是否使用cookie来跟踪REST原则的登录? 或者它不是太重要的东西?

HTTP是无状态的,因此任何会话的使用都违背了HTTP的设计(当今网络上的大多数设计和安全问题源于此)。

要实现真正的无状态身份验证,请在您的API中使用WWW-Authenticate和Authorization标头,或升级API以通过HTTP + TLS(https)公开,使用标识它们的X509证书发出每个API用户帐户,然后请求它随每个API调用一起发送(然后您可以通过公钥来识别它们,并将其作为API密钥保存在帐户中)。

ps:总是值得在上下文中阅读,Roy的论文的第6章是非常宝贵的,但经常被忽略的单一章节5 REST。

如果你需要它可以扩大答案:) 扩大..

Authorization请求标头和WWW-Authenticate响应标头是用于质询响应身份验证的标准HTTP标头,与这些标头一起使用的两种常见和标准化方法是基本摘要式身份验证。 如果使用您处理的请求发送授权凭据以允许访问,则使用相应的状态代码失败,或使用WWW-Authenticate响应头发出质询,该流与基于表单的身份验证相同,但它适用于RESTful HTTP相反,它应该用于验证每个请求而不是设置会话( 就像大多数基于表单的身份验证一样 )。

我所指的HTTP + TLS / x509方法通常称为公钥认证,它再次在协议级而不是应用级工作,并且本机支持。 简而言之,客户端有一个私钥+证书+公钥,当他们连接到你时,证书(包括公钥)被发送到服务器,然后你从证书中读取详细信息(如果你想要的话)并且使用公钥来授权它们,如果你认出它就让它们进入。这更安全,因为它使用HTTP + TLS堆栈,其中所有内容都是加密的,连接是在客户端和服务器之间,两者之间没有任何内容,主要是因为有效的“密码”分为两部分,一个永不离开机器的私钥,以及一起形成密钥对的公钥。

PHP手册有一个关于带有代码的HTTP身份验证 (用于头方法) 的很好的部分 ,HTTP + TLS / x509所需的所有功能也在手册中(文档中的示例,但是分解了各种函数)。

我肯定不太重要。

如果您希望成为无状态方面的核心,这在某些系统中可能很重要,您可以在每个请求上发送用户的凭据。 这使您可以在不创建“状态”的情况下授权访问某些资源和动词。 例如,请参阅Amazon S3服务文档

我很想说会话的其他用途,例如购物车,可以真正强调违反REST的状态。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM