如何在.NET 6后端控制器中检查Azure AD用户登录状态?
在.NET 6后端验证Azure AD登录状态的实现方案
核心逻辑说明
后端无法像前端那样直接调用MSAL实例获取用户账号,而是通过验证前端请求携带的Azure AD Access Token来确认用户是否已登录。前端登录成功后,需将获取到的AccessToken通过请求头(Authorization: Bearer {token})传递给后端,后端验证令牌有效性后即可确认登录状态。
步骤1:配置后端Azure AD认证
首先安装Microsoft.Identity.Web NuGet包,然后在Program.cs中配置Azure AD认证:
var builder = WebApplication.CreateBuilder(args); // 添加Azure AD认证服务 builder.Services.AddMicrosoftIdentityWebApiAuthentication(builder.Configuration, "AzureAd"); builder.Services.AddControllers(); var app = builder.Build(); // 启用认证、授权中间件 app.UseAuthentication(); app.UseAuthorization(); app.MapControllers(); app.Run();
同时在appsettings.json中配置Azure AD参数:
{ "AzureAd": { "Instance": "https://login.microsoftonline.com/", "Domain": "your-domain.onmicrosoft.com", "TenantId": "your-tenant-id", "ClientId": "your-backend-client-id", "Audience": "api://your-backend-client-id" } }
步骤2:控制器中验证登录状态
根据业务需求,有两种实现方式:
方式1:强制授权访问(仅登录用户可进入)
在控制器或Action上添加[Authorize]属性,此时只有携带有效AccessToken的请求才能访问,Action内可直接获取用户信息:
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; [ApiController] [Route("api/[controller]")] public class AuthController : ControllerBase { [HttpGet("check-login")] [Authorize] public IActionResult CheckLoginStatus() { // 用户已通过验证,可获取用户信息 var isAuthenticated = User.Identity!.IsAuthenticated; var userName = User.Identity!.Name; var userId = User.FindFirst("oid")?.Value; // Azure AD用户唯一标识 return Ok(new { IsLoggedIn = isAuthenticated, UserName = userName, UserId = userId }); } }
方式2:非强制授权,按需检查登录状态
如果控制器Action不需要强制授权,但需要判断用户是否已登录,可直接通过HttpContext.User检查:
using Microsoft.AspNetCore.Mvc; [ApiController] [Route("api/[controller]")] public class AuthController : ControllerBase { [HttpGet("check-login")] public IActionResult CheckLoginStatus() { var isAuthenticated = HttpContext.User.Identity?.IsAuthenticated ?? false; if (isAuthenticated) { var userName = HttpContext.User.Identity!.Name; return Ok(new { IsLoggedIn = true, UserName = userName }); } else { return Ok(new { IsLoggedIn = false }); } } }
关键注意事项
- 前端需确保请求时携带有效的AccessToken,可通过MSAL Angular的
acquireTokenSilent方法获取并添加到请求头。 - 后端配置的
Audience必须与前端请求令牌的受众一致,否则令牌验证会失败。
内容的提问来源于stack exchange,提问作者Indika
相关产品推荐
相关产品推荐

