Moins coder c'est mieux. Et pourquoi pas ?

Et pourquoi pas s'Ă©viter de coder une page de login complĂšte, les tables relationnelles qui vont avec et bien sĂ»r la page de crĂ©ation de compte avec tous les champs d'utilisateurs habituels ? Et par lĂ  mĂȘme Ă©viter les contrĂŽles formels mĂȘme si ça s'est arrangĂ© avec les champs formatĂ©s ?

OAuth Authorizations, c'est justement se reposer sur le signup/sign in des autres. On peut se connecter aux serveurs des GAFAM, je préfÚre Github, bien qu'il ait été racheté par Microsoft. L'idée, c'est donc moins de code, mais aussi aucun stockage des données sensibles à commencer par le mot de passe de l'utilisateur. En temps normal on le stocke en base, en clair (pas bien) ou en chiffré (md5, sha256, salt, etc).

Voici en PHP un script complet avec les 3 Ă©tapes attendues :


//get request , either code from github, or login request
if($_SERVER['REQUEST_METHOD'] == 'GET')
{
//authorised at github
if(isset($_GET['code']))
{
//2. Users are redirected back to your site by GitHub
$ch = curl_init();

//exemple de user_agent : User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1521.3 Safari/537.36'

curl_setopt($ch, CURLOPT_URL, 'https://github.com/login/oauth/access_token');
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accept: application/json', 'User-Agent: PHP'));
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, array('client_id' => GITHUB_client_id, 'client_secret' => GITHUB_your_client_secret, 'code' => $_GET['code']));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
if (curl_errno($ch)) die('erreur github : ' . curl_error($ch));
$token_data = json_decode($response , true);

//3. Use the access token to access the API
curl_setopt($ch, CURLOPT_URL, 'https://api.github.com/user');
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: token ' . $token_data['access_token'], 'User-Agent: PHP'));
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
if (curl_errno($ch)) die('erreur github : ' . curl_error($ch));
curl_close($ch);
$user_data = json_decode($response , true);

//FAIRE ici les enregistrements (session, cookie) ou redirections car on est autorisés
//Utilisez $user_data['login'], $user_data['email'], etc
exit();
}
else
{
//1. Request a user's GitHub identity
//demande des données du user en lecture seule
header('Location: https://github.com/login/oauth/authorize?client_id=' . GITHUB_client_id . '&redirect_uri=' . GITHUB_redirect_url . '&scope=read:user');
}
}


Quelques liens intéressants :

- la doc Github pour se connecter avec Oauth app
- des explications en français sur Curl
- le manuel Curl en PHP
- La dépréciation de certaines connexion chez Github