spring-boot - 使用 Traefik ForwardAuth 设置身份验证/授权
问题描述
我正在使用 Docker 设置一些服务,Traefik 2 充当这些服务的反向代理。到目前为止,我一直在使用 Basic Auth 来保护对服务的访问,但我正试图摆脱用户/密码提示。
查看 Traefik 的文档,我发现“ ForwardAuth ”中间件看起来不错。我打算用它来代替 Basic Auth,但没有提供完整的实现示例作为示例,我很难尝试设置它。
到目前为止,感谢 Traefik forward-auth,我成功地调用了远程服务器上负责身份验证的特定 URL(该服务器是我自己使用 Spring Boot 开发的)。据我了解,如果认证服务器回答 200,则表示“认证成功”,而另一个代码表示“认证失败”。然而,我目前无法在远程服务器上编写身份验证代码,因为我不知道如何检查是否必须返回 200 或其他内容。特别是我不知道如何在 Traefik 和身份验证服务器之间传递信息。
基本上,我遇到的问题是:
- 我无法使用 Traefik 向用户询问他/她的用户名/密码
- 当认证服务器收到来自 Traefik 的请求时,它无法定义源请求是以前认证的用户
下图显示了我最担心的问题:
我想要实现的是以下行为:
- 用户尝试在不输入任何用户名/密码的情况下访问 Docker 服务
- Traefik 确定用户未经过身份验证,这要归功于 forward-auth 它要求身份验证服务器进行身份验证
- 认证服务器判断用户未通过认证,将用户重定向到登录页面
- 用户在身份验证服务器上输入他/她的用户名/密码
- 用户被重定向到 Docker 服务
- Traefik 确定用户已通过身份验证
到目前为止,我可以成功实现步骤 1 到 5,但我不知道如何实现步骤 6。
这是使用 ForwardAuth 的正确方法吗?如果是,是否有一些我必须使用的标头来传输身份验证信息?如果没有,是否可以使用 ForwardAuth 实现我想要的?
解决方案
据我了解,traefik 还转发原始请求随附的任何标头。如果您不过滤任何。请参阅文档 traefik forward-auth。
推荐阅读
- ssis - 如何在 SSIS 中的源/目标之间同步数据插入-更新-删除
- node.js - 如何在 forEach 循环节点中使用 Promise?
- java - 使用 AWS SDK for Java 2.x 将大文件上传到 S3 时内存不足
- python - 如何正确使用可选的 argparse 参数和子解析器
- c# - Linq 查询 - 根据条件跳过下一个查询执行
- php - exec:“php-fpm”:在 $PATH 中找不到可执行文件:未知
- c - C语言中的**是什么?
- python - 如何在 Jupyter Notebook 的一个单元格中显示两张图片?(matplotlib) (python)
- python - 从文本(日志)文件中的字典中检索值
- powerbi - DAX 与前一行进行比较并根据条件更新上游行