Comment récupérer des e-mails à l'aide de l'authentification Azure et de l'encodage PHP
P粉786800174
2023-09-05 14:58:32
<p>Nous avons une application écrite en PHP pour récupérer les e-mails de la boîte de réception à partir de l'identifiant de messagerie, qui fonctionne correctement. Il s'agit d'une application d'authentification de base. Récemment, ils ont arrêté l'authentification de base. Nous avons donc créé un compte sur Azure pour obtenir une nouvelle authentification et, sur cette base, nous souhaitons supprimer les e-mails. </p>
<p>Nous avons créé un code en utilisant l'ID d'application et l'ID secret.
Lorsque nous ouvrons la page, elle redirige vers la page de connexion et c'est le problème.
Nous en avons besoin pour nous connecter automatiquement et récupérer les e-mails.
Il s'agit d'un processus cron, donc récupérer l'e-mail à chaque fois que nous devons saisir un identifiant n'est pas une solution. </p>
<p>https://xxxx.co/projects/test.php?action=login
Lorsque nous ouvrirons ce lien, il nous demandera de nous connecter. Nous ne voulons pas cela car nous avons déjà placé toutes les données telles que l'ID d'application, l'ID secret et l'ID de locataire. </p>
<p>Si nous sommes déjà connectés à Microsoft, il ne demandera pas de connexion mais récupérera la page par e-mail. Mais lorsque nous l'ouvrons en mode navigation privée, il demande une connexion.我们如何删除它并直接获取电子邮件</p>
<pre class="brush:php;toolbar:false;"><?php
$appid = "xxxxx" ;
$tennantid = "xxxxx";
$secret = "xxxxxx" ;
$login_url ="https://login.microsoftonline.com/".$tennantid."/oauth2/v2.0/authorize";
session_start ();
$_SESSION['state']=session_id();
echo "<h1>Démo MS OAuth2.0 </h1><br>";
if (isset ($_SESSION['msatg'])){
echo "<h2>Authentifié ".$_SESSION["uname"]." </h2><br> " ;
echo '<p><a href="?action=logout">Déconnexion</a></p>';
} //fin si session
else echo '<h2><p>Vous pouvez <a href="?action=login">Connexion</a> avec Microsoft</p></h2>';
si ($_GET['action'] == 'connexion'){
$params = tableau ('client_id' =>$appid,
'redirect_uri' =>'https://xxx.co/projects/test.php',
'response_type' =>'jeton',
'scope' =>'https://graph.microsoft.com/User.Read',
'état' =>$_SESSION['état']);
en-tête ('Emplacement : '.$login_url.'?'.http_build_query ($params));
}
écho '
<script> url = fenêtre.emplacement.href;
i=url.indexOf("#");
si (je> 0) {
url=url.replace("#","?");
window.location.href=url;}
</script>
';
if (array_key_exists ('access_token', $_GET))
{
$_SESSION['t'] = $_GET['access_token'];
$t = $_SESSION['t'];
$ch = curl_init ();
curl_setopt ($ch, CURLOPT_HTTPHEADER, tableau ('Autorisation : Porteur '.$t,
'Type de contenu : application/json'));
curl_setopt ($ch, CURLOPT_URL, "https://graph.microsoft.com/v1.0/me/");
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
$rez = json_decode (curl_exec ($ch), 1);
if (array_key_exists ("erreur", $rez)){
var_dump ($rez['erreur']);
mourir();
}
autre {
$_SESSION['msatg'] = 1; //authentifié et vérifié
$_SESSION['uname'] = $rez["displayName"];
$_SESSION['id'] = $rez["id"];
}
curl_close ($ch);
en-tête ('Emplacement : https://xxxx.co/projects/test.php');
}
si ($_GET['action'] == 'déconnexion'){
unset ($_SESSION['msatg']);
en-tête ('Emplacement : https://xxxx.co/projects/test.php');
}</pré>
<p> t ;
Utilisez
OAuth 2.0授权
对用户进行身份验证并获取访问令牌。并使用它调用Microsoft Graph API
pour récupérer l'e-mail de l'utilisateur.Pour votre question, la page de connexion peut apparaître lorsque vous n'êtes pas connecté. Pour résoudre ce problème, vous devez utiliser
OAuth 2.0 客户端凭据
au lieu du code d'autorisation. p>Exemple de code pour obtenir un jeton d'accès à l'aide des informations d'identification du client.
Après avoir obtenu le jeton d'accès, vous pouvez l'utiliser pour appeler
Microsoft Graph API
et récupérer l'e-mail de l'utilisateur.Exemple de code pour récupérer l'e-mail de l'utilisateur.
Voir MSDoc1 et MSDoc2 pour plus de détails.