我有一个带有ASP.NET Core Identity接口的Identity Server应用程序来管理登录、注册、ecc。
我有一些依赖身份服务器进行身份验证的MVC 应用程序。
一切正常:当我尝试访问受保护的页面时,我被重定向到登录页面,登录后,我被重定向回现在可以访问的受保护页面。
唯一的问题是传递给登录页面的returnUrl类似于
/connect/authorize/callback?client_id=myClientId&redirect_uri=https://localhost:44309/signin-oidc&response_type=code&scope=openid profile email offline_access&code_challenge=yyfbWuF...&x-client-SKU=ID_NETSTANDARD2_0&x-client-ver=5.5.0.0
如果我将此 url 添加到我的注册确认电子邮件链接中,则只有在我启动身份验证请求的同一浏览器中打开该链接时,它才会起作用。
如果确认电子邮件链接在另一个浏览器中打开,它将确认帐户并正确登录,但是,当重定向到客户端时,它将抛出异常:
Exception: Correlation failed.
Unknown location
Exception: An error was encountered while handling the remote login.
Microsoft.AspNetCore.Authentication.RemoteAuthenticationHandler<TOptions>.HandleRequestAsync()
这是因为,我猜,新浏览器没有在其他浏览器的身份验证尝试期间生成的 cookie。
所以我的问题是: 有什么方法可以在重定向到登录页面时获取原始受保护的页面 url,以便我可以在确认电子邮件链接中使用它?
这应该足够了,因为一旦帐户被确认,我将被重定向回我的受保护页面,该页面应该向登录页面触发新的身份验证请求,但是,已经登录,这将是一个静默身份验证。