Keycloak 重定向到页面刷新时登录

问题描述 投票:0回答:4

我在我的 Angular 5 应用程序中使用 keycloak JavaScript 适配器,虽然我的登录和重定向工作正常,但问题是每当我刷新我的 ng 应用程序时,它都会再次要求 keycloak 登录,尽管我看到我的会话在 /auth/ 上仍然处于活动状态领域/{镜像领域名称}/帐户。

正如我从 keycloak JS 适配器文档中理解的那样 https://www.keycloak.org/docs/3.0/securing_apps/topics/oidc/javascript-adapter.html,当 onLoad 设置为 init 需要登录时如果用户登录到 Keycloak,它会对客户端进行身份验证,如果没有,则显示登录页面。但就我而言,似乎需要一秒钟才能将我注销,因为它总是将我重定向到 keycloak 的登录页面。

angular5 keycloak
4个回答
17
投票

您需要将上次登录时保存的令牌传递给 keycloak 初始化构造函数。如果您使用授权流程(标准),则也刷新令牌。像这样。

// load previous tokens, saved after successful login of keycloak success callback
    const token = localStorage.getItem('kc_token');
    const refreshToken = localStorage.getItem('kc_refreshToken');
    // pass to keycloak init
    keycloak.init({ onLoad: 'login-required', token, refreshToken }).then(
    success=>{
      localStorage.setItem('kc_token', keycloak.token);
      localStorage.setItem('kc_refreshToken', keycloak.refreshToken);
      //load your app from here
  });

1
投票

Tl;dr:在我的代码中,有几个原因导致 init 函数没有使用参数第二次调用。小心这一点!

Fwiw,我遇到了类似的问题,在我看来我解决了这个问题(暂时)。除了 @ahmadalibaloch 的答案(将已知的令牌传递给 init)之外,我在这里遵循了这个简洁的指南:https://dev.to/matejbucek/secure-svelte-with-keycloak-42g3(对于不过 svelte-kit),其中 checkParams 函数检查重定向 url 以再次调用 init 函数(使用令牌)。

有两件事导致我的代码出现故障,您可以查找并尝试修复,这是由重定向网址中的自定义搜索参数引起的,如下所示:

mypage.tld/foo?myparam=0#keycloak-redirect-params

这样,checkParams函数就无法正常工作了。而且,

myparam=0
被用作备用访问字符串(想想链接共享),所以我的代码在准备好之前放弃了keycloak(第二次),即init函数没有再次调用,而是使用了搜索参数。我的建议:如果其他答案还不够,请尝试找出为什么 init 函数没有按应有的方式再次调用。

我知道这是非常具体的,但(对我来说)很难发现这一点,所以也许它有帮助。


0
投票

您需要登录

keycloak
客户端,选择领域,导航到侧边栏上的
AUTHENTICATION
选项卡,选择
FLOW
菜单选项卡,然后将 Cookie 设置更改为备用或必需。

An image showing Flow menu bar settings


0
投票

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/ 缺点是更容易受到网络攻击

但在所有情况下,解决方案都是@ahmadalibaloch 上面的解决方案

但是不要忘记在刷新令牌时更新存储并在注销时清理存储

© www.soinside.com 2019 - 2024. All rights reserved.