首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在js webapp中为只承载的后端客户端获取令牌

如何在js webapp中为只承载的后端客户端获取令牌
EN

Stack Overflow用户
提问于 2018-11-18 17:16:56
回答 2查看 1.1K关注 0票数 2

我为我的应用程序准备了这个设置:

  1. Keycloak服务器
  2. 密钥披风-保护nodejs后端(仅承载)
  3. PHP/Reactjs前端

前端是可选择的登录保护。对于某些用户来说,它需要登录,这将使用户重定向到Keycloak服务器。在用户登录后,前端将有一个承载令牌来对受密钥披风保护的后端进行api调用。

我的问题是如何为不需要登录的用户(匿名用户)获取承载令牌。

我试过这种方法:

  1. 创建供PHP使用的“机密”客户端。
  2. 前端PHP使用client_id和client_secret获取承载令牌,并将它们传递给javascript (我的意思是,在标记内打印令牌值,这是一个全局变量)
  3. 最初,前端进行成功的api调用,因为由php传递的access_token是新的/有效的。
  4. 在access_token过期后,我需要使用refresh_token获取一个新的。
  5. 但是,为此,我需要在js应用程序中不可用的client_secret (您知道,不建议在js应用程序中保存client_secret和密码)。

我被困在这里了。我研究、阅读了大量的文档,但没有找到实现这一目标的方法。

另一个在我脑海中闪现的想法是让持票人access_token长寿(例如,1小时)。但是,一些用户可能使用该应用程序超过一个小时。

在这一点上,我不确定,是否有可能从javascript web应用程序中匿名调用受保护的keycloak后端。

使用很长时间(例如,6小时)的access_tokens是否错误?我还有别的选择吗?

EN

回答 2

Stack Overflow用户

发布于 2018-11-19 04:56:30

我也遇到过类似的情况。您可以使用以下方法。

  • 您的API始终受到访问令牌的保护。
  • 最初,PHP后端使用客户凭据授予检索访问令牌
  • 一旦加载了UI,就可以对PHP后端进行JS调用,并获得相关的访问令牌。将其存储到本地存储区中。
  • 此调用受会话保护。最初,它是未经身份验证/匿名访问
  • 如果您需要具有不同作用域的访问令牌(仅为登录用户授予范围,非匿名情况),则让最终用户遵循登录过程以获得新的令牌。
  • 一旦接收到令牌,您将再次根据后端和前端的会话存储它们。
  • UI可以通过相同的后端调用获得前端的访问令牌。

这样,您就不会硬编码访问UI代码的令牌值。此外,后端调用由会话保护。

另外,

  • 刷新令牌存储在后端。因此,存储和刷新是安全的。
  • 客户端凭据从不暴露在前端。

唯一的负担是带有后端的会话维护。但是有很多最佳实践都是围绕这一点建立的。

票数 2
EN

Stack Overflow用户

发布于 2018-11-18 21:18:53

在不增加大量复杂性的情况下,当访问令牌过期(用户未经授权的请求)时,将用户重定向回登录。这要容易得多,因为对于许多场景来说,这是相同的流程。

另一种选择是使用类似会话的方法来处理这个问题,这确实增加了复杂性。0.html

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53363508

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档