recherche

Maison  >  Questions et réponses  >  le corps du texte

Comment récupérer des e-mails à l'aide de l'authentification Azure et de l'encodage PHP

<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 ;
P粉786800174P粉786800174456 Il y a quelques jours650

répondre à tous(1)je répondrai

  • P粉426780515

    P粉4267805152023-09-06 00:58:31

    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.

    Exemple de code pour obtenir un jeton d'accès à l'aide des informations d'identification du client.

    $tenantId = 'your-tenant-id';
    $client_id = 'your-client-id';
    $client_secret = 'your-client-secret';
    $resource = 'https://graph.microsoft.com';
    $tokenEndpoint = 'https://login.microsoftonline.com/' . $tenantId . '/oauth2/token';
    
    $data = array(
        'grant_type' => 'client_credentials',
        'client_id' => $client_id,
        'client_secret' => $client_secret,
        'resource' => $resource
    );
    
    $options = array(
        'http' => array(
            'header' => "Content-type: application/x-www-form-urlencoded\r\n",
            'method' => 'POST',
            'content' => http_build_query($data)
        )
    );
    
    $context = stream_context_create($options);
    $result = file_get_contents($tokenEndpoint, false, $context);
    $token = json_decode($result)->access_token;
    
    

    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.

    php
    $graphApiEndpoint = 'https://graph.microsoft.com/v1.0/me/messages';
    $options = array(
        'http' => array(
            'header' => "Authorization: Bearer $token\r\n" .
                        "Content-type: application/json\r\n",
            'method' => 'GET'
        )
    );
    
    $context = stream_context_create($options);
    $result = file_get_contents($graphApiEndpoint, false, $context);
    $messages = json_decode($result)->value;

    Voir MSDoc1 et MSDoc2 pour plus de détails.

    répondre
    0
  • Annulerrépondre