You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

104 lines
3.1 KiB

<?php
use Firebase\JWT\JWT;
use Firebase\JWT\Key;
class AuthController {
// Clé secrète pour signer le JWT
private $secretKey = 'VOTRE_SECRET_CLE';
// Liste des URLs autorisées pour le SSO
private $allowedUrls = [
'https://masterclass.c4m.mg',
'https://masterclass.c4m.mg//',
'https://masterclass.c4m.mg//first_confirmation',
];
// Endpoint de connexion SSO
public function login() {
// Récupérer l'URL de redirection de la requête
$redirectUri = $_GET['redirect_uri'] ?? '';
// Vérifier que l'URL de redirection est autorisée
if (!$this->isAllowedUrl($redirectUri)) {
die("Accès non autorisé : l'URL de redirection n'est pas approuvée.");
}
// Procéder à l'authentification (ex : vérifiez les identifiants de l'utilisateur ici)
$userId = 123; // ID utilisateur récupéré après authentification
$email = 'user@example.com'; // Email de l'utilisateur
// Générer le token JWT pour l'utilisateur authentifié
$token = $this->generateToken($userId, $email);
// Rediriger vers la plateforme de cours avec le token
header("Location: $redirectUri?token=" . urlencode($token));
exit;
}
// Vérifie si l'URL est dans la liste des URLs autorisées
private function isAllowedUrl($redirectUri) {
foreach ($this->allowedUrls as $allowedUrl) {
if (strpos($redirectUri, $allowedUrl) === 0) {
return true;
}
}
return false;
}
// Génération du token JWT
private function generateToken($userId, $email) {
$issuedAt = time();
$expirationTime = $issuedAt + 3600; // Jeton valide pour 1 heure
$payload = [
'iat' => $issuedAt,
'exp' => $expirationTime,
'sub' => $userId,
'email' => $email,
];
return JWT::encode($payload, $this->secretKey, 'HS256');
}
// Endpoint pour valider le token
public function validateToken() {
$headers = getallheaders();
$token = $headers['Authorization'] ?? '';
if ($this->decodeToken($token)) {
echo 'valid';
} else {
http_response_code(401);
echo 'invalid';
}
}
// Décodage et validation du token
private function decodeToken($jwt) {
try {
return JWT::decode($jwt, new Key($this->secretKey, 'HS256'));
} catch (Exception $e) {
return null;
}
}
// Endpoint pour récupérer les informations utilisateur
public function userInfo() {
$headers = getallheaders();
$token = $headers['Authorization'] ?? '';
$decodedToken = $this->decodeToken($token);
if ($decodedToken) {
echo json_encode([
'id' => $decodedToken->sub,
'email' => $decodedToken->email,
'name' => 'Nom Utilisateur', // Ajouter d'autres infos si nécessaire
]);
} else {
http_response_code(401);
echo 'Unauthorized';
}
}
}
?>