我有以下设置:
现在,REST API具有对CouchDB的管理员访问权限,因此当它接收请求时,需要进行某种形式的身份验证,以确保发件人拥有对其声称有权访问的数据库的权限。由于我使用持久会话,因此Web应用程序始终不知道用户密码(除非我将其存储在localstorage中 - 显然是个坏主意)。会话cookie为HttpOnly
,因此我无法访问它。
在这种情况下,对API的请求进行身份验证的最佳方法是什么?
答案 0 :(得分:1)
加密您需要的所有内容,并将其作为base64会话添加到cookie中。以下是序列...
1. WebApp: Send username and password
2. REST: Authenticate this using couch.
3. REST: Encrypt the session along with username password and create cookie, then base64 result.
4. REST: Send cookie to WebApp.
5. WebApp: Alway sends cookie back to REST layer.
6. REST layer has everything it needs to authenticate the user.
在上面,REST层将状态传递给WebApp,它从WebApp获取所需的状态。客户端无法对其进行解密,因此它是安全的。然后,客户端将此令牌作为cookie传递回REST层,然后REST层使用它来获取验证所需的详细信息。
您可以非常轻松地加密几百个字节,而不会遇到任何标题或 cookie大小限制。之前或之后不要在加密之前或之后压缩它 出于安全原因以及因为加密数据不能很好地压缩。如果有人担心性能然后对它进行基准测试,但我已经使用了比Rust更慢的语言。上面的变化是使用memcached即......
1. WebApp: Send username and password
2. REST: Authenticate this using couch.
3. REST: Store Couch session in memcahed along with username password and create cookie. The cookie is the key to memcached.
4. REST: Send cookie to WebApp.
5. WebApp: Alway sends cookie back to REST layer.
6. REST: Get details from memcached.
我使用这种技术使用标题和Cookie,它就像一个魅力。我假设你正在使用东西来防范XSRF等。
您可以混合使用以上内容以满足您的应用需求。