搜索

首页  >  问答  >  正文

如何使用 azure 身份验证和 php 编码抓取电子邮件

<p>我们有一个用 PHP 编写的应用程序,用于从电子邮件 ID 中获取收件箱电子邮件,该应用程序运行良好。这是一个基本的身份验证应用程序。最近他们已经停止了基本身份验证,因此我们在 Azure 上创建了一个帐户来获得新的身份验证,并基于此我们想要抓取电子邮件。</p> <p>我们已经使用应用程序 ID 和秘密 ID 创建了一个代码。 当我们打开页面时,它会重定向到登录页面,这就是问题所在。 我们需要它自动登录并抓取电子邮件。 这是一个 cron 进程,因此每次我们需要输入登录时,抓取电子邮件并不是解决方案。</p> <p>https://xxxx.co/projects/test.php?action=login 当我们打开此链接时,它会要求登录。我们不希望这样,因为我们已经放置了应用程序 ID、秘密 ID 和租户 ID 等所有数据。</p> <p>如果我们已经登录微软,那么它不会要求登录,而是通过电子邮件抓取页面。但是当我们以隐身模式打开时,它会要求登录。我们如何删除它并直接获取电子邮件</p>
MS OAuth2.0 演示
"; if (isset ($_SESSION['msatg'])){ echo "

已验证".$_SESSION["uname"]." </h2><br> ”; echo '<p><a href="?action=logout">注销</a></p>'; } //如果会话结束 else echo '

您可以登录与 Microsoft</p></h2>'; if ($_GET['操作'] == '登录'){ $params = array ('client_id' => $appid, 'redirect_uri' => 'https://xxx.co/projects/test.php', 'response_type' => '令牌', '范围' => 'https://graph.microsoft.com/User.Read', '状态' => $_SESSION['状态']); header('位置:'.$login_url.'?'.http_build_query($params)); } 回声' <脚本> url = window.location.href; i=url.indexOf(“#”); 如果(我> 0){ url=url.replace("#","?"); window.location.href=url;} </脚本> '; if (array_key_exists ('access_token', $_GET)) { $_SESSION['t'] = $_GET['access_token']; $t = $_SESSION['t']; $ch=curl_init(); curl_setopt($ch, CURLOPT_HTTPHEADER, array('授权:承载'.$t, '内容类型: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 ('错误', $rez)){ var_dump($rez['错误']); 死(); } 别的 { $_SESSION['msatg'] = 1; //授权并验证 $_SESSION['uname'] = $rez['displayName']; $_SESSION['id'] = $rez['id']; } 卷曲关闭($ch); header('位置:https://xxxx.co/projects/test.php'); } if ($_GET['action'] == '注销'){ 取消设置($_SESSION['msatg']); header('位置:https://xxxx.co/projects/test.php'); }</pre> <p>当我们打开此代码时,它会要求登录。我们不希望这样。将使用 php 直接提取电子邮件</p>

P粉786800174P粉786800174463 天前655

全部回复(1)我来回复

  • 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

    回复
    0
  • 取消回复