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

使用ClientApp通过委托权限获取APIApp令牌失败排查

问题分析与解决

错误原因

你遇到的AADSTS7000218错误,核心原因是你的ClientApp被配置为机密客户端,而设备码流属于公共客户端认证流程——公共客户端(比如桌面、移动应用)不需要提供客户端密钥或断言,Azure AD会跳过客户端身份验证。如果应用注册默认设为机密客户端,Azure AD会强制要求验证客户端身份,因此抛出该错误。

修复步骤

1. 将ClientApp配置为公共客户端

  • 登录Azure门户,找到ClientApp的应用注册
  • 进入「认证」页面,下拉到「高级设置」区域
  • 将「允许公共客户端流」设置为「是」
  • 保存更改

2. 确认委托权限配置正确

  • 在ClientApp的「API权限」页面,添加APIApp的委托权限(不要选应用权限)
  • 如果是面向租户内所有用户的应用,需点击「授予管理员同意」完成权限生效

3. 修正后的设备码流PowerShell示例

先安装MSAL.PS模块:Install-Module -Name MSAL.PS -Scope CurrentUser,再执行以下代码:

$clientId = "你的ClientApp客户端ID"
$tenantId = "你的租户ID"
$scopes = "APIApp的应用ID URI/权限名称" # 示例:api://xxxxxx/access_as_user

# 发起设备码流认证
$tokenResult = Get-MsalToken -ClientId $clientId -TenantId $tenantId -Scopes $scopes -DeviceCode

# 获取访问令牌
$accessToken = $tokenResult.AccessToken

其他获取委托权限令牌的方式

  • 交互式登录流:适合手动操作场景,直接弹出登录界面获取令牌
    $tokenResult = Get-MsalToken -ClientId $clientId -TenantId $tenantId -Scopes $scopes -Interactive
    
  • 用户名密码流:非交互式场景(需用户密码,不推荐生产环境使用)
    $credential = Get-Credential
    $tokenResult = Get-MsalToken -ClientId $clientId -TenantId $tenantId -Scopes $scopes -Username $credential.UserName -Password $credential.Password
    

内容的提问来源于stack exchange,提问作者Daniel M.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 21:33:14