使用密钥对API访问令牌进行编码和解码

时间:2017-01-30 17:00:51

标签: api python-3.x security cryptography access-token

我计划使用ACCESS_TOKEN在django中保护我的rest API。 当用户使用他们的用户名和密码登录时,一旦他们通过身份验证,我生成一个ACCESS_TOKEN并传递给前端,无论是网站还是本机应用程序。然后使用该ACCESS_TOKEN进行进一步的通信。 我根据一些用户数据生成此令牌,然后使用公钥加密。稍后,当应用程序在任何请求中发送此消息时,我使用私钥解密ACCESS_TOKEN并提取用户数据数据并处理请求。这类似于会话数据在ACCESS_TOKEN中以加密形式进行的会话,并且只有私钥并解密ACCESS_TOKEN。这就是我打算做的事情。 请建议我提出以下问题: - 1.保护我的REST API是最好的方法吗?我想以相同的方式从Web应用程序(AJAX调用)和NATIVE应用程序(Android / IOS等)使用我的API? 2.令牌到期的最佳方法是什么?我是否需要在我的终端跟踪访问令牌才能使它们过期?

我也想在我的API中使用Oauth。

1 个答案:

答案 0 :(得分:0)

我看到的大多数人使用已签名但未加密的JWT,因此他们存储非PI数据,如user_id或session_id。我想你可以加密它,如果需要存储个人信息,但我没有看到任何其他原因。假设您使用的是HTTPS,那么只有最终客户端才能访问这些信息。如果秘密被泄露,听起来就像是在寻找麻烦,所以你会想要一个非常好的密钥轮换计划,因为你可能甚至不知道它泄露到太晚了。

许多使用JWT的人这样做是因为他们不想要集中式auth服务器,因此令牌短暂就好几个小时或几天。如果您需要对即将到期的令牌进行非常严格的控制,您可以采用黑名单方法,将JTI的黑名单(JWT Ids)存储在K / V中以进行检查。 https://www.moesif.com/blog/technical/restful-apis/Authorization-on-RESTful-APIs/