我想学习如何使用Laravel Sanctum认证. 当我发送 GET https://localhost/sanctum/csrf-cookie
我得到以下CSRF cookie。
XSRF-TOKEN=eyJpdiI6Inhvb0FDVXdHZDU5QzBqQTNKaWNxTUE9PSIsInZhbHVlIjoiSXNudjNiNE9xbmtNVWdsQ0l2SDRyYUNPQXIrTGJLb2ZMVDc2NWttenZGY0NkcDRvQzFVQlZOMDRlNFdTOHJaNiIsIm1hYyI6ImY0Y2M2YzZiZWIxYWVmZTRmMWI5NWRhNTBhN2JmM2VjNGExYjU0MGYwYWVmYTE4ODQxM2I0YTFlMWVjZTVhMDkifQ%3D%3D;
你可以注意到标记末尾奇怪的%3D%3D. 这些字符也被添加到我的laravel_session cookie.当我用这个确切的token在头X-XSRF-TOKEN中发送请求时,我得到了token不匹配的错误。当我删除这些字符时 - 所有工作都正常。我想知道这些字符是从哪里来的,如何才能删除它们。
更新。 因为这些字符是经过编码的URL字符,当我对它们进行解码,并在X-XSRF-TOKEN的末尾加上'=='时,似乎就可以了。不过,奇怪的是,之前我只是手动从查询中删除这些字符,为什么就能正常工作呢?
是的, 这代表着 =
符号,它是你的base64'ed CSRF标记的一部分。我猜只有当你删除它时,它才会工作,因为你的 =
符号是特 填充物 字样。在很高的层次上,他们只是把绳子垫出适当的长度。
你已经知道了。=
成为 %3D
当它是url编码的时候。
通常情况下,当你遇到一个由大量的数字和字符组成的随机顺序的字符串,并且它以 ==
很有可能是base64编码的。
=
被添加到(字符串的末尾)作为填充,以匹配字符串中的特定字符数。你可以在 本回答.
为了回答你的问题,我将尝试解码给定的令牌,有的有,有的没有。==
末了,我会用 该在线解码器所以你也可以在你的终端试试。
有了 ==
:
{"iv":"xooACUwGd59C0jA3JicqMA==","value":"Isnv3b4OqnkMUglCIvH4raCOAr+LbKofLT765kmzvFcCdp4oC1UBVN04e4WS8rZ6","mac":"f4cc6c6beb1aefe4f1b95da50a7bf3ec4a1b540f0aefa188413b4a1e1ece5a09"}
没有 ==
:
{"iv":"xooACUwGd59C0jA3JicqMA==","value":"Isnv3b4OqnkMUglCIvH4raCOAr+LbKofLT765kmzvFcCdp4oC1UBVN04e4WS8rZ6","mac":"f4cc6c6beb1aefe4f1b95da50a7bf3ec4a1b540f0aefa188413b4a1e1ece5a09"}
他们是 一样.
它之所以有效,是因为它们(=
)只是填充物, 并不包含任何信息.
我不是laravel专家, 但是, 我猜测它不能用於 %3D
是因为它没有解码url。