我正在更新我们的MVC应用程序以使用IdentityServer v3来使用隐式流来实现OpenID Connect身份验证。
我已覆盖AuthenticateLocalAsync
类的IdentityServer UserServiceBase
方法,以调用我们现有的身份验证服务来验证提供的凭据。此服务还设置了我们的应用程序所需的各种cookie。
我遇到的问题是,在登录页面输入凭据后,它不会重定向到ReturnUri
OpenIdConnectAuthenticationOptions
参数中指定的UseOpenIdConnectAuthentication
} 方法。相反,它仍保留在登录页面上,并且似乎进入无限循环,在对通知处理程序SecurityTokenValidated
和SecurityTokenReceived
的调用之间交替。 IdentityServer日志中没有任何错误迹象。
我认为问题的原因与在我们的身份验证服务中设置特定于应用程序的cookie有关。如果我注释掉以下内容,则会在登录时成功重定向:
var cookie = new HttpCookie("AppCookie") { HttpOnly = false, Secure = true };
cookie ["CustomField1"] = HttpUtility.UrlEncode(customValue1);
cookie ["CustomField2"] = HttpUtility.UrlEncode(customValue2);
this._httpContext.Response.Cookies.Set(cookie);
但是,我们的应用程序需要这些cookie,因此需要在响应中设置。为什么设置这些cookie会阻止它重定向?有没有解决方法?非常感谢任何帮助。