Azure 認証と PHP エンコーディングを使用してメールをスクレイピングする方法
P粉786800174
2023-09-05 14:58:32
<p>メール ID から受信トレイメールを取得するアプリケーションを PHP で作成しましたが、正常に動作しています。これはベーシック認証アプリケーションです。最近基本認証が停止されたため、新しい認証を取得するために Azure にアカウントを作成し、それに基づいてメールをスクレイピングしたいと考えています。 </p>
<p>アプリケーション ID とシークレット ID を使用してコードを作成しました。
ページを開くとログインページにリダイレクトされますが、それが問題です。
自動的にログインしてメールを取得するために必要です。
これは cron プロセスであるため、ログインを入力する必要があるたびに電子メールを取得することは解決策ではありません。 </p>
<p>https://xxxx.co/projects/test.php?action=login
このリンクを開くと、ログインを求められます。アプリケーション ID、シークレット ID、テナント ID などのすべてのデータはすでに配置されているため、これは望ましくありません。 </p>
<p>すでに Microsoft にログインしている場合、ログインは要求されず、電子メール経由でページが取得されます。しかし、シークレットモードで開くと、ログインを求められます。我们どのように删除它并直接获取電子邮件</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['状態']=セッションID();
echo "
MS OAuth2.0 デモ
";
if (isset ($_SESSION['msatg'])){
echo " 認証済み ".$_SESSION["uname"]." </h2><br> ";
echo '<p><a href="?action=logout">ログアウト</a></p>';
} //セッションの場合は終了
else echo '<h2><p><a href="?action=login">ログイン</a>できます。 Microsoft</p></h2>';
if ($_GET['アクション'] == 'ログイン'){
$params = 配列 ('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("#");
if(i>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 ('Authorization: Bearer '.$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 ('error', $rez)){
var_dump ($rez['error']);
死ぬ();
}
それ以外 {
$_SESSION['msatg'] = 1; //認証および検証済み
$_SESSION['uname'] = $rez["表示名"];
$_SESSION['id'] = $rez["id"];
}
カール_クローズ ($ch);
ヘッダー ('場所: https://xxxx.co/projects/test.php');
}
if ($_GET['アクション'] == 'ログアウト'){
設定を解除します ($_SESSION['msatg']);
ヘッダー ('場所: https://xxxx.co/projects/test.php');
}</pre>
<p>このコードを開くと、登録が必要になります。これは望ましくありません。php を使用して電子ファイルを直接取得します</p>
OAuth 2.0 認可
ご質問の件ですが、ログインしていないときにログインページが表示される場合があります。この問題を解決するには、認証コードの代わりにを使用してユーザーを認証し、アクセス トークンを取得します。そして、これを使用して
Microsoft Graph APIを呼び出し、ユーザーの電子メールを取得します。
OAuth 2.0 クライアント資格情報
を使用する必要があります。
p>クライアント資格情報を使用してアクセス トークンを取得するサンプル コード。リーリー
アクセス トークンを取得したら、それを使用してMicrosoft Graph API
ユーザーの電子メールを取得するサンプル コード。を呼び出し、ユーザーの電子メールを取得できます。
リーリー
詳細については、MSDoc1 および MSDoc2 を参照してください。