Firefox più recente che crea problemi con URL SSO

Browser: Firefox 83.0 (64-bit)

SSO funziona correttamente in Chrome utilizzando lo script PHP trovato su questo forum, ma su Firefox aggiunge un == prima di &sig. Qualcuno sa cosa potrebbe causarlo?

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

Puoi condividere un link allo script PHP che stai usando?

Questa è una parte della stringa codificata in base64. Dovresti urlencode() prima di inviarla al client. Lo stai facendo? Puoi condividere il tuo codice?

Il codice è il seguente, grazie in anticipo

Ho modificato questo Discourse sso provider login · GitHub
Link al sito che lo utilizza e che presenta il problema su Firefox: https://vceliquidrecipes.com/

MODULO DI ACCESSO

<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">Accedi</a>&nbsp;&nbsp;<a class="btn btn-success" href="https://vapingcommunity.co.uk/signup" role="button">Registrati</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();
	}

Nel mio controller

$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']);

Funzione di accesso:

*IMPOSTA IL COOKIE E ESEGUE ALTRE OPERAZIONI VARIE COME CONTROLLI UTENTE*

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

Ok, tutto sembra a posto. E come sta causando un problema? Dato che penso dovrebbe funzionare comunque..

Bene, sono contento che tu l’abbia chiesto. Sembra che il login funzioni correttamente, ma quando si torna al sito, il menu utente non viene visualizzato; invece, sotto il link di navigazione ‘User’ appare di nuovo il pulsante di accesso.

Sto iniziando a chiedermi se sia un problema legato ai cookie, dato che funziona perfettamente in Chrome. È quasi come se il controllo ‘logged in’ venga ignorato al caricamento iniziale della pagina: un aggiornamento della pagina mostra tutti gli elementi di navigazione utente per un utente connesso. Voglio sottolineare che questo problema si verifica solo in Firefox.

Hmm, è davvero strano.

Tuttavia, penso che non abbia nulla a che fare con il fatto che == non venga mostrato codificato nell’URL. Quindi potresti essere sulla strada sbagliata qui.

Continuerò a provare finché non lo sistemerò e vi farò sapere quando sarà fatto, grazie per il vostro aiuto :smile: