我正在用 Go 编写一个网络服务。
登录后,用户会收到一个令牌,它的行为大致类似于 cookie,因为用户必须在每个后续请求中传递它才能被识别。
我的令牌生成器是否必须是“加密安全的”,即。产生高熵?
我如何在 Go 中实现这一点,最好使用标准库或由与我不同的加密能力人编写的库?
我正在用 Go 编写一个网络服务。
登录后,用户会收到一个令牌,它的行为大致类似于 cookie,因为用户必须在每个后续请求中传递它才能被识别。
我的令牌生成器是否必须是“加密安全的”,即。产生高熵?
我如何在 Go 中实现这一点,最好使用标准库或由与我不同的加密能力人编写的库?
令牌生成器在密码学上是安全的,以减少攻击者猜测新会话令牌并获得特权的能力,这将是有益的。crypto/rand实现了这样一个随机数生成器,包括允许您生成随机整数、素数和适合于此的字节的函数。
是的,使用加密哈希。您可以使用类似 gorilla/securecookie 来生成密钥并提供 cookie 存储:http ://www.gorillatoolkit.org/pkg/securecookie
请注意,如果您仅依靠 cookie 进行验证,您就可以打开自己进行重放攻击。使用 cookie 触发服务器端检查(用户 ID == 活动/有效)或如果 ID 不存在则退回。