.NET 5控制台应用从AAD获取Bearer令牌调用Azure安全Web API
.NET 5 控制台应用获取AAD Bearer Token实现方案
前提确认
你需要提前准备好以下Azure AD注册信息:
- 控制台应用注册的客户端ID(Client ID)
- 控制台应用注册的客户端密钥(Client Secret)
- 所属AAD的租户ID(Tenant ID)
- 目标Web API的应用ID URI(如
api://xxxx-xxxx-xxxx-xxxx)
实现步骤
1. 安装依赖NuGet包
使用包管理器控制台执行安装命令:Install-Package Microsoft.Identity.Client -Version 4.56.0
该版本稳定兼容.NET 5运行环境。
2. 编写获取Bearer Token的核心逻辑
采用OAuth 2.0客户端凭证流获取Token,示例代码如下:
using Microsoft.Identity.Client; using System; using System.Net.Http; using System.Net.Http.Headers; using System.Threading.Tasks; namespace AADApiCallDemo { class Program { // 替换为你自己的配置值 private const string TenantId = "你的AAD租户ID"; private const string ClientId = "控制台应用的客户端ID"; private const string ClientSecret = "控制台应用的客户端密钥"; private const string WebApiAppIdUri = "目标Web API的应用ID URI"; // 客户端凭证流的Scope固定为 应用ID URI/.default private static readonly string[] Scopes = { $"{WebApiAppIdUri}/.default" }; static async Task Main(string[] args) { // 构建机密客户端应用实例 var app = ConfidentialClientApplicationBuilder .Create(ClientId) .WithClientSecret(ClientSecret) .WithAuthority($"https://login.microsoftonline.com/{TenantId}") .Build(); // 获取访问Token AuthenticationResult result; try { result = await app.AcquireTokenForClient(Scopes).ExecuteAsync(); Console.WriteLine($"获取Token成功:{result.AccessToken}"); } catch (MsalServiceException ex) { Console.WriteLine($"获取Token失败:{ex.Message}"); return; } // 调用目标Web API await CallWebApiAsync(result.AccessToken); } private static async Task CallWebApiAsync(string accessToken) { using var httpClient = new HttpClient(); // 请求头添加Authorization字段 httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken); // 替换为你的Web API实际接口地址 var apiResponse = await httpClient.GetAsync("https://你的WebAPI地址/接口路径"); if (apiResponse.IsSuccessStatusCode) { var responseContent = await apiResponse.Content.ReadAsStringAsync(); Console.WriteLine($"接口调用成功,返回内容:{responseContent}"); } else { Console.WriteLine($"接口调用失败,状态码:{apiResponse.StatusCode},错误信息:{await apiResponse.Content.ReadAsStringAsync()}"); } } } }
3. 配置校验说明
- Scope必须使用
{Web API应用ID URI}/.default格式,不可自定义其他值,客户端凭证流仅支持该格式的Scope - 必须确保控制台应用注册时授予的是应用权限而非委托权限,且权限已由AAD管理员完成同意授权
- 如果你的Web API部署在Azure中国区,Authority地址需要替换为
https://login.chinacloudapi.cn/{TenantId}
常见异常排查
- 401 Unauthorized获取Token失败:检查租户ID、客户端ID、客户端密钥是否填写错误,Authority地址是否匹配你使用的Azure云环境
- 403 Forbidden调用API失败:先解码Token检查
roles声明中是否包含你申请的API权限,再确认Web API侧的权限校验逻辑是否匹配对应权限值
内容的提问来源于stack exchange,提问作者Bike_dotnet
相关产品推荐
相关产品推荐

