在 Kubernetes 上 Keycloak 登录后获取 NextJS 应用的用户信息

Posted

技术标签:

【中文标题】在 Kubernetes 上 Keycloak 登录后获取 NextJS 应用的用户信息【英文标题】:Get user information on NextJS app after Keycloak login on Kubernetes 【发布时间】:2021-09-03 10:24:30 【问题描述】:

localhost:8080/auth 的另一个标签上成功Keycloak 登录后被重定向到我的NextJS 应用程序后,我一直在尝试获取经过身份验证的用户信息。

入口(入口点)用于检查 Kuberentes 上经过身份验证的用户,然后将其重定向到应用程序。我的意图是使用@react-keycloak/s-s-r 在我的index.tsx 页面上获取用户信息。

到目前为止,我的 app.tsx 中有这个:

const keycloakCfg = 
  url: 'http://localhost:8080/auth',
  realm: 'master',
  clientId: 'account-console',


interface InitialProps 
  cookies: unknown


export default function MyApp(props: AppProps & InitialProps) 
  const  Component, pageProps, cookies  = props;
  const initOptions = 
    checkLoginIframe: false
  


  return (
    <>
    <s-s-rKeycloakProvider
      keycloakConfig=keycloakCfg
      persistor=s-s-rCookies(cookies)
      initOptions=initOptions>
        <Component ...pageProps />
    </s-s-rKeycloakProvider>
    </>
  );


function parseCookies(req?: IncomingMessage) 
  if (!req || !req.headers) 
    return 
  
  return cookie.parse(req.headers.cookie || '')


MyApp.getInitialProps = async (context: AppContext) => 
  // Extract cookies from AppContext
  return 
    cookies: parseCookies(context?.ctx?.req),
  

在我的index.tsx 里面我有:

  const  keycloak  = useKeycloak<KeycloakInstance>();
  const parsedToken: ParsedToken | undefined = keycloak?.tokenParsed;

   console.log(keycloak?.authenticated)
    keycloak?.authenticated || (keycloak && parsedToken)
    ? console.log(parsedToken)
    : console.log('error logging in');

问题是即使在从localhost:8080/auth 登录后 - 仍然会收到错误消息。

目前,在单独的选项卡登录后会发生以下流程:

    我去 localhost:3000

    页面加载后被重定向到: http://localhost:3000/#error=invalid_request&error_description=Missing+parameter%3A+code_challenge_method&state=8c761520-8aeb-4365-934b-076d8c1d317c

    在上面的链接停留 1-2 秒后,它会回到 localhost:3000

【问题讨论】:

【参考方案1】:

您的问题Missing parameter: code_challenge_method 将解决pkceMethod 配置:

  const initOptions = 
    checkLoginIframe: false,
    pkceMethod: 'S256'`
  

【讨论】:

谢谢,现在我收到一个新错误:Access to XMLHttpRequest at 'http://localhost:8080/auth/realms/test/protocol/openid-connect/token' from origin 'http://localhost:3000' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. 我该如何解决这个问题? 对不起,这不是聊天,我会解决你所有的问题。请接受答案并使用***.com/help/minimal-reproducible-example 提出另一个问题

以上是关于在 Kubernetes 上 Keycloak 登录后获取 NextJS 应用的用户信息的主要内容,如果未能解决你的问题,请参考以下文章

来自本地 kubernetes 集群的 Keycloak 端口转发

Keycloak Kubernetes 401 未经授权

带有 chrome 扩展的 Keycloak 登录

尝试使用 helm 在 Kubernetes Pod 中启动时,Keycloak 崩溃

为 Kubernetes 中的 Keycloak 指定重定向和内部查找的备用 URL

如何在 Kubernetes 上的 Keycloak Operator 部署中使用自定义主题?