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

获取Azure AD JWT令牌用于集成测试中的授权验证

哈哈,这个需求太常见了——不用改现有注册,直接拿JWT跑自动化测试对吧?我给你分享几个靠谱的方案,完全适配你的场景:

方案1:使用ROPC授权流(最适合自动化测试)

ROPC(Resource Owner Password Credentials)流允许你直接用测试用户的账号密码获取JWT令牌,全程无交互,完美适配自动化测试流程,而且不需要改动任何已注册的API或客户端配置。

前置准备

  • 确保你的测试用户没有启用MFA(ROPC流不支持多因素认证,测试环境可以专门创建无MFA的测试账号)
  • 确认你的客户端应用已经在Azure AD中被授予访问目标Web API的权限(如果是需要管理员同意的权限,提前完成管理员授权)

获取令牌的步骤

向Azure AD的令牌端点发送POST请求,参数如下:

POST https://login.microsoftonline.com/{你的租户ID}/oauth2/v2.0/token
Content-Type: application/x-www-form-urlencoded

grant_type=password
&client_id={你的客户端应用ID}
&username={测试用户的UPN,比如test-submitter@yourdomain.com}
&password={测试用户密码}
&scope={你的Web API的scope,比如api://{API应用ID}/access_as_user}

代码示例(Python)

import requests

# 配置参数,建议放在测试配置文件中,不要硬编码
TENANT_ID = "your-tenant-id"
CLIENT_ID = "your-client-id"
API_SCOPE = "api://your-api-client-id/access_as_user"

# 获取提交订单用户的令牌
submitter_username = "test-submitter@yourdomain.com"
submitter_password = "test-submitter-password"

token_payload = {
    "grant_type": "password",
    "client_id": CLIENT_ID,
    "username": submitter_username,
    "password": submitter_password,
    "scope": API_SCOPE
}

token_response = requests.post(
    f"https://login.microsoftonline.com/{TENANT_ID}/oauth2/v2.0/token",
    data=token_payload
)
submitter_token = token_response.json()["access_token"]

# 调用提交订单接口
submit_order_url = "https://your-web-api.com/api/orders"
submit_headers = {"Authorization": f"Bearer {submitter_token}"}
order_payload = {"productId": "123", "quantity": 5}
submit_response = requests.post(submit_order_url, json=order_payload, headers=submit_headers)
order_id = submit_response.json()["id"]

# 获取审批用户的令牌
approver_username = "test-approver@yourdomain.com"
approver_password = "test-approver-password"
approver_payload = token_payload.copy()
approver_payload.update({"username": approver_username, "password": approver_password})
approver_token_response = requests.post(
    f"https://login.microsoftonline.com/{TENANT_ID}/oauth2/v2.0/token",
    data=approver_payload
)
approver_token = approver_token_response.json()["access_token"]

# 调用审批接口
approve_order_url = f"https://your-web-api.com/api/orders/{order_id}/approve"
approve_headers = {"Authorization": f"Bearer {approver_token}"}
approve_response = requests.post(approve_order_url, headers=approve_headers)

注意事项

  • 仅在测试环境使用ROPC:生产环境绝对不能用,因为它会暴露用户密码,不符合安全最佳实践
  • 如果你的客户端是机密客户端(比如后端服务),可以在请求中添加client_secret={你的客户端密钥}增强安全性
方案2:使用Azure AD PowerShell模块(适合PowerShell自动化脚本)

如果你习惯用PowerShell写自动化测试脚本,可以用Azure AD模块直接获取用户令牌:

步骤

  1. 安装Azure AD模块(首次使用):
Install-Module -Name AzureAD -Scope CurrentUser -Force
  1. 获取令牌并调用API:
# 配置参数
$tenantId = "your-tenant-id"
$clientId = "your-client-id"
$apiResource = "api://your-api-client-id"

# 获取提交订单用户的令牌
$submitterUsername = "test-submitter@yourdomain.com"
$submitterPassword = ConvertTo-SecureString "test-submitter-password" -AsPlainText -Force
$submitterCred = New-Object System.Management.Automation.PSCredential($submitterUsername, $submitterPassword)
$submitterToken = Get-AzureADUserOAuth2AccessToken -Resource $apiResource -Credential $submitterCred -ClientId $clientId -TenantId $tenantId

# 提交订单
$submitOrderUrl = "https://your-web-api.com/api/orders"
$submitHeaders = @{"Authorization" = "Bearer $($submitterToken.AccessToken)"}
$orderPayload = @{"productId" = "123"; "quantity" = 5} | ConvertTo-Json
$submitResponse = Invoke-RestMethod -Uri $submitOrderUrl -Method Post -Headers $submitHeaders -Body $orderPayload -ContentType "application/json"
$orderId = $submitResponse.id

# 获取审批用户的令牌并审批
$approverUsername = "test-approver@yourdomain.com"
$approverPassword = ConvertTo-SecureString "test-approver-password" -AsPlainText -Force
$approverCred = New-Object System.Management.Automation.PSCredential($approverUsername, $approverPassword)
$approverToken = Get-AzureADUserOAuth2AccessToken -Resource $apiResource -Credential $approverCred -ClientId $clientId -TenantId $tenantId

$approveOrderUrl = "https://your-web-api.com/api/orders/$orderId/approve"
$approveHeaders = @{"Authorization" = "Bearer $($approverToken.AccessToken)"}
Invoke-RestMethod -Uri $approveOrderUrl -Method Post -Headers $approveHeaders
总结

这两个方案都不需要修改你已注册的Web API或客户端应用,只需要准备好符合要求的测试账号,就能快速实现“用户提交订单→另一个用户审批”的自动化测试流程。

内容的提问来源于stack exchange,提问作者Bjørn Nørgaard

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:53:45