Dernière version de Firefox interférant avec l'URL SSO

Navigateur : Firefox 83.0 (64 bits)

Le SSO fonctionne parfaitement dans Chrome avec le script PHP trouvé sur ce forum, mais dans Firefox, il ajoute un == avant &sig. Quelqu’un sait ce qui pourrait causer cela ?

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

Pourriez-vous partager un lien vers le script PHP que vous utilisez ?

Ceci fait partie d’une chaîne encodée en base64. Vous devriez l’encoder avec urlencode() avant de l’envoyer au client. Est-ce que vous le faites ? Pouvez-vous partager votre code ?

Le code est le suivant, merci d’avance

J’ai modifié ceci Discourse sso provider login · GitHub
Lien vers le site l’utilisant et présentant le problème dans Firefox : https://vceliquidrecipes.com/

FORMULAIRE DE CONNEXION

<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">Se connecter</a>&nbsp;&nbsp;<a class="btn btn-success" href="https://vapingcommunity.co.uk/signup" role="button">S'inscrire</a></p>
</div>
</div>

$sso_secret = 'C'ESTUNSECRET';
$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 = 'C'ESTUNSECRET';
	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();
	}

Dans mon contrôleur

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

Fonction de connexion :

*DÉFINIT LE COOKIE, EFFECTUE D'AUTRES TÂCHES DIVERSES COMME DES VÉRIFICATIONS UTILISATEUR*

*SE TERMINE PAR CETTE PARTIE*
if(isset($_SESSION['url'])) 
	   $url = $_SESSION['url']; 
	else 
	   $url = ""; 
    $miscf = new miscf();
	$fullurl = $miscf->fullURL().$url;
	header("Location:".$fullurl); 
	unset($_SESSION['url']);
    die();

Ok, tout cela semble correct. Et comment cela cause-t-il un problème ? Puisque je pense que cela devrait fonctionner de toute façon..

Eh bien, je suis content que vous ayez posé la question. Il semble que la connexion fonctionne correctement, mais une fois revenu sur le site, le menu utilisateur n’apparaît pas ; seul le bouton de connexion s’affiche à nouveau sous le lien de navigation « Utilisateur ».

Je commence à me demander si cela est lié aux cookies, car cela fonctionne parfaitement dans Chrome. C’est presque comme si la vérification « connecté » était ignorée lors du chargement initial de la page ; un rafraîchissement affiche tous les éléments de navigation utilisateur pour un utilisateur connecté. Je tiens à souligner que cela ne se produit que dans Firefox.

Hmm, c’est vraiment très étrange.

Cependant, je pense que cela n’a rien à voir avec le fait que le == n’est pas affiché encodé en URL. Vous êtes peut-être sur la mauvaise piste ici.

Je continuerai d’essayer jusqu’à ce que je trouve une solution et je vous tiendrai au courant une fois fait. Merci pour votre aide :smile: