tjv*_*jvr 2 php rest login http
我正在尝试用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.
如果你需要它可以扩大答案:) 扩大..
该授权请求报头和WWW身份验证响应标头是用于标准HTTP头质询响应认证,使用所述两个共同和标化的方法与这些标头是基本和摘要验证.如果使用您处理的请求发送授权凭据以允许访问,则使用相应的状态代码失败,或使用WWW-Authenticate响应头发出质询,该流与基于表单的身份验证相同,但它适用于RESTful HTTP相反,它应该用于验证每个请求而不是设置会话(就像大多数基于表单的身份验证一样).
我引用的HTTP + TLS/x509方法通常称为公钥身份验证,它再次在协议级别而不是应用程序级别工作,并且本机支持.简而言之,客户端有一个私钥+证书+公钥,当他们连接到你时,证书(包括公钥)被发送到服务器,然后你从证书中读取详细信息(如果你想要的话)并且使用公钥来授权它们,如果你认出它就让它们进入.这更安全,因为它使用HTTP + TLS堆栈,其中所有内容都是加密的,连接是在客户端和服务器之间,两者之间没有任何内容,主要是因为有效的"密码"分为两部分,一个永不离开机器的私钥,以及一起形成密钥对的公钥.
PHP手册有一个关于带有代码的HTTP身份验证(用于头方法)的很好的部分,HTTP + TLS/x509所需的所有功能也在手册中(文档中的示例,但是分解了各种函数).
| 归档时间: |
|
| 查看次数: |
3685 次 |
| 最近记录: |