Outlook个人邮箱OAuth认证配置全流程

Outlook个人邮箱OAuth认证配置

以下是使用OAuth 2.0认证Outlook个人邮箱、获取access_token并发送邮件的完整流程:


🔑 步骤1:注册Azure AD应用
  1. 访问 Azure门户

  2. 创建新应用注册:

    • 名称:自定义应用名(如"MyMailApp")
    • 重定向URIhttp://localhost(开发环境)或实际域名
    • 账户类型:选择任何组织目录(任何 Azure AD 目录 - 多租户)和个人 Microsoft 帐户
  3. 记录关键信息:

    Application (client) ID = xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx 
    
    Directory (tenant) ID = yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy
  4. 身份验证设置
    • 身份验证 选项卡:
      • 添加重定向URI:http://localhost
      • 启用 “访问令牌” 和 “ID 令牌”
      • 允许公共客户端流:设置为 “是”
    • 证书和密码
      • 创建客户端密钥(客户端密码)
      • 记录密钥值(仅显示一次)
      • 设置合理的有效期(通常1-2年)

    ⚙ 步骤2:配置API权限
    1. 在应用注册页 → API权限添加权限

    2. 选择:

      • Microsoft Graph → 委托的权限
      • 勾选权限:
        • offline_access(必须!用于获取refresh_token)
        • Mail.Send
        • User.Read
    3. 点击授予管理员同意完成授权


    🔒 步骤3:获取授权码(code)

    构造授权URL(直接在浏览器访问):

    https://login.microsoftonline.com/common/oauth2/v2.0/authorize? 
    client_id=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx 
    &response_type=code 
    &redirect_uri=http://localhost 
    &response_mode=query 
    &scope=offline_access%20mail.send%20user.read 
    &state=123456
    • 关键参数说明
      • scope必须包含offline_access才能获取refresh_token
      • 用户登录后会重定向到redirect_uri?code=AUTH_CODE

    🎫 步骤4:获取Access Token

    使用cURL换取令牌(替换实际值):

    Bash
    
    curl -X POST "https://login.microsoftonline.com/common/oauth2/v2.0/token" \ 
    -H "Content-Type: application/x-www-form-urlencoded" \ 
    -d "client_id=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx &scope=mail.send%20offline_access 
    &code=上一步获取的AUTH_CODE 
    &redirect_uri=http://localhost 
    &grant_type=authorization_code 
    &client_secret=应用密钥"

    ✅ 响应示例:

    json
    
    {
      "access_token": "eyJ0eXAi...",
      "refresh_token": "M.R3_BAY...",
      "expires_in": 3600,
      "token_type": "Bearer"
    } }

    ✉️ 步骤5:使用Access Token发送邮件

    通过Microsoft Graph API发送邮件:

    Bash
    
    curl -X POST "https://graph.microsoft.com/v1.0/me/sendMail" \ 
    -H "Authorization: Bearer eyJ0eXAi..." \ 
    -H "Content-Type: application/json" \ 
    -d '{ 
      "message": {
        "subject": "OAuth测试邮件",
        "body": {
          "contentType": "Text",
          "content": "此邮件通过OAuth认证发送"
        },
        "toRecipients": [{
          "emailAddress": {
            "address": "recipient@example.com"
          }
        }]
      }
    }'

    🔄 步骤6:刷新Access Token(令牌过期时)

    使用refresh_token获取新access_token:

    Bash
    
    curl -X POST "https://login.microsoftonline.com/common/oauth2/v2.0/token" \
    -H "Content-Type: application/x-www-form-urlencoded" \
    -d "client_id=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
    &scope=mail.send
    &refresh_token=M.R3_BAY...
    &grant_type=refresh_token
    &client_secret=应用密钥"

    ⚠️ 关键注意事项

    1. 令牌生命周期

      • Access Token有效期:60-90分钟
      • Refresh Token有效期:90天(需定期刷新)
      • 双重Token机制增强安全性
    2. 令牌管理机制

      • offline_access作用域获取刷新令牌
      • 自动刷新令牌(有效期90天)
      • 本地存储令牌避免重复授权
    3. 权限变更处理
      若修改API权限范围,需重新获取用户授权

    评论 2
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包

    打赏作者

    张杨不张扬

    您的鼓励将是我创作的最大动力

    ¥1 ¥2 ¥4 ¥6 ¥10 ¥20
    扫码支付:¥1
    获取中
    扫码支付

    您的余额不足,请更换扫码支付或充值

    打赏作者

    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值