在PHP

时间:2017-07-19 15:21:07

标签: php json api curl

我正在开发一个我需要集成api的项目。 API的网站要求对其API的每个请求都由授权令牌授权。 我的问题是如何安全地保存授权令牌并在到期后重新生成令牌,以便我的网站用户能够使用访问令牌来处理他们的请求。 令牌在2小时后到期 以下是我获取授权令牌和响应的请求。

    response = unirest.post("https://webapisite.com/merchant/access", 
headers={ "Accept": "application/json" }, 
params={ "apiKey": "my_api_key, "secret": "my_secret" });

我将收到以下json回复

    {
   "status": "success",
   "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA", // a valid merchant token
   "config":{}
 }

3 个答案:

答案 0 :(得分:1)

对于这类用例,最常用的标准可能是OAuth 2.0

OAuth是一种广泛认可的HTTP协议,用于在成功进行身份验证后向客户端发送令牌(另请参阅:ServerFault上的“What is the difference between authentication and authorization?”)。它提供了不同的“流程”来获取令牌,最适合你的情况可能是“Resource Owner Password Credentials Grant”流程。然后,客户端可以使用提供给它们的令牌来发出实际的API请求。

存储令牌通常在数据库中完成。在真正无状态的应用程序中,JSON Web Tokens可以消除在服务器端存储令牌的需要。

答案 1 :(得分:0)

您应该将此令牌保存在DB中。 在一个表中,保存访问令牌,身份验证令牌和过期日期。 如果需要,您可以保存多个记录,但如果您只有一个身份验证令牌,则只需一个记录。

在每次调用该API之前,您在数据库中检查可用的访问令牌是否仍然有效,如果不是,则必须通过身份验证令牌续订访问令牌。

我无法理解您使用的是哪种语言来执行此任务。 如果是javascript,您可以为后端发帖,询问最新的有效令牌。

希望有所帮助。

答案 2 :(得分:0)

最好将令牌保存在数据库中并存储在会话中。 对于每个请求,您都可以从会话中获取令牌并通过DB存储的会话跟踪会话活动。 基本上这种东西是项目流程的一部分,所以根据项目需要和流程以及安全方面我们可以采取行动。