c++ - 我如何为用户生成个人访问 token ?

标签 c++ mysql cpprest-sdk

我目前正在为我的 Web 服务开发一个 REST API。每个注册的用户都必须有一个单独的 API 访问 token ,但是我如何生成一个,而不检查每个 token 是否与新 token 相同?

[Not important]

当我使用 REST API 以便我可以使用 Web 界面、桌面应用程序、Android 应用程序等时,这是好主意还是坏主意?但它不会是“公共(public)功能”!可能稍后。

最佳答案

如果由我来决定,我会发布递增的数字作为用户 ID。然后我会使用 256 位 AES 之类的东西来加密该用户 ID。

然后我可能会让用户包含一个 JSON web token包含他们的用户 ID 和访问 token ——加密的 ID。

为了验证他们的网络 token ,您加密他们的用户 ID 并检查它是否与访问 token 匹配(或者您解密访问 token 并检查它是否与用户 ID 匹配)。

只要您创建一个真正随机的加密 key ,并将其保密,您的安全性就应该仅取决于底层加密算法的安全性。

这里的主要弱点是所涉及的值是一个固定的网络 token ,因此如果其他人“嗅探”了用户的数据包,他们可以使用回放攻击——也就是说,他们可以使用与真正的用户。有一些方法可以防止这种情况发生,但是(除非您主要使用预构建的“东西”来实现它)它们变得相当复杂。

“增强”协议(protocol)中最简单的可能是不仅使用用户 ID,而且(例如) session ID 和数据包 ID(两者都递增),将三者连接在一起并加密。然后每个数据包都会有一个唯一的加密值来验证。

关于c++ - 我如何为用户生成个人访问 token ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46040213/

相关文章:

c++ - 如何选择所有轮廓?

mysql - Spring XD 流状态失败

c++ - 递归光线追踪器中的不正确反射

c++ - 使用 "Sort K number of elements based array"算法的数组中的第 K 个最大数

c++ - 如何正确结束线程?

c++ - 使用 cpprestsdk 和 boost 固定证书

C++使用回调函数时不知道使用 "this"和 "std::placeholders::_1"是什么意思

c# - 无法从 C# 执行 MySql 存储过程

java - 使用按钮刷新jsp中的mysql表

c++ - 显示来自 api 返回数据的特定数据,C++ REST SDK a.k.a Casablanka