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

通过Graph API为Azure AD和Intune传密码参数时AccessToken获取失败

问题分析:AccessToken为空的故障排查与解决建议

你修改了原Intune认证脚本的密码处理逻辑后,遇到了Authorization Access Token is null的错误,咱们来一步步拆解问题:

原脚本与你的修改差异

原脚本是从文件读取加密后的密码并转换为SecureString:

$UserPassword = get-Content "$Password" | ConvertTo-SecureString
$userCredentials = new-object Microsoft.IdentityModel.Clients.ActiveDirectory.UserPasswordCredential -ArgumentList $userUPN,$UserPassword
$authResult = [Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContextIntegratedAuthExtensions]::AcquireTokenAsync($authContext, $resourceAppIdURI, $clientid, $userCredentials).Result;

你的修改是直接将明文密码转换为SecureString:

$UserPassword = ConvertTo-SecureString -String $Password -AsPlainText -Force
$userCredentials = new-object Microsoft.IdentityModel.Clients.ActiveDirectory.UserPasswordCredential -ArgumentList $userUPN,$UserPassword
$authResult = [Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContextIntegratedAuthExtensions]::AcquireTokenAsync($authContext, $resourceAppIdURI, $clientid, $userCredentials).Result;

可能的错误原因

  1. 变量含义不匹配:原脚本中$Password应该是存储加密密码的文件路径,而你修改后如果仍传入文件路径,相当于把路径字符串当成了明文密码,显然会导致认证失败。
  2. 认证方式限制:ADAL的UserPasswordCredential依赖ROPC(资源所有者密码凭据)流,这种流要求账号未启用MFA,并且租户允许该认证方式。如果你的账号开启了MFA,这种方式直接失效。
  3. 密码格式/正确性问题:即使你传入了正确的明文密码,若ConvertTo-SecureString的处理逻辑和ADAL预期的不匹配(比如编码问题),也可能导致认证失败。

解决建议

方案1:修正明文密码传递逻辑

如果你确实想用明文密码方式,确保:

  • $Password变量存储的是用户的真实明文密码,而非文件路径
  • 目标账号未启用MFA,且租户允许ROPC流
  • 可以添加错误捕获来查看具体失败原因:
try {
    $UserPassword = ConvertTo-SecureString -String $Password -AsPlainText -Force
    $userCredentials = New-Object Microsoft.IdentityModel.Clients.ActiveDirectory.UserPasswordCredential -ArgumentList $userUPN, $UserPassword
    $authResult = [Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContextIntegratedAuthExtensions]::AcquireTokenAsync($authContext, $resourceAppIdURI, $clientid, $userCredentials).Result
}
catch {
    Write-Host "认证失败详情:$_" -ForegroundColor Red
    exit
}

if(-not $authResult.AccessToken){
    Write-Host "Authorization Access Token is null, please re-run authentication..." -ForegroundColor Red
    break
}

方案2:回到原脚本的加密密码文件方式

原脚本的设计是用加密文件存储密码,确保密码文件是通过以下命令生成的:

Read-Host "输入密码" -AsSecureString | ConvertFrom-SecureString | Out-File "C:\path\to\password.txt"

之后$Password变量传入该文件路径,这样Get-Content | ConvertTo-SecureString就能正确还原加密的密码,和原脚本逻辑一致。

额外检查点

  • 确认$userUPN是正确的用户主体名称(比如user@tenant.onmicrosoft.com)
  • 确认$resourceAppIdURI是正确的Graph API资源URI(通常是https://graph.microsoft.com)
  • 确认$clientid是已在Azure AD中注册的应用ID,且该应用已获得Intune相关权限

内容的提问来源于stack exchange,提问作者Thomas Cox

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:02:17