Esempio di OIDC client scritto in PhP

A titolo di esempio proponiamo un esempio di client OIDC scritto in PhP. Il codice si avvale di una libreria che consente a un’applicazione di autenticare un utente tramite il flusso base di OpenID Connect.

Libreria: OpenID-Connect-PHP https://github.com/jumbojett/OpenID-Connect-PHP

Nel caso di questo esempio il redirect URL può essere la pagina stessa alla quale il client viene rediretto dal nostro OP dopo l'autenticazione.

<?php
require 'vendor/autoload.php';
use Jumbojett\OpenIDConnectClient;

$provider_url = "https://shibidp.unipr.it";
$client_id = "";
$client_secret = "";
$RedirectURL = "";

$oidc = new OpenIDConnectClient($provider_url,$client_id,$client_secret);
$oidc->setResponseTypes(['id_token']);
$oidc->setAllowImplicitFlow(true);
$oidc->setRedirectURL($RedirectURL);
$oidc->addScope(["openid","email","profile","spid"]);
$oidc->addAuthParam(['response_mode' => 'form_post']);
$auth = $oidc->authenticate();
$claims = $oidc->getVerifiedClaims();

if($auth && is_object($claims) && !empty(get_object_vars($claims))){
	echo "Utente autenticato";
	printObjectAsTable($claims);
	echo "<p>Parametro state inviato da request e ricevuto da response: " . $_REQUEST["state"]."</p>";
	echo "</br>";
	echo "<p>Parametro id_token non decodificato contenente i claims della tabella: ". $_REQUEST["id_token"]."</p>";
}
else {
	echo "Utente non autenticato";
}

function printObjectAsTable($obj) {
    echo "<p><table border='1' style='border-collapse: collapse;'>";
    echo "<tr><th>Key</th><th>Value</th></tr>";
    foreach ($obj as $key => $value) {
        echo "<tr><td>" . htmlspecialchars($key) . "</td><td>" . htmlspecialchars($value) . "</td></tr>";
    }
    echo "</table></p>";
}

?>

Output della pagina a titolo di esempio: