true, CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $accTok], CURLOPT_TIMEOUT => 6, ]); $resp = curl_exec($ch); $code = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); if ($resp !== false && $code === 200) { $tmp = json_decode((string)$resp, true); if (is_array($tmp)) { $claims = $tmp; } } } // Extraire rôles groupés (Keycloak) $roles = []; if (isset($claims['realm_access']['roles']) && is_array($claims['realm_access']['roles'])) { $roles = array_merge($roles, $claims['realm_access']['roles']); } if (isset($claims['resource_access']) && is_array($claims['resource_access'])) { foreach ($claims['resource_access'] as $clientId => $data) { if (!empty($data['roles']) && is_array($data['roles'])) { foreach ($data['roles'] as $r) { $roles[] = $clientId . ':' . $r; } } } } $roles = array_values(array_unique($roles)); ?>
= htmlspecialchars(maskToken($idToken)) ?>= htmlspecialchars(maskToken($accTok)) ?>= htmlspecialchars($idToken) ?>
= htmlspecialchars($accTok) ?>
= htmlspecialchars(json_encode($claims, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES)) ?>
callback remplit bien $_SESSION['oidc_userinfo'] ou que l’ID Token contient les champs.