Cara mengikis e-mel menggunakan pengesahan azure dan pengekodan php
P粉786800174
2023-09-05 14:58:32
<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;
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. p>Contoh kod untuk mendapatkan token akses menggunakan kelayakan pelanggan.
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.
Lihat MSDoc1 dan MSDoc2 untuk butiran.