exchangeCode($code); // Validate ID token (minimal). $idInfo = $oidc->validateIDToken($tokens['id_token'], $nonce); // Get userinfo (includes groups because of scope). $userInfo = $oidc->getUserInfo($tokens['access_token']); // Store everything we need in the session. $_SESSION['user'] = [ 'id_token' => $tokens['id_token'], 'access_token'=> $tokens['access_token'], 'refresh_token'=> $tokens['refresh_token'] ?? null, 'expires_in' => $tokens['expires_in'] ?? null, 'id_info' => $idInfo, 'user_info' => $userInfo, ]; } catch (\Throwable $e) { http_response_code(500); exit('Error during OIDC exchange: ' . $e->getMessage()); } // Clean up the query string (code, state) by redirecting to the home page. header('Location: /'); exit;