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

如何提取实时生成的data-bind表单数据?Azure AD认证i19参数问题

解决Azure AD认证中i19参数的生成问题

我来帮你拆解这个i19参数的生成逻辑——这类Azure AD登录页面的timeOnPage绑定值,核心逻辑其实很直观,下面是具体的分析和Python实现方案:

1. 确认i19的生成逻辑

从页面里的data-bind="value: timeOnPage"可以看出,这个参数用的是Knockout.js的绑定语法,它的本质是用户从页面加载到提交表单时的停留毫秒数:

  • 页面初始化时,浏览器会记录当前的时间戳(用Date.now(),也就是UTC时间的毫秒数)
  • 提交表单瞬间,用当前时间戳减去页面加载时的初始时间戳,得到的差值就是timeOnPage的值,也就是最终的i19参数
  • 最后这个值会被URL编码后随表单一起发送

2. 在Python中模拟生成i19值

因为Python没法直接执行页面的JavaScript,我们可以手动模拟这个计时逻辑,步骤如下:

步骤1:记录页面加载时间

当你第一次请求Azure AD的登录页面时,记下请求完成的本地时间(用毫秒级时间戳,和浏览器的Date.now()对齐):

import time
import requests

# 初始化会话,请求登录页面
session = requests.Session()
login_page_url = "https://login.microsoftonline.com/你的租户ID/oauth2/v2.0/authorize..."
response = session.get(login_page_url)

# 记录页面加载完成的毫秒级时间戳
page_load_ms = time.time() * 1000

步骤2:计算停留时间(i19值)

在准备发送POST认证请求前,计算当前时间和页面加载时间的差值,这个差值就是我们要的i19:

# 可选:模拟用户在页面上的操作停留时间(比如2秒)
time.sleep(2)

# 计算当前时间与页面加载时间的毫秒差
current_time_ms = time.time() * 1000
i19_value = int(current_time_ms - page_load_ms)

步骤3:构造并发送POST请求

把i19值加入表单参数,和其他认证参数一起发送:

# 构造认证表单参数
auth_payload = {
    "i19": str(i19_value),
    "username": "你的用户名",
    "password": "你的密码",
    # 其他必填参数:client_id、redirect_uri等
}

# 发送POST认证请求
auth_response = session.post(login_page_url, data=auth_payload)

3. 验证你的示例

你提到印度标准时间13:53:58时i19值为55964,这个数值正好是55964毫秒(约56秒),完全符合「页面加载后停留56秒提交」的逻辑,和我们的推导一致。

注意事项

  • 如果页面存在重定向,要确保记录的是最终加载的认证页面的时间
  • 尽量让模拟的停留时间接近真实用户的操作时长,避免触发Azure AD的反拦截机制
  • 若遇到参数不匹配的情况,可以用浏览器开发者工具的Network标签,对比实际发送的i19值和你计算的差值,微调时间计算逻辑

内容的提问来源于stack exchange,提问作者Navdeep Singh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:06:42