suchen

Heim  >  Fragen und Antworten  >  Hauptteil

So entfernen Sie E-Mails mithilfe der Azure-Authentifizierung und PHP-Codierung

<p>Wir haben eine in PHP geschriebene Anwendung, um Posteingangs-E-Mails von der E-Mail-ID abzurufen, die einwandfrei funktioniert. Dies ist eine einfache Authentifizierungsanwendung. Vor Kurzem haben sie die Standardauthentifizierung eingestellt, daher haben wir ein Konto bei Azure erstellt, um eine neue Authentifizierung zu erhalten, und auf dieser Grundlage möchten wir E-Mails löschen. </p> <p>Wir haben einen Code erstellt, der die Anwendungs-ID und die Geheim-ID verwendet. Wenn wir die Seite öffnen, wird sie zur Anmeldeseite weitergeleitet, und das ist das Problem. Wir benötigen es, um uns automatisch anzumelden und E-Mails abzurufen. Da es sich hierbei um einen Cron-Prozess handelt, ist es keine Lösung, jedes Mal die E-Mail abzurufen, wenn wir einen Login eingeben müssen. </p> <p>https://xxxx.co/projects/test.php?action=login Wenn wir diesen Link öffnen, werden wir zur Anmeldung aufgefordert. Das möchten wir nicht, da wir bereits alle Daten wie Anwendungs-ID, Geheim-ID und Mandanten-ID hinterlegt haben. </p> <p>Wenn wir bereits bei Microsoft angemeldet sind, wird nicht nach einer Anmeldung gefragt, sondern die Seite wird per E-Mail aufgerufen. Wenn wir es jedoch im Inkognito-Modus öffnen, werden wir zur Anmeldung aufgefordert.我们如何删除它并直接获取电子邮件</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>MS OAuth2.0 Demo </h1><br>"; if (isset ($_SESSION['msatg'])){ echo "<h2>Authentifiziert ".$_SESSION["uname"]." </h2><br> "; echo '<p><a href="?action=logout">Abmelden</a></p>'; } //Ende der Sitzung else echo '<h2><p>Sie können <a href="?action=login">Anmelden</a> mit Microsoft</p></h2>'; if ($_GET['action'] == 'login'){ $params = array ('client_id' =>$appid, 'redirect_uri' =>'https://xxx.co/projects/test.php', 'response_type' =>'token', 'scope' =>'https://graph.microsoft.com/User.Read', 'state' =>$_SESSION['state']); header ('Standort: '.$login_url.'?'.http_build_query ($params)); } Echo ' <script> url = window.location.href; i=url.indexOf("#"); if(i>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, array ('Authorization: Bearer '.$t, 'Inhaltstyp: 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 ('error', $rez)){ var_dump ($rez['error']); sterben(); } anders { $_SESSION['msatg'] = 1; //auth und verifiziert $_SESSION['uname'] = $rez["displayName"]; $_SESSION['id'] = $rez["id"]; } curl_close ($ch); Header („Standort: https://xxxx.co/projects/test.php“); } if ($_GET['action'] == 'logout'){ unset ($_SESSION['msatg']); Header („Standort: https://xxxx.co/projects/test.php“); }</pre> <p>当我们打开此代码时,它会要求登录。我们不希望这样。它将使用 php ;
P粉786800174P粉786800174455 Tage vor644

Antworte allen(1)Ich werde antworten

  • P粉426780515

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

    使用OAuth 2.0授权对用户进行身份验证并获取访问令牌。并使用它调用 Microsoft Graph API 来检索用户的电子邮件。

    对于您的问题,在您未登录时可能会出现登录页面。要解决此问题,您需要使用 OAuth 2.0 客户端凭据 而不是授权代码。

    使用客户端凭据获取访问令牌的示例代码。

    $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;
    
    

    获取访问令牌后,您可以使用它来调用 Microsoft Graph API 并检索用户的电子邮件。

    检索用户电子邮件的示例代码。

    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;

    有关详细信息,请参阅 MSDoc1 MSDoc2

    Antwort
    0
  • StornierenAntwort