WebAPI OAuth 注销 - 如何删除令牌 Cookie?

2023-12-01

我有一个带有 OAuth 登录配置的 WebAPI,如下所示:

app.UseOpenIdConnectAuthentication(
    new OpenIdConnectAuthenticationOptions
    {
        ClientId = clientId,
        Authority = authority,
        PostLogoutRedirectUri = "https://www.microsoft.com/",
        Notifications = new OpenIdConnectAuthenticationNotifications
        {
            AuthenticationFailed = context =>
            {
                context.HandleResponse();
                context.Response.Redirect("/Error?message=" + context.Exception.Message);
                return Task.FromResult(0);
            }
        }
    });

并强制所有控制器使用登录

config.Filters.Add(new System.Web.Http.AuthorizeAttribute());

我现在想添加一个名为 LogoutController 的 ApiController(猜猜它是做什么的)。

我发现我可以从 MVC 注销 using

System.Web.Security.FormsAuthentication.SignOut();

但我没有以这种方式从 WebAPI 注销。我没有找到任何如何从 WebAPI 注销的信息。但我发现注销过程中可能存在错误,cookie 会被保留,必须手动删除,但是,代码又是MVC了,好像拿不到HttpCookie进入我的HttpResponseMessage object:

    [HttpGet]
    public HttpResponseMessage Logout()
    {
        FormsAuthentication.SignOut();

        // clear authentication cookie
        HttpCookie cookie1 = new HttpCookie(FormsAuthentication.FormsCookieName, "");
        cookie1.Expires = DateTime.Now.AddYears(-1);

        var response = Request.CreateResponse(HttpStatusCode.OK);
        response.Content = new StringContent("<html><title>Logout successful</title><body style=\"font-family:sans-serif\"><div style=\"display:table; width:100%; height:100%; margin:0; padding:0; \"><div style=\"display:table-cell; vertical-align:middle; text-align:center;\">You have been successfully logged out.<br>You can close this window/tab now.</div></div></body></html>");
        response.Headers.AddCookies(cookie1); // Types don't match
        return response;
    }

如何实现我的 WebAPI 已注销并且需要在登录之前再次完成 OAuth?


最简单的方法是客户端本身“忘记”令牌 - 无需告诉服务器(这就是清除身份验证 cookie 的真正作用 - 让浏览器删除 cookie)。

如果您希望令牌本身不再有效,则需要维护已撤销令牌的列表。由于各种原因,您可能希望访问令牌始终有效但寿命短暂,并改为撤销刷新令牌。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WebAPI OAuth 注销 - 如何删除令牌 Cookie? 的相关文章

随机推荐