Oauth 2.0 如何在js webapp中为仅承载后端客户端获取令牌
我为我的应用程序获得了以下设置:Oauth 2.0 如何在js webapp中为仅承载后端客户端获取令牌,oauth-2.0,keycloak,bearer-token,Oauth 2.0,Keycloak,Bearer Token,我为我的应用程序获得了以下设置: 密钥斗篷服务器 密钥斗篷保护的nodejs后端(仅承载) PHP/js前端 前端可以选择进行登录保护。对于某些用户,需要登录,这会将用户重定向到KeyClope服务器。用户登录后,前端将拥有一个承载令牌,用于对受KeyClope保护的后端进行api调用 我的问题是如何为不需要登录的用户(匿名用户)获取承载令牌 我尝试过这种方法: 创建供PHP使用的“机密”客户端 前端PHP使用client_id和client_secret获取一个承载令牌,并将它们传递给java
使用寿命很长(例如,6小时)的访问令牌是否错误?我还有什么其他选择?在不增加很多复杂性的情况下,当访问令牌过期(用户未经授权的请求)时,重定向用户以重新登录。这要容易得多,因为在许多场景中都是相同的流程
另一种选择是使用会话之类的东西来处理这个问题,这确实增加了复杂性 我也遇到过类似的情况。您可以使用以下方法
- 您的API始终受到访问令牌的保护
- 最初,您的PHP后端使用
- 加载UI后,对PHP后端进行JS调用并获取相关的访问令牌。您可以将其存储到本地存储
- 此呼叫受会话保护。最初是未经验证/匿名访问
- 如果您需要具有不同作用域的访问令牌(仅授予登录用户的作用域,非匿名情况),那么您可以让最终用户按照登录过程获取新令牌
- 一旦收到令牌,您将再次根据与后端和前端的会话存储它们
- UI可以通过相同的后端调用获取前端的访问令牌
- 刷新令牌存储在后端。因此,存储和刷新是安全的
- 客户端凭据从不向前端公开
唯一的负担是后端的会话维护。但是有许多最佳实践都是围绕这一点建立起来的 我的问题是匿名访问。有些访问者可能没有注册,但他们仍然可以使用我们的应用程序。注册用户可以在访问令牌过期时更新访问令牌;没有问题。酷,在这种情况下,肯定会按照第一个发送到登录页面。当客户端没有凭据或需要重新请求凭据时,向客户端发送401,然后通过导航到登录来处理客户端上的代码。