【发布时间】:2022-12-08 08:31:08
【问题描述】:
我在 Kubernetes (AKS) 上运行的应用程序有一个有效的标准 oAuth2 身份验证流程,我使用 oAuth2-proxy 和 Keycloak 添加了它。通过浏览器的密码凭据授予类型/标准流工作正常。在重定向到 KC 登录页面并手动登录后,oAuth2-proxy 让用户通过并显示应用程序页面(回显服务器)。
现在我正在尝试使用 Grant 类型的客户端凭据,例如来自 Postman 或 Curl。我已启用“已启用服务帐户”。我可以毫无问题地检索 access_token / bearer 令牌,并将其包含在标头“授权”中。我可以看到该令牌有效,其他内容看起来也正确,但请求未通过。oauth2-proxy 重定向请求到登录页面。
oAuth2-代理参数:
- --provider=keycloak-oidc
- --client-id=nginx
- --client-secret=topsecret
- --redirect-url=https://my-redirect-url
- --oidc-issuer-url=https://myurl
- --silence-ping-logging
- --auth-logging=true
- --session-store-type=redis
- --set-xauthrequest=true
- --set-authorization-header=true
- --pass-authorization-header=true
- --pass-access-token=true
- --insecure-oidc-allow-unverified-email
- --show-debug-on-error
- --errors-to-info-log
- --cookie-secret=gf...
- --cookie-httponly=false
- --force-json-errors
我不确定是否需要在 Ingress 中包含此脚本:
# nginx.ingress.kubernetes.io/configuration-snippet: |
# auth_request_set $name_upstream_1 $upstream_cookie__oauth2_proxy_1;
# access_by_lua_block {
# if ngx.var.name_upstream_1 ~= "" then
# ngx.header["Set-Cookie"] = "_oauth2_proxy_1=" .. ngx.var.name_upstream_1 .. ngx.var.auth_cookie:match("(; .*)")
# end
# }
候选根本原因:
- 令牌不包含检查的内容(KC 配置...)
- 令牌没有以正确的方式包含在请求中
- oAuth2-proxy 配置缺少从请求中正确获取令牌的内容
- oAuth2-proxy 无法根据 Keycloak 验证令牌
我可以访问 Keycloak、Nginx 和 oauth2-proxy 日志。到目前为止,oauth2-proxy 日志帮助解决了早期的问题,但一直以来我都没有更好地分析正在发生的事情。我希望 oAuth2-proxy 上有一个跟踪日志级别,我可以使用我的 Helm 值文件通过环境变量启用它,但文档中的可用选项似乎不合适。
我错过了什么?我怎样才能更好地分析这个问题?或者已经有关于根本原因/修复的任何建议?
【问题讨论】:
标签: oauth-2.0 oauth keycloak oauth2-proxy