ADFS身份验证期间的间歇重定向循环验证:app.SetDefaultSignInAsAuthenticationType(WsFederationAuthenticationDefaults.AuthenticationType);app.UseCookieAuthentication(newCookieAuthenticationOptions{AuthenticationType=WsFederationAuthenticationDefaults.AuthenticationType});app.UseWsFederationAuthentication(newWsFederationAuthenticationOptions{Wtrealm=Settings.Auth.Wtrealm,MetadataAddress=Settings.Auth.MetadataAddress});我还有一个自定义身份验证过滤器(与AuthorizeAttribute结合使用):varauthenticated=user.Identity.IsAuthenticated;如果(!经过身份验证){返回;}/*如果尚未完成则重定向到配置文件设置*/}publicvoidOnAuthenticationChallenge(AuthenticationChallengeContextfilterContext){}}这一半时间工作正常,但有时,在初始登录时,应用程序和ADFS登录之间会发生重定向循环这似乎是特定于会话的(并非所有用户同时),一旦重定向循环发生,它似乎一直在发生,直到应用程序池被刷新。当重定向循环发生时,我仍然可以看到(在Chrome的网络选项卡中)看起来像是ADFS发出的有效令牌。我很难找出根本原因,但我发现-当循环没有发生时,user.Identity的类型为ClaimsIdentity并且IsAuthenticated为true。当它确实发生时,IsAuthenticated为false,但user.Identity的类型为WindowsIdentity。IIS中禁用所有形式的身份验证(匿名除外)。IISExpress没有在任何地方使用。是什么原因造成的?您使用会话数据和/或TempData吗?我知道这与cookie有关。我也有同样的问题。这里有一些更多的信息和一个很好的解释。可以通过强制Owin使用System.Web的cookie管理(从这里)来解决这个问题:语境”);}varwebContext=context.Get(typeof(HttpContextBase).FullName);varcookie=webContext.Request.Cookies[key];返回cookie==null?null:cookie.Value;}publicvoidAppendResponseCookie(IOwinContextcontext,stringkey,stringvalue,CookieOptionsoptions){if(context==null){thrownewArgumentNullException("context");}if(options==null){thrownewArgumentNullException("options");}varwebContext=context.Get(typeof(HttpContextBase).FullName);booldomainHasValue=!string.IsNullOrEmpty(options.Domain);boolpathHasValue=!string.IsNullOrEmpty(options.Path);boolexpiresHasValue=options.Expires.HasValue;varcookie=newHttpCookie(key,value);如果(domainHasValue){cookie.Domain=options.Do主要的;}if(pathHasValue){cookie.Path=options.Path;}if(expiresHasValue){cookie.Expires=options.Expires.Value;}if(options.Secure){cookie.Secure=true;}如果(选项.HttpOnly){cookie.HttpOnly=true;}webContext.Response.AppendCookie(cookie);}publicvoidDeleteCookie(IOwinContextcontext,stringkey,CookieOptionsoptions){if(context==null){thrownewArgumentNullException("context");}if(options==null){thrownewArgumentNullException("options");}AppendResponseCookie(context,key,string.Empty,newCookieOptions{Path=options.Path,Domain=options.Domain,Expires=newDateTime(1970,1,1,0,0,0,DateTimeKind.Utc),});}}Wiring:app.UseCookieAuthentication(newCookieAuthenticationOptions{//...CookieManager=newSystemWebCookieManager()})没错创建一个新的cookie管理器而不是使用现有的cookie管理器来解决问题。app.UseCookieAuthentication(newCookieAuthenticationOptions{AuthenticationType=WsFederationAuthenticationDefaults.AuthenticationType,CookieManager=newSystemWebCookieManager()});以上就是C#学习教程的全部内容:ADFS认证时的间歇性重定向循环,如果对大家有用,需要了解更多C#学习教程,希望大家多多关注——本文采集自上网,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
