对于使用 keycloak javascript 适配器 的授权代码流程,似乎令牌(访问令牌和刷新令牌)存储在客户端。但我似乎找不到它存储在哪里?我查看了本地存储和会话存储,但不存在。
我认为它将它存储在内存中 - 请参阅项目负责人的以下答案:
https://lists.jboss.org/pipermail/keycloak-dev/2016-July/007654.html
Keycloak JS 适配器将数据存储在本地存储中,如果本地存储不可用,则存储在 cookie 中:
来自源代码的片段:
function createCallbackStorage() {
try {
return new LocalStorage();
} catch (err) {}
return new CookieStorage();
}
keycloak js 仅存储在内存中。他们出于安全原因做出了选择。
但问题是它不具备刷新或新选项卡的弹性。
因此,如果您想保持弹性,有两种可能的方法
OWASP 推荐使用 sessionStorage (https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/JSON_Web_Token_for_Java_Cheat_Sheet.md#token-storage-on-client-side) 比受到更多限制之前的 storageLocale 更好
您还可以关注这篇大文章,其中包含一个很好的风险矩阵,其中他们推荐 cookie https://thenewstack.io/best-practices-for-storing-access-tokens-in-the-browser/ 缺点是更多暴露于网络攻击
因此,在身份验证之后,将刷新结束访问令牌存储到适当的存储中,同时在更新时,在注销时删除它们,并在初始化时从存储中检索它们并将它们添加到 init 命令中
因此,您可以在此处查看部分代码示例,但不建议存储:Keycloak 重定向到页面刷新时登录