如何使用set_secure_cookie方法在龙卷风中进行身份验证? 哪些cookie存储在多个用户的哪里? 我们如何验证框架内的每个API调用?
答案 0 :(得分:0)
Cookie只是HTTP标头。没什么特别的。 Cookie的工作方式如下:
username
和password
,并确保它们正确无误。然后,服务器将在此浏览器上设置cookie,以便稍后识别用户。要设置cookie,服务器将发送一个名为Set-Cookie
的标头以及响应。它看起来像这样 - Set-Cookie: sessionId=username
。SET-COOKIE
标题。现在浏览器会在计算机的某个位置保存这个值,这并不重要。重要的是,在此之后,只要浏览器将请求发送到您的服务器,它也会在请求标头中发送此cookie - Cookie: sessionId=username
。 Cookie
标头。因此,它将从那里获取登录用户的用户名。 这就是cookie的工作原理。
现在回答你的问题:
如何使用set_secure_cookie方法在龙卷风中进行身份验证?
您可能已经注意到上述示例中存在严重的安全漏洞。为了识别用户,我们在纯文本中设置了sessionId
值。任何人都可以轻松地在cookie中发送不同的用户名,我们的服务器会将其视为该用户。例如,如果Alice想破解Bob的帐户,她所要做的就是像这样发送会话cookie - Cookie: sessionId=bob
。我们的服务器将Alice视为Bob。
这是set_secure_cookie
方法的用武之地。它将设置一个签名的令牌,而不是普通的用户名。 Tornado将根据您的cookie_secret
设置值设置已签名的Cookie。这是安全的,因为cookie是基于cookie_secret
签名的,没有人知道接受你。 Cookie将如下所示 - sessionId=slsafj7987LJflsfslfljk68686sfj
。现在,爱丽丝不能冒充鲍勃。
为多个用户存储这些cookie的位置?
无处。由于cookie已签名,因此Tornado将在请求进入时解码签名cookie中的值。例如,如果Cookie标头如下所示:Cookie: sessionId=alksjfl98798yfaslkdjf
。 Tornado将解码此 - alksjfl98798yfaslkdjf
值以提取编码的用户名。它是即时发生的。
我们如何验证框架内的每个API调用?
API调用是否需要会话,例如用户身份验证,以便用户可以查看和编辑他们的帐户等?那么你需要的只是set_secure_cookie
方法
如果API调用彼此独立,那么您应该让您的用户使用带有"访问密钥"的API。您需要将这些访问密钥存储在数据库中。您的用户将以HTTP标头或请求查询参数的形式向每个请求发送此访问密钥:
# as a header
API-Access-Key: <long-random-key>
# OR as a query string
http://yourserver.com?key=<long-random-key>