← 全部文章

把公司登录放在内部工具前面

2026年11月4日,作者:The Casbin Authors

内部工具通常有其中一种毛病。要么根本没有登录,因为它本来就是在笔记本上或者 VPN 后面跑的;要么自带一套账号和密码,没人改、所有人共用。

两种情况都可以在代理这一层解决。如果网关在转发请求之前先要求登录,应用就根本见不到未登录的访客,而登录背后的身份系统就是公司已经在用的那一套。

CasWAF 用 Casdoor 做这件事。这篇讲清楚流程、涉及的三个设置,以及哪些场景不合适。

流程

  1. 访客请求一个开了登录保护的站点。他身上没有 casdoor_access_token cookie,CasWAF 把他送去 Casdoor 应用自己的登录页,并记住他原本要访问的路径。
  2. 他登录之后,Casdoor 把他送回站点域名下的 /caswaf-handler。CasWAF 拿 code 换 access token,写进 cookie,再跳回最初的路径。
  3. 之后每个请求,CasWAF 先用应用的证书验 token 的签名,再走站点的规则。token 过期或者验不过,就回到登录页。

应用完全不用改。它收到的请求已经通过了检查,cookie 一起带过来。

怎么配

整个配置只有三件事:

  1. 一个 Casdoor 应用,给这个站点用,放在 CasWAF 自己应用所在的组织里。新建一个或者共用一个都行。

  2. 一个回调地址,写在这个应用上,用站点的域名:

    https://app.example.com/caswaf-handler

    站点走 HTTP 就换成 http://,CasWAF 会按访客进来的协议告诉 Casdoor。

  3. 在 CasWAF 的站点里选中这个应用,就是 Casdoor app 那一项。

就这样。谁能进来由 Casdoor 决定:应用属于哪个组织、要不要允许注册、开了哪些登录方式。如果公司已经在用 Casdoor 接 LDAP,或者只放行了 Azure AD、Okta、GitHub 其中之一,这个内部工具会全部继承,包括多因素认证。

应用能看到什么

请求带着 casdoor_access_token cookie 到达。应用如果需要知道用户是谁,可以读这个 token,用 Casdoor 公布的同一张证书验签;不需要的话,忽略它就行。

CasWAF 还会带上 X-Real-Ip,所以应用看到的是访客地址而不是网关地址;以及 X-Forwarded-Proto,让应用知道访客是不是走的 HTTPS。

不合适的场景

  • 整个站点都在登录后面。 如果同一个站点还要对外提供 webhook、健康检查或者其他服务调用的接口,那些接口得放到另一个站点或域名上,不开登录保护。
  • CasWAF 里没有按用户或用户组的规则。 这个检查只说明访客登录了这个应用,仅此而已。按组或按人限制访问属于 Casdoor 的事。
  • 接口调用方要另想办法。 脚本用请求头里的 token 调接口,不是带 cookie 的浏览器;这类端点放在另一个站点上,用别的方式保护。
  • 会话在 Casdoor 里。 改权限、停用账号、缩短 token 有效期都在那边做,下一个请求就按新规则走。

为什么放在代理层

另一种做法是给每个应用各自加认证,那意味着每个技术栈装一个库、每个服务存一份会话,每次对“已登录”的定义还不一样。放在代理层只有一个实现、一个出问题时该看的地方和一条审计记录:到达应用的每个请求,前面都对应着 Casdoor 里的一次登录。

具体设置和 cookie 细节在 CasWAF 的登录保护页面。如果还没用上 Casdoor,它的文档里有服务端安装和应用配置的说明。