如何通过AD应用ClientId和Client Secret使用MSAL获取访问令牌
使用MSAL通过Client ID和Client Secret获取访问令牌
首先需要安装Microsoft.Identity.Client NuGet包,这是MSAL的官方.NET库。
示例代码
using Microsoft.Identity.Client; var clientId = ""; // 你的客户端应用ID var clientSecret = ""; // 你的客户端密钥 var tenantId = "tenant domain or tenant ID"; // 可以是租户域名(如xxx.onmicrosoft.com)或租户GUID // 构建机密客户端应用实例 var confidentialClient = ConfidentialClientApplicationBuilder .Create(clientId) .WithClientSecret(clientSecret) .WithAuthority(new Uri($"https://login.microsoftonline.com/{tenantId}")) .Build(); // 指定目标资源的权限范围,针对Microsoft Graph需使用`.default`后缀表示应用权限 var scopes = new[] { "https://graph.microsoft.com/.default" }; // 获取访问令牌 var authenticationResult = await confidentialClient.AcquireTokenForClient(scopes) .ExecuteAsync() .ConfigureAwait(false); return authenticationResult.AccessToken;
关键差异说明
- MSAL使用
ConfidentialClientApplication替代ADAL的AuthenticationContext,专门适配拥有客户端密钥/证书的机密客户端场景 - 权限范围需采用
{resourceUri}/.default格式,这对应ADAL中直接传入资源地址的逻辑,用于请求应用权限(而非用户委派权限) - 认证权威地址推荐使用
https://login.microsoftonline.com/{tenantId},原ADAL的login.windows.net地址仍可兼容,但前者是微软推荐的现代端点
内容的提问来源于stack exchange,提问作者Monte Cristo
相关产品推荐
相关产品推荐

