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

ASP.NET Core Web应用Docker镜像远程登录关联失败求助

解决ASP.NET Core Docker镜像Azure AD登录关联失败问题

问题描述

本地测试ASP.NET Core Web应用Docker镜像时,执行docker run命令出现以下错误:

warn: Microsoft.AspNetCore.Authentication.OpenIdConnect.OpenIdConnectHandler[15]   '.AspNetCore.Correlation.AzureADOpenID.qCkwXxlpGF5ynTfvNW2Igg90nqvtstBG9eqgOeGn7Os' cookie not found.
fail: Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware[1]
     An unhandled exception has occurred while executing the request.
System.Exception: An error was encountered while handling the remote login.
---> System.Exception: Correlation failed.
  --- End of inner exception stack trace ---
  at Microsoft.AspNetCore.Authentication.RemoteAuthenticationHandler`1.HandleRequestAsync()
  at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context)
  at Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware.<Invoke>g__Awaited|6_0(ExceptionHandlerMiddleware middleware, HttpContext context, Task task)

应用Azure AD配置片段:

{
   "Instance": "https://login.microsoftonline.com/",
   "Domain": "xxxxx",
   "TenantId": "xxxxx",
   "ClientId": "xxxxx",
   "CallbackPath": "/signin-oidc",
   "ClientSecret": "xxxxx"
}

Docker运行命令:

docker run --env-file envFileWeb.txt -v c:/temp/aa/:/app/aa  -it --rm -p 8543:8080 --name aspnetcore_sample xxxxx.azurecr.io/xxxx:latest

通过Visual Studio调试Docker时,日志仍显示该错误,但页面未重定向到signin-oidc且能正常访问;注释CallbackPath配置后,站点仍重定向到该路径并报错。

解决方案

1. 对齐Docker端口映射与HTTPS配置

当前Docker命令将本地8543端口映射到容器内8080端口(HTTP),但登录流程依赖HTTPS,需调整为HTTPS端口映射:

  • 修改docker run命令,映射HTTPS端口并配置证书:
    docker run --env-file envFileWeb.txt -v c:/temp/aa/:/app/aa -v ${USERPROFILE}\.aspnet\https:/https/ -e ASPNETCORE_URLS="https://+:443;http://+:8080" -e ASPNETCORE_Kestrel__Certificates__Default__Path=/https/YourAppCert.pfx -e ASPNETCORE_Kestrel__Certificates__Default__Password="your-cert-password" -it --rm -p 8543:443 -p 8080:8080 --name aspnetcore_sample xxxxx.azurecr.io/xxxx:latest
    
  • 确保Azure AD应用注册中的重定向URI设置为https://localhost:8543/signin-oidc,与本地访问地址完全一致。

2. 调整Cookie安全配置

关联Cookie丢失通常与SameSite或Secure属性配置不当有关,在ConfigureServices中添加Cookie配置:

services.Configure<CookieAuthenticationOptions>(AzureADDefaults.CookieScheme, options =>
{
    // 跨域场景下需设置为None,配合HTTPS使用
    options.Cookie.SameSite = SameSiteMode.None;
    // 强制Cookie仅通过HTTPS传输
    options.Cookie.SecurePolicy = CookieSecurePolicy.Always;
});

3. 统一回调路径配置

/signin-oidc是Azure AD认证的默认回调路径,无需注释,只需确保:

  • 应用配置中的CallbackPath与Azure AD重定向URI的路径部分一致;
  • 在OnAuthorizationCodeReceived方法中,显式指定正确的回调URI,避免自动获取的地址不匹配:
    private async static Task OnAuthorizationCodeReceived(AuthorizationCodeReceivedContext ctx)
    {
        // ... 原有代码
        // 替换为实际的HTTPS回调地址
        var redirectUri = "https://localhost:8543/signin-oidc";
        var result = await authContext.AcquireTokenByAuthorizationCodeAsync(
            ctx.ProtocolMessage.Code, new Uri(redirectUri), credential, resource: AZUREADGRAPH_RESOURCE);
        // ... 原有代码
    }
    

4. 验证Redis缓存的正确性

确保Redis连接字符串配置正确,且Token缓存未干扰关联Cookie的生成:

  • 检查CacheConnection环境变量是否在envFileWeb.txt中正确设置;
  • 确认Redis服务正常运行,容器可访问该Redis实例。

5. 确认请求管道顺序

确保认证中间件的顺序正确,当前Configure方法中顺序已正确,但需确认UseHttpsRedirection在UseAuthentication之前,确保所有请求先跳转至HTTPS:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    // ... 原有代码
    app.UseHttpsRedirection();

    app.UseRouting();
    app.UseAuthentication();
    app.UseAuthorization();
    // ... 原有代码
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 03:25:28