调用Azure AD Identity.Client的AcquireTokenByUsernamePassword遇406错误及排查
解决Azure AD Identity.Client AcquireTokenByUsernamePassword方法的406错误
问题场景
我下载了Azure的up-console示例代码,严格按照ReadMe完成客户端应用注册、项目配置后,运行时输入登录Azure门户的邮箱账号和对应密码,调用AcquireTokenByUsernamePassword方法时触发了406错误。
核心出错代码
private async Task<AuthenticationResult> GetTokenForWebApiUsingUsernamePasswordAsync(IEnumerable<string> scopes, string username, SecureString password) { AuthenticationResult result = null; result = await App.AcquireTokenByUsernamePassword(scopes, username, password).ExecuteAsync(); return result; }
已完成的配置与操作步骤
客户端应用注册流程
- 在Azure门户的“应用注册(预览)”页面创建名为
up-console的应用,支持“任何组织目录中的账户” - 记录应用的“客户端ID”用于后续配置
- 在应用清单中将
allowPublicClient属性设置为true并保存 - 添加Microsoft Graph的委托权限
User.Read、User.ReadBasic.All,并完成租户管理员同意
项目配置
- 在
appsettings.json中完成如下参数配置:{ "Authentication": { "AzureCloudInstance": "AzurePublic", "AadAuthorityAudience": "AzureAdMyOrg", "ClientId": "[复制的Azure AD客户端ID]", "TenantId": "[复制的Azure AD租户ID]", "Tenant": "[复制的Azure AD租户ID]" } } - 清理解决方案、重新生成后启动调试
解决方法
经过测试,改用Azure AD中新创建的用户账号(仔细复制用户名和密码)后,代码可以正常运行并获取到令牌。目前尚未明确使用最初创建目录的管理员邮箱账号时触发406错误的具体原因,但切换新用户账号可解决该问题。
内容的提问来源于stack exchange,提问作者c0micrage
相关产品推荐
相关产品推荐

