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

如何在.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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 16:45:00