Spring 安全 OAuth 2:如何在 javascript 客户端中使用访问令牌

Spring Security OAuth 2: How to use access token in the javascript client

我有三个应用程序:REST API 与资源服务器、授权服务器和 VueJs 上的 javascript 客户端应该使用 REST Api。使用授权后获得的访问令牌时出现问题。首先,我决定使用本地存储或 cookie 来存储访问令牌,但正如我所读,这并不安全。推荐使用httpOnly的cookie,但是我无法从js访问。 url 参数中的附加标记也不是正确的方法。那么我应该如何使用我的 Rest Api?我正在使用授权码授权流程。

当你有一个 Javascript 客户端时,客户端本身应该充当 OAuth2 客户端

意思是,服务器不是获取令牌的对象。客户端,即浏览器中的 javascript 应用程序,将从授权服务器获取令牌。

您可以通过使用名为 implicit 的授权类型来实现此目的。

在此授权类型中,没有 client_secret,但您必须有一个有效的 client_id。您也不会收到刷新令牌。但是您可以获得访问令牌和 id_token(如果您有 OIDC 服务器)。

您的问题暗示您在执行服务器端授权(authorization_code、密码等),然后将该令牌发送到 javascript 客户端。这是不正确的。

为了更好地描述 OAuth2,我们发布了这个视频:https://www.youtube.com/watch?v=u4BHKcZ2rxk

您的 JavaScript 应用程序将执行此操作:

  1. 我有有效的令牌吗?否
  2. 开始隐式授权
  3. 从授权服务器接收令牌
  4. 在内存中存储令牌var token = ....
  5. 使用令牌调用服务器上的 API 个端点
  6. 重复第 5 步,直到令牌不再有效
  7. 返回步骤 1

您的下一步是观看 video and learn more about implicit grant type

正如您已经猜到的那样,在服务器上获取令牌然后将其发送到不安全的客户端会以您可能不希望的方式暴露您的应用程序。