【发布时间】:2018-10-11 23:09:08
【问题描述】:
我使用以下组合来实现这一点:
- 浏览器隐身模式 (Chrome)
- 应用程序位于 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 秒的匿名页面,然后重定向到“/”(主页页)。它有时似乎有效,但并非总是如此。我没有想法。
解决方法
- 用户可以再次进入主页并按 F5 直到此操作生效。似乎每个 F5 都让他们向前迈进了一步,一旦填充了 OpenID cookie,其他一切(openid 完成后我有更多的身份验证,通过 adal.js 用于 AJAX)。
- 绕过应用程序网关并使用直接服务结构集群 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()【问题讨论】:
-
我想知道这是否与 Chrome 调试器中的 Expires/MaxAge 时间总是显示 1969-12-31 有关。这意味着我的 cookie 是会话 cookie,但我无法让它们持久化。
-
我让他们坚持不懈。对这个问题没有影响。
标签: c# asp.net-core asp.net-identity openid-connect azure-application-gateway