如何处理oauth2 access_token

时间:2016-07-05 08:15:16

标签: node.js express oauth2

在完成OAuth2的多个步骤后,一旦收到access_token,应该怎么做?

app.get('/oauth2', function(req, res) {
  var code = req.query.code;

  var url = "https://.../oauth/access_token";
  var options = {
    url: url,
    method: "POST",
    form: {
      client_id: '...',
      client_secret: '...',
      grant_type: 'authorization_code',
      redirect_uri: 'http://localhost:8080/oauth2',
      code: code,
    },
    json: true
  }

  request(options, function(err, response, body) {

    // I need to save the user in database if she doesn't exist
    // Then redirect, but should I pass the access_token to the redirect?
    res.redirect('/'); // or res.redirect('/?access_token=zzz')
  }

  // Also, should the access_token be encrypted
  // Does it need to be saved in database?
  // Does it go in local storage?

});

我会想要在响应中收到的一些信息,因此需要将其存储在数据库中。但具体我对access_token做了什么?它会保存到数据库吗?它应该加密吗?当我重定向时,我是否将其添加为查询字符串?我是否将其存储在本地存储中?如果是这样,怎么样?

1 个答案:

答案 0 :(得分:0)

首先,您的代码包含json: true,但RFC 6749 4.1.3. Access Token Request声明参数应使用application/x-www-form-urlencoded格式发送。

其次,来自令牌端点的响应格式是JSON。有关详细信息,请参阅4.1.4. Access Token Response

第三,获得访问令牌后,应将其保存以供日后使用。保存访问令牌的地方取决于您。数据库,内存以及您喜欢的任何位置。如果要在保存时加密访问令牌,请按照您的意愿进行操作。

最后,访问令牌用于调用资源服务器的Web API。在正常情况下,Web API的实现以RFC 6750中定义的方式接受访问令牌。在规范中,定义了以下三种方式。

  1. In Authorization header
  2. As a Form parameter
  3. As a Query parameter