Último Firefox interfiriendo con la URL de SSO

Navegador: Firefox 83.0 (64 bits)

El SSO funciona correctamente en Chrome usando el script PHP que se encuentra en este foro, pero en Firefox se añade un == antes de &sig. ¿Alguien sabe qué podría causar eso?

session/sso_provider?sso=bm9uY2U9MmE4YmE2NmE0ZmRmYjRlM2JmNGJmMDkzNTliZjg3MWVlZDhkMTIzNTRiMzc4OGQyNTAwYzY3NjBiZjEwNWMyNmYzMTUxNmE4NTc0NDdjNzE0YmRkYTM4MTljMmFjOTA5NmY0MDkyNWQ5NWIwOTFkMDVmM2QzZDIyZDhmYTdiMzYmcmV0dXJuX3Nzb191cmw9aHR0cHMlM0ElMkYlMkZ2Y2VsaXF1aWRyZWNpcGVzLmNvbSUyRmNvbnRyb2xsZXJzJTJGbG9naW5Db250cm9sLnBocA==&sig=261ee2477e94edcbcc1513e248091860445ed2c2cc8f30835a1fd061ff0

¿Podrías compartir un enlace al script PHP que estás utilizando?

Esa es una parte de la cadena codificada en base64. Deberías usar urlencode() antes de enviarla al cliente. ¿Lo estás haciendo? ¿Puedes compartir tu código?

El código es el siguiente, gracias de antemano

He modificado esto Discourse sso provider login · GitHub
Enlace al sitio que lo utiliza y que presenta el problema en Firefox: https://vceliquidrecipes.com/

FORMULARIO DE INICIO DE SESIÓN

<div class="row mt-1">
<div class="col-md-12 d-flex justify-content-center">
<p><a class="btn btn-success" href="'.$discourse_url.'/session/sso_provider?'.$query.'" role="button">Iniciar sesión</a>&nbsp;&nbsp;<a class="btn btn-success" href="https://vapingcommunity.co.uk/signup" role="button">Registrarse</a></p>
</div>
</div>

$sso_secret = 'ITSASECRET';
$discourse_url = 'https://vapingcommunity.co.uk';

$nonce = hash('sha512', mt_rand());
$_SESSION['nonce'] = $nonce;

$payload =  base64_encode( http_build_query( array (
	'nonce' => $nonce,
	'return_sso_url' => $me
	)
) );

$request = array(
	'sso' => $payload,
	'sig' => hash_hmac('sha256', $payload, $sso_secret )
	);

$query = http_build_query($request);


if(!empty($_GET) and isset($_GET['sso'])){
	$sso_secret = 'ITSASECRET';
	if(isset($_SESSION['loggedin']) && isset($_SESSION['username']) && $_SESSION['loggedin'] == true){
		header("location: /");
		die();
	}
	
	$sso = $_GET['sso'];
	$sig = $_GET['sig'];

	if(hash_hmac('sha256', urldecode($sso), $sso_secret) !== $sig){
		header("HTTP/1.1 404 Not Found");
		die();
	}

En mi controlador

$sso = urldecode($sso);
$query = array();
parse_str(base64_decode($sso), $query);

$username = $query['username'];
$useremail = $query['email'];
if(!empty($query['avatar_url'])) {
	$avatar_url = $query['avatar_url'];
}
else {
	$avatar_url = $miscf->fullURL().'/images/defaultAvatar.png';
}
$userisadmin = $query['admin'];
$userismoderator = $query['moderator'];
$usergroup = $query['groups'];
$externalid = $query['external_id'];
if ($userf->checkUserEIDExists($externalid) == false) {
	$userf->addUser($username,$useremail,$avatar_url,$userisadmin,$userismoderator,$usergroup,$externalid);
}


$nonce = $_SESSION['nonce'];
if($query['nonce'] != $nonce){
    header("HTTP/1.1 404 Not Found");
    die();
}

$userf->loginUser($query['username'],$query['external_id'],$avatar_url,$query['groups']);

Función de inicio de sesión:

*ESTABLECE LA COOKIE, REALIZA OTROS PROCEDIMIENTOS DIVERSOS COMO VERIFICACIONES DE USUARIO*

*TERMINA CON ESTO*
if(isset($_SESSION['url'])) 
	   $url = $_SESSION['url']; 
	else 
	   $url = ""; 
    $miscf = new miscf();
	$fullurl = $miscf->fullURL().$url;
	header("Location:".$fullurl); 
	unset($_SESSION['url']);
    die();

Ok, todo eso parece bien. ¿Y cómo está causando un problema? Ya que creo que debería funcionar de todos modos..

Bueno, me alegra que lo hayas preguntado. Parece que el inicio de sesión funciona correctamente, pero al volver al sitio, no aparece el menú de usuario; en su lugar, se muestra nuevamente el botón de inicio de sesión bajo el enlace de navegación ‘Usuario’.

Empiezo a preguntarme si tiene algo que ver con las cookies, ya que funciona perfectamente en Chrome. Es como si la verificación de ‘sesión iniciada’ se ignorara en la carga inicial de la página; una actualización muestra todos los elementos de navegación del usuario para una sesión iniciada. Quiero recalcar que esto solo ocurre en Firefox.

Hmm, eso es realmente muy extraño.

Sin embargo, creo que esto no tiene nada que ver con el hecho de que el == no se muestre codificado en la URL. Así que podrías estar en el camino equivocado aquí.

Seguiré intentándolo hasta solucionarlo y te avisaré cuando lo haga. ¡Gracias por tu ayuda! :smile: