使用令牌进行身份验证 - 正确的方法?

时间:2014-03-26 17:47:25

标签: authentication authorization

我正在为许多设备设计RESTful API。但我不知道如何处理令牌并将其存储在数据库中(有过期时间)。

我的想法是关注

客户端发送GET请求

GET /users/login 'username=Foo&password=Bar'
Response:  
{
     "logged": true,
     "token": "224md10c4u01420c1024u1209uMU24"
}

服务器写入令牌表

| ID |               token               | user_id |   expires   |
| 1  |   224md10c4u01420c1024u1209uMU24  |    4    |  21/01/2015 |

然后客户端收到令牌,并在请求时例如:

GET /users/update "mail=foobar@example.com&password=topsecret"
Authorization: Awesome 224md10c4u01420c1024u1209uMU24

服务器检查令牌是否处于活动状态并且是否存在(如果未返回错误)。 如果令牌存在且活动更新数据

if token.id > 0 && token.expires > Date.now() {
     Users.getUserById(token.user_id).update(request.data)
     http.response(array('success'=>true))
}

客户获得

{
     "success": true
}

这种方式又好又安全吗?我不需要OAuth2,因为我不打算与第三方共享API。

感谢。 S上。

1 个答案:

答案 0 :(得分:0)

首先,当您进行身份验证和身份验证过程时,您不希望使用GET请求发送登录表单。它很容易被盗,使用帖子通过网络发送敏感日期。

第二个而不是令牌,你可以使用sessionID所以不需要你另一个令牌。

在休息时它接缝就可以了。但总有我的黑客和东西。

希望这有助于你。