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
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';
|
|
}
|
|
}
|
|
}
|
|
?>
|
|
|