猿问

关联失败。OIDC身份验证期间,在Microsoft.AspNetCore

我通过以下组合来实现这一目标: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秒的匿名页面,然后重定向到“ /”(主页)。似乎有时会奏效,但并非总是如此。我没主意了。


解决方法


1)用户可以再次转到主页,然后按F5键,直到它起作用。似乎每个F5都使它们向前迈进了一步,一旦填充了OpenID cookie,其他所有内容(在openid完成后,我通过adal.js可以使用AJAX获得更多的身份验证)。2)绕过应用程序网关,并使用直接服务结构群集DNS名称(因为它是http,所以不可接受)。


细节


System.Exception:关联失败。在Microsoft.AspNetCore.Authentication.RemoteAuthenticationHandler`1.d__12.MoveNext()处-从上次引发异常的位置开始的堆栈跟踪-在System.Runtime处System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()处。 Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.d__6.MoveNext()上的CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)-从上次引发异常的位置开始的堆栈结束跟踪-在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw (),位于Microsoft.AspNetCore.Builder.RouterMiddleware.d__4的System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)处。

烙印99
浏览 286回答 3
3回答

森林海

我有同样的问题,如果您的环境是Web场,则应使用DataProtection共享密钥。

HUH函数

我在Chrome中遇到了类似的Correlation错误,但在Safari中却没有。这解决了我所有的相关问题。

慕容708150

我遇到了同样的问题,但是我的问题是由于我对身份验证工作流程的理解,这是错误的。有两个重要的回调URL,我认为它们的作用相同。我错了这在Startup.cs中定义.AddOpenIdConnect("Auth0", options =>            {                options.CallbackPath = new PathString("/signin-auth0");一旦身份验证提供者在成功身份验证后返回,它将告诉您应用程序中的授权中间件,应在哪个URL上侦听。然后,中间件本身会将应用程序重定向到您的Login操作中定义的回调URL(下面的示例代码)。此后(经过两天的奋斗),一切都开始了。public class AccountController : Controller{    [HttpGet]    public async Task Login()    {        await HttpContext.ChallengeAsync("Auth0", new AuthenticationProperties() { RedirectUri = "/my-callback-page" });    }}我遇到了同样的问题,但是我的问题是由于我对身份验证工作流程的理解,这是错误的。有两个重要的回调URL,我认为它们的作用相同。我错了这在Startup.cs中定义.AddOpenIdConnect("Auth0", options =>            {                options.CallbackPath = new PathString("/signin-auth0");一旦身份验证提供者在成功身份验证后返回,它将告诉您应用程序中的授权中间件,应在哪个URL上侦听。然后,中间件本身会将应用程序重定向到您的Login操作中定义的回调URL(下面的示例代码)。此后(经过两天的奋斗),一切都开始了。public class AccountController : Controller{    [HttpGet]    public async Task Login()    {        await HttpContext.ChallengeAsync("Auth0", new AuthenticationProperties() { RedirectUri = "/my-callback-page" });    }}
随时随地看视频慕课网APP
我要回答