【发布时间】:2014-07-01 07:17:36
【问题描述】:
我正在开发一个 RESTful API,并考虑使用 OAuth 进行类似密码流的身份验证。但是,我决定实现自己的身份验证机制,因为我不想在我的项目中使用 OAuth 的开销。
一切运行良好,但目前我没有使用任何形式的身份验证令牌加密。我应该使用什么?您能否提供一些可以为我指明正确方向的文章? API 将通过 HTTPS 使用。
编辑:
我正在使用以下函数来生成访问令牌:
public function generateToken($user)
{
return hash_hmac('sha256', Str::random(10), $user->id.time().uniqid(), false);
}
这足够安全吗?
【问题讨论】:
-
我想您的身份验证令牌是随机会话 ID?如果我对您的系统的假设是正确的,那么您根本不需要对其进行加密(假设它始终通过 HTTPS 传输,正如您所说并且您应该这样做)。为什么要加密?
-
我正在使用
str_random(40)手动生成访问令牌。据我所知,这还不够安全。 -
在 PHP 中你可以获得更好的随机数据:stackoverflow.com/a/1551064/371137。与大多数其他语言/框架一样,还有一个内置的会话管理系统。
-
我已经编辑了我的问题。
-
我可能仍然更喜欢直接使用加密安全的随机数生成器,而不是自己构建一个伪 RNG,但只要
Str::random(10)不太可能重复自己,这应该是好的。顺便提一句。我不确定 random 的第一个参数是否应该是一个数字:fuelphp.com/docs/classes/str.html - 这可能是个问题。
标签: rest authentication encryption oauth