我在Kubernetes(AKS)上运行的应用程序有一个标准的oAuth2身份验证流程,我使用oAuth2-proxy和Keycloak添加了这个流程。通过浏览器的密码凭据授权类型/标准流程运行良好。在重定向到KC登录页面并手动登录后,oAuth2-proxy允许用户通过,并显示应用程序页面(echo服务器)。
现在我尝试使用授权类型的客户端凭证,例如来自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
我不确定是否需要在入口中包含此脚本:
# 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-代理无法根据Keycloak验证令牌
我可以访问Keycloak、Nginx和oauth2-proxy日志。到目前为止,oauth2-proxy日志帮助解决了早期的问题,但我一直缺少更好的分析方法。我希望oAuth2-proxy上有一个跟踪日志级别,我可以使用我的Helm值文件通过env var启用它,但文档中的可用选项似乎不合适。
我遗漏了什么?我如何才能更好地分析此问题?或者已经有了关于根本原因/修复的任何建议?
1条答案
按热度按时间rmbxnbpk1#
您需要启用“资源服务器模式”(--skip-jwt-bearer-tokens = true)标志。