本帖最后由 小房同学 于 2025-1-19 15:28 编辑
前言:
自从微软更新了之后,直接使用账号密码验证的方式失效了,现在要用Oauth2.0验证,研究了一天,前面在论坛上搜了相关的帖子,发现有的 易友 发了相关的模块,也有的发了成品的软件,想下载研究一下,发现链接失效了。请问,你发帖的意义是何在?引流贴?这些都解决不了我刨根问底的心理,其实真的没有那么难!发这个贴子也是跟大家交流技术 禁止使用一切违法违规的行为哦~~~
二:这是我创建的应用信息
这里要注意
1.创建应用的时候,权限不要选择 仅Microsoft个人账号权限,我个人测试的是拿不到Token,大家也可以自行测试。
2.重定向URL不要填写带有https的网址,会有不安全提示,最好是填写http://localhost:端口号/
三:建立获取令牌请求链接
https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=客户DuanID&scope=https://outlook.office.com/SMTP.Send%20offline_access%20email%20openid&redirect_uri=重定向URL&response_type=code&prompt=login
这里我用互联网浏览器支持库2.0进行浏览的这个页面 登陆授权后 会像重定向的URL 发送一个code的参数。
具体是 http:127.0.0.1/?code=auth_code 这里的auth_code 就是授权拿到的令牌,我用E2EE支持库进行了接收。
这个是我的易语言代码:
四:建立链接拿Access_token
POST请求
url:https://login.microsoftonline.com/common/oauth2/v2.0/token
提交参数:“code=” + 授权拿到的令牌 + “&client_id=客户Duan的ID&redirect_uri=重定向URL/&grant_type=authorization_code&client_secret=客户Duan的密码”
这里要注意:客户Duan的密码不要泄露,可以写一个php的接口进行调用
在使用微软 OAuth2 等认证机制时,client_secret是非常重要的安全凭证,如果client_secret暴露了,可能会导致以下严重后果:
身份验证和授权方面
令牌被盗用:client_secret与client_id一起用于获取访问令牌。攻击者获取client_secret后,就可以冒充合法客户Duan向认证服务器请求令牌。一旦获取到令牌,攻击者就能以合法用户或应用的身份访问受保护的资源,例如访问用户的邮件、文件、企业数据等,可能导致数据泄露、数据被篡改或删除等严重问题。
权限提升攻击:攻击者可能利用暴露的client_secret获取具有更高权限的令牌,进而访问原本受限的敏感资源或执行敏感操作。比如在企业应用中,可能获取管理员权限,从而对整个企业的系统和数据造成巨大破坏。
应用安全和数据安全方面
应用被恶意利用:攻击者可以使用暴露的client_secret将恶意应用与目标系统进行集成,伪装成合法应用来收集用户数据、执行恶意代码或进行其他有害操作。这可能会损害应用的声誉,导致用户对应用失去信任,进而影响业务的正常开展。
数据泄露风险加剧:攻击者能够通过合法的认证途径访问应用后端数据库或其他数据存储,获取大量用户数据,包括个人信息、财务数据、业务机密等。这些数据可能被用于商业间谍活动、身份盗窃、诈骗等违法犯罪行为,给用户和企业带来巨大的经济损失和隐私侵害。
这里百du找到的,哈哈哈
设置客户Duan密码图文教程
五:发送邮件
POST请求
url:https://outlook.office.com/api/v2.0/me/sendmail
提交参数:“{” + #引号 + “Message” + #引号 + “:{” + #引号 + “Subject” + #引号 + “:” + #引号 + Subject + #引号 + “,” + #引号 + “Body” + #引号 + “:{” + #引号 + “ContentType” + #引号 + “:” + #引号 + ContentType + #引号 + “,” + #引号 + “Content” + #引号 + “:” + #引号 + Content + #引号 + “},” + #引号 + “ToRecipients” + #引号 + “:[{” + #引号 + “EmailAddress” + #引号 + “:{” + #引号 + “Address” + #引号 + “:” + #引号 + Address + #引号 + “}}]}}”
协议头:“Authorization”, “Bearer ” + Access_Token 这里assesstoken是拿到的token
协议头:“Content-Type”, “application/json”
协议头:“User-Agent”, “Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.87 Safari/537.36”
这里我是用精易助手生成的,具体要不要带,带哪个,不用带哪个,我没有具体的测试。
发送邮件的易语言代码:
不知道为什么发送成功后返回空,失败就有提示:不纠结了~~~~
php发送邮件的代码
[PHP] 纯文本查看 复制代码 <?php
// 访问令牌
$accessToken = "";
// 收件人邮箱
$recipientEmail = "1700055516@qq.com";
// 邮件主题
$mailSubject = "Test Email";
// 邮件内容
$mailContent = "This is a test email sent using PHP and Microsoft OAuth2.";
// 构建邮件数据
$mailData = array(
"Message" => array(
"Subject" => $mailSubject,
"Body" => array(
"ContentType" => "Text",
"Content" => $mailContent
),
"ToRecipients" => array(
array(
"EmailAddress" => array(
"Address" => $recipientEmail
)
)
)
)
);
// 将邮件数据转换为 JSON 字符串
$jsonData = json_encode($mailData);
echo $jsonData;
// 发送邮件的 API 地址
$apiUrl = "https://outlook.office.com/api/v2.0/me/sendmail";
// 初始化 cURL 会话
$ch = curl_init();
// 设置 cURL 选项
curl_setopt($ch, CURLOPT_URL, $apiUrl);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonData);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
"Authorization: Bearer ". $accessToken,
"Content-Type: application/json",
"Content-Length: ". strlen($jsonData)
));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// 暂时关闭 SSL 验证,仅用于测试
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
// 执行 cURL 会话并获取响应
$response = curl_exec($ch);
// 检查是否有错误发生
if(curl_errno($ch)){
echo 'Curl error: '. curl_error($ch);
}
// 获取 HTTP 状态码
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($httpCode >= 400) {
echo "HTTP Error: ". $httpCode. " ". curl_error($ch);
}
// 记录响应内容
error_log("Response: ". $response);
// 关闭 cURL 会话
curl_close($ch);
// 输出响应
echo $response;
?> |