我通过以下组合实现这一目标:1)浏览器隐身模式(Chrome)2)应用程序位于Azure应用程序网关的后面(如果不是,则不会复制)。基于Cookie的关联性已关闭(默认);如果将其打开,似乎会使再现发生的频率更高。
代码是普通的普通OIDC authN + Cookie。
services.AddAuthentication(options =>
{
options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
})
.AddAzureAd(options => {
Configuration.Bind("AzureAd", options);
})
.AddCookie(p => p.SlidingExpiration = true);
我按照建议将X-Forwarded-Proto标头转发到auth中间件,因此redirect_uri使用正确的协议方案。
以代码方式处理
我试图处理OnRemoteFailure()事件,并重定向到“ / Home / AuthRedirect”,这是一个等待20秒的匿名页面,然后重定向到“ /”(主页)。它似乎有时起作用,但并非总是如此。我没有主意。
WORKAROUND
1)用户可以再次转到主页,然后按F5键,直到它起作用为止。似乎每个F5都使它们向前迈进了一步,一旦填充了OpenID cookie,其他所有内容(在openid完成后,我通过adal.js可以使用AJAX获得更多的身份验证)。2)绕过应用程序网关,并使用直接服务结构群集DNS名称(不可接受,因为它是http)。
详细信息
System.Exception:关联失败。在Microsoft.AspNetCore.Authentication.RemoteAuthenticationHandler`1.d__12.MoveNext()---从之前引发异常的位置开始的堆栈结束跟踪---在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)在Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.d__6.MoveNext()---从之前引发异常的位置开始的堆栈结束跟踪---在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)在Microsoft.AspNetCore.Builder.RouterMiddleware.d__4.MoveNext()---从之前引发异常的位置开始的堆栈结束跟踪---在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)在Microsoft.AspNetCore.Builder.RouterMiddleware.d__4.MoveNext()---从之前引发异常的位置开始的堆栈结束跟踪---在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)在Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.d__7.MoveNext()
我通过以下组合实现这一目标:1)浏览器隐身模式(Chrome)2)应用程序位于Azure应用程序网关的后面(如果不是,则不进行复制)。基于Cookie的相似性已关闭(...