目标
我想使用 keycloak 作为我的 minikube 集群的 oauth/oidc 提供程序。
问题
我对可用的文档感到困惑。
根据此文档, ngnix-ingress 可以使用注释处理外部身份验证
但从文档中并不清楚这里使用哪种身份验证。是 OAUTH/BASIC/SAML 吗???
例如,我没有找到任何变量来为入口提供 oauth CLIENTID。
其他发现
我还发现了这个项目https://github.com/oauth2-proxy/oauth2-proxy 这似乎是我需要的并提供以下设计
用户 -> ngnix-ingress -> oauth2-proxy -> keycloak
问题:
我有一个应用程序通过 oauth2-proxy 连接到 Keycloak,通常一切运行正常。
有时我会在 oauth2-proxy 日志文件中看到以下错误:
unable to redeem refresh token: failed to get token: oauth2: cannot fetch token: 400 Bad Request
Response: {"error":"invalid_grant","error_description":"Session doesn't have required client"},
removing session.
Run Code Online (Sandbox Code Playgroud)
Keycloak日志文件中相应的消息是这样的:
org.keycloak.events
type=REFRESH_TOKEN_ERROR, realmId=xxx, clientId=xxx, userId=f:ce9d954a-de51-48a4-a70b-xxx:xxx, ipAddress=x.x.x.x, error=invalid_token, grant_type=refresh_token, refresh_token_type=Refresh, refresh_token_id=bb77d7aa-c061-45d4-b2f7-fe938d5537cb, client_auth_method=client-secret
Run Code Online (Sandbox Code Playgroud)
我在例如“会话没有所需的客户端”意味着什么?中发现了相同的错误消息。但这个问题是针对 Keycloak 4.x 的,而我使用的是最新的 16.1.1。此外,我不使用“记住我”会话。
源代码仅在 oidc/TokenManager.java 中包含此消息,其中建议存在“跨 DC 环境”问题,但我们没有跨数据中心环境,只有同一 Kubernetes 命名空间中的三个实例安装了最新的 Helm 图表。
还有什么可能导致这个问题?
我是 Kubernetes 的新手,我一直在学习 Ingress。在 Ingress 处处理 TLS 证书和身份验证的想法给我留下了深刻的印象。我添加了一个简单的静态文件服务器,并添加了证书管理器,所以我基本上有一个 HTTPS 静态网站。
我读到 NGINX 入口控制器可以与 oauth2 代理一起使用来处理入口处的身份验证。问题是我根本无法做到这一点。我可以确认我的 oauth2-proxy 部署服务和部署存在且正确 - 在 Pod 的日志中,我可以看到来自 NGINX 的请求,但我看不到它在 Azure B2C 上实际调用的 uri。每当我尝试访问我的服务时,我都会收到 500 内部错误 - 如果我将 /oath2/auth 地址放在浏览器中,我会收到“不支持请求中指定的范围‘openid’。”。但是,如果我在 Azure 中测试运行用户流,则测试 URL 还会指定“openid”并且它按预期运行。
我认为如果我能找出如何监控来自 Azure 的 oauth2-proxy 请求(即通过观察它的 uri 找出我的配置错误的地方),我可以解决这个问题 - 否则,也许已经这样做的人可以告诉我在哪里我在配置中出错了。
我的配置如下:
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
k8s-app: oauth2-proxy
name: oauth2-proxy
namespace: default
spec:
replicas: 1
selector:
matchLabels:
k8s-app: oauth2-proxy
template:
metadata:
labels:
k8s-app: oauth2-proxy
spec:
containers:
- args:
- -provider=oidc
- -email-domain=*
- …Run Code Online (Sandbox Code Playgroud) 我第一次尝试Keycloak,并使用Keycoak作为oauth2_proxy的提供者(https://github.com/oauth2-proxy/oauth2-proxy/blob/v5.1.1/providers/keycloak.go)通过LDAP实现用户身份验证。我已按照 Keycloak 内的所有步骤创建领域、创建客户端、客户端 ID、客户端密钥等。此外,Keycloak API“/token”正在传递。但是,一旦我在 keycloak 登录屏幕中传递用户名/密码,我就会在 oauth2_proxy 中收到以下错误:
[2020/05/30 10:15:37] [requests.go:25] 401 GET http://172.20.0.10:8080/auth/realms/master/protocol/openid-connect/userinfo {"error":"invalid_token","error_description":"Token verification failed"}
Run Code Online (Sandbox Code Playgroud)
另外,我在启动 oauth2_proxy docker 容器时传递以下参数:
command: -upstream=static://200 -http-address=0.0.0.0:8080 -https-address=0.0.0.0:8443
-redirect-url="https://portal.acme.com/oauth2/callback"
-scope='test-scope' -email-domain=* -cookie-domain=* -cookie-secure=false -cookie-secret=skjgfsgfsf23524
-cookie-samesite="none" -provider=keycloak
-client-id='abcd-client' -client-secret='c0281257-b600-40b2-beae-68d1f2d72f02'
--tls-cert-file=/etc/acme.com.pem
--tls-key-file=/etc/acme.com.key
-login-url="http://localhost:7575/auth/realms/master/protocol/openid-connect/auth"
-redeem-url="http://172.20.0.10:8080/auth/realms/master/protocol/openid-connect/token"
-validate-url="http://172.20.0.10:8080/auth/realms/master/protocol/openid-connect/userinfo"
Run Code Online (Sandbox Code Playgroud)
有人可以帮忙解决可能丢失或出错的问题吗?任何线索或提示都会非常有帮助。
我在通过 oauth2-proxy/keycloak 进行身份验证 kubernetes webapp 时遇到问题。你不知道出了什么问题
这三个应用程序单独运行。
认证流程说明:
Keycloak 登录页面显示正确,但用户登录后出现: 500 Internal Server Error with URL https://oauth2-proxy.domain.com/oauth2/callback?state=753caa3a281921a02b97d3efeabe7adf%3Ahttps%3A%2F%2Ftest-app.domain .com%2F&session_state=f5d45a13-5383-4a79-aa7a-56bbaa16056f&code=5344ae72-a9ee-448f-95ef-45e413f69f4b.f5d45a13-5383-4a79-aa7a-56bbaa16056f.7873 2ee5-af17-43fc-9f52-856e06bfce04
来自 oauth2-proxy 的日志
[2021/03/16 11:25:35] [stored_session.go:76] Error loading cookied session: cookie "_oauth2_proxy" not present, removing session
10.30.21.14:35382 - - [2021/03/16 11:25:35] oauth2-proxy.domain.com GET - "/oauth2/auth" HTTP/1.1 "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0.3 Safari/605.1.15" 401 13 0.000
10.96.5.198:35502 - - [2021/03/16 11:25:35] oauth2-proxy.domain.com GET - …Run Code Online (Sandbox Code Playgroud) 您能否解释一下为什么可以使用oauth2-proxy作为 sidecar?例如,在一个架构中,k8s 中的每个 pod 都有这个 sidecar,它代理 Keycloack。
我正在尝试使用 Kubernetes 中使用的 \xc2\xa0 oauth2_proxy \xc2\xa0 对 AAD(Azure Active Directory)进行身份验证以获取访问令牌。
\n首先,我正在努力让正确的身份验证流程发挥作用。
\n其次,重定向到我的应用程序后,访问令牌不在oauth2_proxy中指定的请求标头中 \xc2\xa0documentation 中指定的请求标头中。
\n