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

ASP.NET Core Blazor接入Microsoft Entra ID认证相关问题咨询

问题解答

一、登录后Cookie的来源

当你使用AddMicrosoftIdentityWebApp配置Entra ID认证时,该方法内部已自动集成Cookie认证中间件(默认Scheme为CookieAuthenticationDefaults.AuthenticationScheme)。用户通过OpenID Connect登录成功后,认证中间件会生成一个会话Cookie(默认名称为.AspNetCore.Cookies),存储用户的认证会话信息。后续同域下的请求会自动携带这个Cookie,服务端通过它验证用户身份。

二、自建项目认证失效的排查要点

  1. 配置正确性检查

    • 确保appsettings.json中的AzureAd节点配置与Entra ID应用注册完全一致:ClientId、TenantId、CallbackPath(通常为/signin-oidc)必须匹配。
    • 确认Entra ID应用注册中已添加正确的重定向URI(格式为https://localhost:你的端口/signin-oidc),且本地开发使用HTTPS(ASP.NET Core默认启用)。
  2. 中间件顺序检查
    在Program.cs中,中间件调用顺序必须严格遵循:

    app.UseRouting();
    app.UseAuthentication(); // 必须在UseAuthorization之前
    app.UseAuthorization();
    

    顺序错误会导致认证逻辑不生效。

  3. 组件授权配置
    确保需要授权的Blazor页面/组件添加了[Authorize]特性,或者在路由配置中指定了授权策略。

三、跨端口调用独立WebAPI携带Cookie的配置

不同端口属于不同域,需要配置跨域资源共享(CORS)并允许凭证传递,同时确保两端认证逻辑兼容:

1. Blazor Web App端配置

  • 添加CORS策略:
    builder.Services.AddCors(options =>
    {
        options.AddPolicy("AllowApi", policy =>
        {
            policy.WithOrigins("https://localhost:API端口") // 替换为你的API实际端口
                  .AllowAnyHeader()
                  .AllowAnyMethod()
                  .AllowCredentials(); // 必须开启,允许携带Cookie等凭证
        });
    });
    
  • 启用CORS中间件:
    app.UseCors("AllowApi"); // 需在UseAuthentication和UseAuthorization之前调用
    
  • 配置HttpClient携带凭证:
    推荐通过IHttpClientFactory配置专用客户端:
    builder.Services.AddHttpClient("ApiClient", client =>
    {
        client.BaseAddress = new Uri("https://localhost:API端口/");
    }).AddHttpMessageHandler<BaseAddressAuthorizationMessageHandler>();
    
    在组件中注入IHttpClientFactory并使用:
    var client = _httpClientFactory.CreateClient("ApiClient");
    var response = await client.GetFromJsonAsync<WeatherForecast[]>("weatherforecast");
    

2. 独立WebAPI端配置

  • 配置CORS策略:
    builder.Services.AddCors(options =>
    {
        options.AddPolicy("AllowBlazorApp", policy =>
        {
            policy.WithOrigins("https://localhost:Blazor端口") // 替换为Blazor应用端口
                  .AllowAnyHeader()
                  .AllowAnyMethod()
                  .AllowCredentials();
        });
    });
    app.UseCors("AllowBlazorApp");
    
  • 认证逻辑配置:
    若API也使用Entra ID保护,推荐配置JWT Bearer认证(比Cookie跨域更可靠):
    builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
        .AddMicrosoftIdentityWebApi(builder.Configuration.GetSection("AzureAd"));
    app.UseAuthentication();
    app.UseAuthorization();
    
    若要共享Blazor的Cookie,需配置数据保护密钥共享(仅适合同服务器部署场景),比如使用文件系统或Azure存储共享密钥,确保API能解密Blazor生成的Cookie。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 17:39:54