【问题标题】:Spring Security OAuth 2: How to use access token in the javascript clientSpring Security OAuth 2:如何在 javascript 客户端中使用访问令牌
【发布时间】:2019-07-11 06:26:02
【问题描述】:

我有三个应用程序:带有资源服务器的 REST API、授权服务器和 VueJ 上应该使用 REST Api 的 javascript 客户端。使用授权后获得的访问令牌时出现问题。首先,我决定使用本地存储或 cookie 来存储访问令牌,但是当我阅读时它并不安全。建议使用 cookie 和 httpOnly,但我无法从 js 访问。 url 参数中的添加令牌也不是正确的方法。那么我应该怎么做才能使用我的 Rest Api 呢?我正在使用授权码授权流程。

【问题讨论】:

标签: spring spring-boot spring-security oauth-2.0 spring-oauth2


【解决方案1】:

当您有 Javascript 客户端时,客户端本身应充当 OAuth2 客户端

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

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

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

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

关于 OAuth2 的精彩描述,我们发布了这个视频:https://www.youtube.com/watch?v=u4BHKcZ2rxk

您的 JavaScript 应用程序会这样做:

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

您的下一步是观看video 并了解有关implicit grant type 的更多信息

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

【讨论】:

  • 不客气。 Jacascript 框架可以为您完成所有这些工作。
  • 如果相关,我将更新此答案以包括 OpenId Connect Session。我必须刷新我的记忆。
猜你喜欢
  • 2021-09-12
  • 2017-05-06
  • 1970-01-01
  • 1970-01-01
  • 2014-05-04
  • 2021-01-24
  • 1970-01-01
  • 2014-09-17
  • 2012-01-06
相关资源
最近更新 更多