首页 > 解决方案 > 使用 Traefik ForwardAuth 设置身份验证/授权

问题描述

我正在使用 Docker 设置一些服务,Traefik 2 充当这些服务的反向代理。到目前为止,我一直在使用 Basic Auth 来保护对服务的访问,但我正试图摆脱用户/密码提示。

查看 Traefik 的文档,我发现“ ForwardAuth ”中间件看起来不错。我打算用它来代替 Basic Auth,但没有提供完整的实现示例作为示例,我很难尝试设置它。

到目前为止,感谢 Traefik forward-auth,我成功地调用了远程服务器上负责身份验证的特定 URL(该服务器是我自己使用 Spring Boot 开发的)。据我了解,如果认证服务器回答 200,则表示“认证成功”,而另一个代码表示“认证失败”。然而,我目前无法在远程服务器上编写身份验证代码,因为我不知道如何检查是否必须返回 200 或其他内容。特别是我不知道如何在 Traefik 和身份验证服务器之间传递信息。

基本上,我遇到的问题是:

  1. 我无法使用 Traefik 向用户询问他/她的用户名/密码
  2. 当认证服务器收到来自 Traefik 的请求时,它无法定义源请求是以前认证的用户

下图显示了我最担心的问题:

我关于前向认证的问题

我想要实现的是以下行为:

  1. 用户尝试在不输入任何用户名/密码的情况下访问 Docker 服务
  2. Traefik 确定用户未经过身份验证,这要归功于 forward-auth 它要求身份验证服务器进行身份验证
  3. 认证服务器判断用户未通过认证,将用户重定向到登录页面
  4. 用户在身份验证服务器上输入他/她的用户名/密码
  5. 用户被重定向到 Docker 服务
  6. Traefik 确定用户已通过身份验证

到目前为止,我可以成功实现步骤 1 到 5,但我不知道如何实现步骤 6。

这是使用 ForwardAuth 的正确方法吗?如果是,是否有一些我必须使用的标头来传输身份验证信息?如果没有,是否可以使用 ForwardAuth 实现我想要的?

标签: spring-bootdockerauthenticationtraefiktraefik-authentication

解决方案


据我了解,traefik 还转发原始请求随附的任何标头。如果您不过滤任何。请参阅文档 traefik forward-auth。


推荐阅读