使用客户端JS代码中的OAuth授权代码流令牌是否安全?

时间:2019-05-02 18:39:01

标签: javascript node.js oauth-2.0 spotify

我正在阅读Spotify Web API文档,重点关注授权指南。 他们为授权代码 OAuth2流提供了一些示例代码,但是有些东西对我来说似乎不太正确。我对OAuth协议的了解有限,所以我对此不确定。

事实是,他们进行调用以获取服务器端的访问和刷新令牌,但随后他们重定向到初始路由,将令牌作为URL参数传递,以允许从JS代码中使用。 这是node.js服务器的代码:

[POST call to the token end-point to get the tokens]

[...]

// we can also pass the token to the browser to make requests from there
res.redirect('/#' +
    querystring.stringify({
        access_token: access_token,
        refresh_token: refresh_token
    })
);

然后,它们在前端JS上使用这些令牌向API发出HTTP请求。他们甚至将令牌刷新作为AJAX调用。

我的问题是:这不是使用授权代码流的不好方法吗?我是否可以修改代码并将所有需要使用访问令牌的API调用迁移到后端,然后通过内部调用来获取接收到的信息到后端?

1 个答案:

答案 0 :(得分:0)

这在很大程度上取决于您的应用程序。如果您的用户使用您的网站并信任他的浏览器,那么将令牌保留在浏览器上应该不会有问题。这样一来,在安全性上,将令牌另存为Cookie就是安全的做法,就像将该用户登录到您自己的允许用户使用您的api的登录机制一样。

迁移它以便客户端要求服务器执行操作意味着您需要做一些事情:

  • 服务于请求的服务器(也许您只是想让一个Web应用执行OAuth,而没有后端)
  • 用户需要信任您的服务器以确保令牌安全
  • 某种形式的授权,以确保只有一个用户可以使用您的api及其令牌
  • 您的服务器需要处理其他请求,并且每个请求都需要额外的延迟