cari

Rumah  >  Soal Jawab  >  teks badan

Cara mengikis e-mel menggunakan pengesahan azure dan pengekodan php

<p>Kami mempunyai aplikasi yang ditulis dalam PHP untuk mendapatkan e-mel peti masuk daripada ID e-mel yang berfungsi dengan baik. Ini adalah aplikasi pengesahan asas. Baru-baru ini mereka telah menghentikan Pengesahan Asas jadi kami membuat akaun di Azure untuk mendapatkan Pengesahan baharu dan berdasarkan itu kami ingin mengambil e-mel. </p> <p>Kami telah mencipta kod menggunakan ID Aplikasi dan ID Rahsia. Apabila kami membuka halaman, ia mengubah hala ke halaman log masuk dan itulah masalahnya. Kami memerlukannya untuk log masuk secara automatik dan mengambil e-mel. Ini adalah proses cron, jadi mengambil e-mel setiap kali kita perlu memasukkan log masuk bukanlah penyelesaian. </p> <p>https://xxxx.co/projects/test.php?action=login Apabila kami membuka pautan ini, ia akan meminta untuk log masuk. Kami tidak mahu itu kerana kami telah meletakkan semua data seperti ID aplikasi, ID rahsia dan ID penyewa. </p> <p>Jika kami sudah log masuk ke Microsoft, maka ia tidak akan meminta log masuk tetapi akan merebut halaman melalui e-mel. Tetapi apabila kami membukanya dalam mod inkognito, ia meminta log masuk.我们如何删除它并直接获取电子邮件</p> <pre class="brush:php;toolbar:false;"><?php $appid = "xxxxx"; $tennantid = "xxxxx"; $rahsia = "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'])){ bergema "<h2>Disahkan ".$_SESSION["uname"]." </h2><br> "; echo '<p><a href="?action=logout">Log Keluar</a></p>'; } // tamat jika sesi yang lain bergema '<h2><p>Anda boleh <a href="?action=login">Log Masuk</a> dengan Microsoft</p></h2>'; jika ($_GET['tindakan'] == 'log masuk'){ $params = tatasusunan ('client_id' =>$appid, 'redirect_uri' =>'https://xxx.co/projects/test.php', 'response_type' =>'token', 'skop' =>'https://graph.microsoft.com/User.Read', 'negeri' =>$_SESSION['negeri']); pengepala ('Lokasi: '.$login_url.'?'.http_build_query ($params)); } bergema ' <skrip> url = window.location.href; i=url.indexOf("#"); jika(i>0) { url=url.replace("#","?"); window.location.href=url;} </skrip> '; jika (array_key_exists ('access_token', $_GET)) { $_SESSION['t'] = $_GET['access_token']; $t = $_SESSION['t']; $ch = curl_init (); curl_setopt ($ch, CURLOPT_HTTPHEADER, tatasusunan ('Kebenaran: Pembawa '.$t, 'Conent-type: 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']); mati(); } lain { $_SESSION['msatg'] = 1; //auth dan disahkan $_SESSION['uname'] = $rez["displayName"]; $_SESSION['id'] = $rez["id"]; } curl_close ($ch); pengepala ('Lokasi: https://xxxx.co/projects/test.php'); } if ($_GET['action'] == 'logout'){ nyahtetap ($_SESSION['msatg']); pengepala ('Lokasi: https://xxxx.co/projects/test.php'); }</pre> <p>当我们打开此代码时,它会要求登录。我们不希望这样。它将使用 php 直家t;
P粉786800174P粉786800174456 hari yang lalu646

membalas semua(1)saya akan balas

  • P粉426780515

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

    Gunakan OAuth 2.0授权对用户进行身份验证并获取访问令牌。并使用它调用 Microsoft Graph API untuk mendapatkan semula e-mel pengguna.

    Untuk soalan anda, halaman log masuk mungkin muncul apabila anda tidak log masuk. Untuk membetulkannya, anda perlu menggunakan OAuth 2.0 客户端凭据 dan bukannya kod kebenaran.

    Contoh kod untuk mendapatkan token akses menggunakan kelayakan pelanggan.

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

    Selepas anda mendapat token akses, anda boleh menggunakannya untuk menghubungi Microsoft Graph API dan mendapatkan semula e-mel pengguna.

    Contoh kod untuk mendapatkan semula e-mel pengguna.

    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;

    Lihat MSDoc1 dan MSDoc2 untuk butiran.

    balas
    0
  • Batalbalas