You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将TOTP生成的OTP作为参数调用API获取OAuth 2.0令牌?

将TOTP验证码作为参数调用微软OAuth2令牌接口的实现方案

你可以结合requests库发送POST请求,把生成的TOTP验证码作为MFA验证参数传入微软的令牌接口。以下是完整的代码实现:

import pyotp
import requests

# 生成TOTP验证码
totp = pyotp.TOTP('你的TOTP密钥')
otp = totp.now()

# 微软OAuth2令牌接口配置
tenant_id = '替换为你的租户ID'
token_url = f'https://login.microsoftonline.com/{tenant_id}/oauth2/v2.0/token'

# 构造请求参数(ROPC认证流程,适配MFA场景)
payload = {
    'client_id': '你的Azure AD应用注册ID',
    'scope': 'openid offline_access https://graph.microsoft.com/User.Read',  # 替换为实际需要的权限范围
    'username': '用户邮箱或用户主体名称(UPN)',
    'password': '用户登录密码',
    'grant_type': 'password',
    'code': otp,  # 传入生成的TOTP验证码作为MFA凭证
    # 若为机密客户端(如后端服务),需添加以下参数
    # 'client_secret': '你的应用机密密钥'
}

# 发送POST请求获取令牌
response = requests.post(token_url, data=payload)

# 处理接口响应
if response.status_code == 200:
    token_data = response.json()
    print('令牌获取成功:')
    print(f'访问令牌:{token_data.get("access_token")}')
    print(f'刷新令牌:{token_data.get("refresh_token")}')
else:
    print(f'请求失败,状态码:{response.status_code}')
    print(f'错误详情:{response.json()}')

关键说明

  • 请求要求:必须使用POST请求,参数以application/x-www-form-urlencoded表单格式传递
  • 核心参数:
    • client_id:Azure AD中注册应用的唯一标识ID
    • scope:申请的权限范围,多个权限用空格分隔
    • grant_type:固定为password(对应ROPC认证流程)
    • code:直接填入生成的TOTP验证码,完成MFA验证
  • 注意事项:
    • ROPC流程仅适用于特定场景,需确保Azure AD应用已启用该认证方式,且用户账户配置了TOTP类型的MFA
    • 公共客户端(如桌面APP)无需client_secret,机密客户端(如后端服务)必须添加该参数
    • 禁止在前端代码中硬编码用户密码、应用密钥等敏感信息,避免数据泄露

内容的提问来源于stack exchange,提问作者Suraj Naik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 19:40:19