为啥 keycloak 在页面刷新时未经授权?

Posted

技术标签:

【中文标题】为啥 keycloak 在页面刷新时未经授权?【英文标题】:Why keycloak gets unauthorized on page refresh?为什么 keycloak 在页面刷新时未经授权? 【发布时间】:2021-06-22 00:25:34 【问题描述】:

当我刷新页面时,我已经成功地将 keycloak 与 reactJS 集成。keycloak.authenticate get false 并再次询问凭据。 我也在互联网上搜索,他们建议在 initOptions 道具中传递令牌和刷新令牌,我已经这样做了,但仍然面临同样的问题。

我正在使用“@react-keycloak/web”:“^2.1.1”和“keycloak-js”:“^10.0.1”

这是我的 Keycloak.js 代码


import * as Keycloak from 'keycloak-js';

const keycloakConfig = 
   url: 'https://smartgrid.doersops.com/auth/',
   realm: 'OneSmartgrid',
   clientId: 'smartgrid-react-web-admin',


const keycloak = new Keycloak(keycloakConfig);

export default keycloak

这是我的 App.js 代码

import React from 'react';
import  KeycloakProvider  from '@react-keycloak/web'
import keycloak from './keycloak';
import  AppRouter   from './routes';
function App() 
  const token = localStorage.getItem('token');
  const refreshToken = localStorage.getItem('refreshToken');

  const setTokens = (token, idToken, refreshToken) => 
    localStorage.setItem('token', token);
    localStorage.setItem('refreshToken', refreshToken);
    localStorage.setItem('idToken', idToken);
  
  return (
    <KeycloakProvider 
      keycloak=keycloak
      onTokens=
          (tokens:  keycloakTokens) => 
          setTokens(tokens.token ?? '', tokens.idToken ?? '', tokens.refreshToken ?? '')
        
      initOptions= onLoad: 'login-required', token, refreshToken 
      >
      <AppRouter />
    </KeycloakProvider>
  )


export default App;

【问题讨论】:

【参考方案1】:

我正在回答我自己的问题,实际上我必须从 keycloak 管理面板更改设置。从侧面菜单中单击身份验证并从下拉菜单中选择浏览器。

【讨论】:

以上是关于为啥 keycloak 在页面刷新时未经授权?的主要内容,如果未能解决你的问题,请参考以下文章

如果刷新(JWT)令牌未经授权(401响应),AngularJS重定向到登录

Keycloak 在硬页面刷新后就像未初始化一样

Keycloak Kubernetes 401 未经授权

Next.js:在实现私有路由时,如何在重定向之前防止未经授权的路由/页面的闪烁?

大多数非hacky方式在未经授权导航到页面时弹出模态窗口

在 Keycloak 中禁用刷新令牌