【问题标题】:Get user-id from Caddy and CherryPy basic-auth从 Caddy 和 CherryPy basic-auth 获取用户 ID
【发布时间】:2022-08-03 21:15:51
【问题描述】:

我使用 Caddy 作为反向代理,在 CherryPy 上提供一个网络应用程序。 Caddy 正在处理基本身份验证,我想将用户名传递给 CherryPy 应用程序。

我已经像这样修改了我的 Caddyfile:

my.example.com {
  redir /data_tools /data_tools/
  handle_path /data_tools/* {
    import basic-auth
    reverse_proxy data_tools:1234 {
      header_down +X-WEBAUTH-USER={http.auth.user.id}
    }
  }
}

当我转到 my.example.com/data_tools/ 时,我看到我的标题正确填充。如果我访问 my.example.com/data_tools/index.html,标题就在那里,但它是空的。

我试图在 CherryPy 中用不同的钩子拦截标题,但我的标题根本没有出现在那里。

def show_headers():
    print("Request")
    print(json.dumps(cherrypy.request.headers, indent="\t"))
    print("Response")
    print(json.dumps(cherrypy.response.headers, indent="\t"))

cherrypy.tools.get_user = cherrypy.Tool('on_start_resource', show_headers)

^^^ 显示预期的标题,但不是我的自定义标题。

有什么建议么?

【问题讨论】:

  • 配置标头的 caddy 语法不使用等号:header_down [+|-]<field> [<value|regexp> [<replacement>]]header_down +X-WEBAUTH-USER {http.auth.user.id} 怎么样?
  • @cyraxjoe - 谢谢,但没有区别。如果我去 .../data_tools/ 仍然会显示,但不会显示 .../data_tools/index.html 并且不会在 CherryPy 中显示。

标签: cherrypy caddy caddyfile


【解决方案1】:

我从 Caddy 论坛获得了帮助。

在我的 caddyfile 中,这就是我的 basic-auth 部分。

(basic-auth) {
  basicauth / {
    my-name XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
  }
}

此处的 / 使得 basicauth 仅适用于对 / 的请求,而不适用于其他任何请求。删除它以使其匹配所有请求。

一旦我这样做了,我可以通过 CherryPy 看到标题,尽管它们没有显示在浏览器的开发人员工具中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-18
    • 2018-09-24
    • 2022-01-21
    • 1970-01-01
    • 2019-01-09
    • 2017-12-14
    • 2020-11-12
    相关资源
    最近更新 更多