如何覆盖注销后重定向网址

Posted

技术标签:

【中文标题】如何覆盖注销后重定向网址【英文标题】:How to overwrite post logout redirect url 【发布时间】:2020-11-12 12:11:26 【问题描述】:

我正在使用 IdentityServer3,并且我将 ASP.NET Core 作为客户端应用程序。

这是我的 LoggOff 操作方法

    [HttpPost]
    public async Task LogOff()
    
        await Microsoft.AspNetCore.Authentication.AuthenticationHttpContextExtensions.SignOutAsync(HttpContext, CookieAuthenticationDefaults.AuthenticationScheme);
        await Microsoft.AspNetCore.Authentication.AuthenticationHttpContextExtensions.SignOutAsync(HttpContext, OpenIdConnectDefaults.AuthenticationScheme);
    

当用户注销时,我在提琴手中看到以下重定向

   GET /identity/connect/endsession?post_logout_redirect_uri=https%3A%2F%2Flocalhost%3A44352%2Fsignout-callback-oidc&state=XXXXXX&x-client-SKU=XXXXXX&x-client-ver=5.3.0.0 HTTP/1.1

   GET /identity/logout?id=XXXXXXXXXX 

   GET /identity/connect/endsessioncallback?sid=XXXXXXX

最终在浏览器中的 url 设置为 /identity/logout?id=XXXXXXXXXX。这些是身份服务器的 URL,而不是客户端应用程序 URL。

当注销按钮调用LogOff 操作方法时,这将按预期工作。

现在我有一个要求。当用户转到AccessDenied 页面时,我想先注销用户,然后重定向到AccessDenied 视图。 AccessDenied 页面位于 ClientAppliction 中。所以我有另一个调用 SingnOut 并设置 RedirectUri

的操作方法
    [HttpGet]
    public async Task AccessDenied()
    
        await Microsoft.AspNetCore.Authentication.AuthenticationHttpContextExtensions.SignOutAsync(HttpContext, CookieAuthenticationDefaults.AuthenticationScheme);
        await Microsoft.AspNetCore.Authentication.AuthenticationHttpContextExtensions.SignOutAsync(HttpContext,
            OpenIdConnectDefaults.AuthenticationScheme,
            new Microsoft.AspNetCore.Authentication.AuthenticationProperties()
            
                RedirectUri = "Account/AccessDenied"
            );
    
    

这不起作用。用户仍然转到identity/logout 而不是AccessDenied。看起来它没有设置注销后重定向 uri。

【问题讨论】:

【参考方案1】:

这不是您忘记在网址前加上 / 的错字吗?

喜欢

RedirectUri = "/Account/AccessDenied"

而不是

RedirectUri = "Account/AccessDenied"

【讨论】:

以上是关于如何覆盖注销后重定向网址的主要内容,如果未能解决你的问题,请参考以下文章

如何配置在Django中注销后重定向到哪里?

注销后重定向[关闭]

Facebook注销按钮并在注销后重定向

注销后如何停止 Symfony 重定向

laravel 5.2 登录后重定向到预期的网址

从 ASP.NET MVC 客户端应用程序和 .NET 5 openiddict 服务器注销。注销后重定向 URL 无效