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

如何在Web客户端+.NET Core API 6.0架构中实现Azure AD用户认证?

你的Azure AD认证流程是正确的,以下是关键细节与实现建议

你的认证思路完全符合Azure AD针对前后端分离应用的标准认证模式,核心流程是Web客户端通过Azure AD获取访问令牌(Access Token),再将令牌附在API请求的Authorization头中,由.NET Core API验证令牌有效性,这是OAuth2.0/OpenID Connect规范下的推荐实践。

关键细节补充

  • 不要让Web客户端直接收集用户凭据:应该使用授权码流程(Authorization Code Flow),引导用户跳转到Azure AD官方登录页面完成身份验证,避免客户端处理/存储用户密码,极大提升安全性。
  • 区分ID Token与Access Token:客户端需获取Access Token(用于调用API),ID Token仅用于客户端自身验证用户身份信息(如用户名、租户ID),不能用来调用API。

.NET Core API 6.0 令牌验证实现

在API的Program.cs中配置Azure AD认证:

var builder = WebApplication.CreateBuilder(args);

// 注册Azure AD认证服务
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddMicrosoftIdentityWebApi(builder.Configuration.GetSection("AzureAd"));

// 添加授权服务
builder.Services.AddAuthorization();

var app = builder.Build();

// 启用认证与授权中间件
app.UseAuthentication();
app.UseAuthorization();

app.MapControllers();

app.Run();

在appsettings.json中配置Azure AD参数:

"AzureAd": {
  "Instance": "https://login.microsoftonline.com/",
  "TenantId": "你的Azure AD租户ID",
  "ClientId": "API应用注册的客户端ID"
}

Web客户端令牌获取建议

使用MSAL.js(Microsoft Authentication Library for JavaScript)实现授权码流程,示例代码:

// 初始化MSAL实例
const msalConfig = {
  auth: {
    clientId: "Web客户端应用注册的ID",
    authority: "https://login.microsoftonline.com/你的租户ID",
    redirectUri: "Web客户端的回调地址(需在应用注册中配置)"
  }
};
const msalInstance = new msal.PublicClientApplication(msalConfig);

// 登录并获取访问令牌
async function getAccessToken() {
  // 弹出登录窗口
  const loginResult = await msalInstance.loginPopup({
    scopes: ["api://你的API客户端ID/access_as_user"] // API定义的权限范围
  });
  
  // 静默获取令牌(避免重复登录)
  const tokenResult = await msalInstance.acquireTokenSilent({
    scopes: ["api://你的API客户端ID/access_as_user"],
    account: loginResult.account
  });
  
  return tokenResult.accessToken;
}

// 调用API时携带令牌
async function callApi() {
  const token = await getAccessToken();
  const response = await fetch("你的API端点", {
    method: "GET",
    headers: {
      "Authorization": `Bearer ${token}`
    }
  });
  const data = await response.json();
}

额外注意事项

  • 确保API的应用注册中已定义权限范围,且Web客户端的应用注册中已添加该权限并完成管理员授权(若需要)。
  • API会自动验证令牌的签名、受众(aud)、过期时间(exp)等核心属性,无需手动编写验证逻辑,由Microsoft Identity Web库处理。
  • 在API控制器中,可通过HttpContext.User获取当前用户的身份信息(如User.FindFirst(ClaimTypes.NameIdentifier)?.Value获取用户ID)。

内容的提问来源于stack exchange,提问作者aka baka

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 15:57:18