开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 317|回复: 4
收起左侧

[技术专题] 记一次自己研究一天的微软Oauth协议获取Token并发送邮件

[复制链接]
结帖率:100% (19/19)
发表于 2025-1-19 15:29:48 | 显示全部楼层 |阅读模式   安徽省亳州市
本帖最后由 小房同学 于 2025-1-19 15:28 编辑

前言:

自从微软更新了之后,直接使用账号密码验证的方式失效了,现在要用Oauth2.0验证,研究了一天,前面在论坛上搜了相关的帖子,发现有的 易友 发了相关的模块,也有的发了成品的软件,想下载研究一下,发现链接失效了。请问,你发帖的意义是何在?引流贴?这些都解决不了我刨根问底的心理,其实真的没有那么难!发这个贴子也是跟大家交流技术 禁止使用一切违法违规的行为哦~~~


一:注册微软账号

注册地址:https://portal.azure.com/#home

注册完账号之后,创建一个应用,它可能会提示目录下没有权限这类的提示,不用担心,用注册微软邮箱的账号 申请开通365开发人员权限,开通后再回来进行创建应用。


二:这是我创建的应用信息





这里要注意 
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;
?>

签到天数: 22 天

发表于 2025-1-19 19:46:52 | 显示全部楼层   安徽省*
好厉害 顶
回复 支持 反对

使用道具 举报

结帖率:70% (35/50)

签到天数: 30 天

发表于 2025-1-19 18:04:36 | 显示全部楼层   广西壮族自治区南宁市
小房同学 发表于 2025-1-19 17:53
不需要 是你的姿势不对

能给个详细注册应用的方法吗,一直卡这过不去
回复 支持 反对

使用道具 举报

结帖率:100% (19/19)

签到天数: 17 天

 楼主| 发表于 2025-1-19 17:53:20 | 显示全部楼层   安徽省亳州市
cs潇潇 发表于 2025-1-19 16:54
第一步注册应用就卡住了,要信用卡才行,还是试用,也不是长久之计啊

不需要 是你的姿势不对
回复 支持 反对

使用道具 举报

结帖率:70% (35/50)

签到天数: 30 天

发表于 2025-1-19 16:54:07 | 显示全部楼层   广西壮族自治区南宁市
第一步注册应用就卡住了,要信用卡才行,还是试用,也不是长久之计啊
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表