You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core MVC对接EKOAPP外部认证如何通过POST请求实现登出

解决方案

方案1:自动提交表单方案(推荐,无需EKO侧额外配置)

该方案利用浏览器表单提交不受CORS限制、自动携带目标域名Cookie的特性,完美适配EKO的登出要求,是目前兼容性最好的实现方式:

第一步:修改后端登出接口

仅清除本地应用的身份Cookie即可,无需调用OpenIdConnect的登出方法(EKO未实现OIDC会话标准,调用会报错),返回一个自动提交表单的中间页面:

[HttpPost]
public async Task<IActionResult> Logout()
{
    // 清除本站点的身份认证Cookie,完成本地登出
    await HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme);
    // 传入登出完成后跳转回本站的地址
    ViewBag.PostLogoutRedirectUri = Url.Action("Index", "Home", null, Request.Scheme);
    return View();
}

第二步:创建自动提交表单的登出中间页

新增Logout.cshtml视图,内容如下:

@{
    Layout = null;
}
<!DOCTYPE html>
<html>
<head>
    <title>正在登出...</title>
</head>
<body onload="document.getElementById('ekoLogoutForm').submit()">
    <form id="ekoLogoutForm" action="https://app-h1.eu.ekoapp.com/api/v1/auth/logout" method="post">
        <!-- 若EKO登出接口支持回调参数,可在此处添加隐藏域传入回调地址,参数名需以EKO官方要求为准 -->
        <input type="hidden" name="post_logout_redirect_uri" value="@ViewBag.PostLogoutRedirectUri" />
        <noscript>
            <p>浏览器未启用JavaScript,请点击下方按钮完成登出:</p>
            <button type="submit">确认登出</button>
        </noscript>
    </form>
    <!-- 若EKO不支持回调参数,可添加以下JS,登出请求发送后自动跳回本站 -->
    <script>
        setTimeout(() => {
            window.location.href = "@ViewBag.PostLogoutRedirectUri";
        }, 1500);
    </script>
</body>
</html>

方案2:前端AJAX请求方案(需EKO侧配置CORS)

如果EKO侧可以配置CORS规则,可联系EKO运维将你的应用域名添加到https://app-h1.eu.ekoapp.com/api/v1/auth/logout接口的CORS允许列表,同时开启允许携带凭证(Credentials)的权限,配置完成后你之前的前端AJAX代码即可正常运行。

注意事项

之前调用OIDC登出报错是因为EKO未实现OIDC标准的end_session_endpoint端点,无需再尝试走标准OIDC登出流程,按上述自定义方案实现即可。

内容的提问来源于stack exchange,提问作者Andreas P.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.18 22:36:03