Neuestes Firefox beeinträchtigt SSO-URL

Browser: Firefox 83.0 (64-bit)

Die SSO-Funktion funktioniert in Chrome mit dem PHP-Skript aus diesem Forum einwandfrei, aber in Firefox wird vor &sig ein == hinzugefügt. Weiß jemand, was das verursachen könnte?

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

Könntest du einen Link zu dem PHP-Skript teilen, das du verwendest?

Das ist ein Teil des base64-kodierten Strings. Du solltest ihn mit urlencode() kodieren, bevor du ihn an den Client sendest. Machst du das? Kannst du deinen Code teilen?

Der Code lautet wie folgt, vielen Dank im Voraus

Ich habe dies modifiziert Discourse sso provider login · GitHub
Link zur Seite, die dies verwendet und das Problem in Firefox aufweist: https://vceliquidrecipes.com/

ANMELDEFORMULAR

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

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

Anmelfunktion:

*SETZT COOKIES, FÜHRT SONSTIGE UNTERSCHEIDLICHE SACHEN WIE BENUTZERPRÜFUNGEN AUS*

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

Ok, das sieht alles gut aus. Und wie verursacht das ein Problem? Da ich denke, dass es trotzdem funktionieren sollte..

Nun, ich freue mich, dass Sie danach gefragt haben. Es scheint, dass die Anmeldung funktioniert, aber sobald man zurück auf der Seite ist, wird das Benutzer-Menü nicht angezeigt. Stattdessen erscheint unter dem Menüpunkt „Benutzer

Hmm, das ist tatsächlich sehr seltsam.

Ich denke jedoch, das hat nichts damit zu tun, dass das == nicht URL-kodiert angezeigt wird. Du bist hier also möglicherweise auf dem falschen Weg.

Ich werde weiter versuchen, es zu beheben, und mich melden, sobald es geklappt hat. Danke für deine Hilfe :smile: