标签: oauth2-proxy

使用 nginx-ingress 和 keycloak 在 kubernetes 中进行身份验证的正确设计是什么

目标

我想使用 keycloak 作为我的 minikube 集群的 oauth/oidc 提供程序。

问题

我对可用的文档感到困惑。

根据此文档, ngnix-ingress 可以使用注释处理外部身份验证

  • nginx.ingress.kubernetes.io/auth-method
  • nginx.ingress.kubernetes.io/auth-signin

但从文档中并不清楚这里使用哪种身份验证。是 OAUTH/BASIC/SAML 吗???

例如,我没有找到任何变量来为入口提供 oauth CLIENTID。

其他发现

我还发现了这个项目https://github.com/oauth2-proxy/oauth2-proxy 这似乎是我需要的并提供以下设计

用户 -> ngnix-ingress -> oauth2-proxy -> keycloak

问题:

  1. 我必须使用 oauth2-proxy 来实现 keycloak oauth 吗?
  2. 我说的对吗 ngnix-ingress 没有直接连接到 keycloak 的功能?
  3. 有没有关于 nginx.ingress.kubernetes.io/auth-method 和 nginx.ingress.kubernetes.io/auth-signin 到底在做什么的明确文档?
  4. 是否有任何正确的方法/文档来构建user -> ngnix-ingress -> oauth2-proxy -> keycloak集成?

kubernetes keycloak nginx-ingress oauth2-proxy

9
推荐指数
1
解决办法
6170
查看次数

为什么会出现 invalid_grant 错误并显示“会话没有所需的客户端”?

我有一个应用程序通过 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 图表。

还有什么可能导致这个问题?

keycloak oauth2-proxy

7
推荐指数
1
解决办法
1939
查看次数

连接到 Azure B2C 时如何调试 oauth2_proxy?

我是 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)

proxy nginx azure oauth-2.0 oauth2-proxy

5
推荐指数
1
解决办法
3371
查看次数

Oauth2_proxy 与 Keycloak :使用 /userinfo API 获取“invalid_token”

我第一次尝试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)

有人可以帮忙解决可能丢失或出错的问题吗?任何线索或提示都会非常有帮助。

oauth-2.0 keycloak oauth2-proxy

5
推荐指数
1
解决办法
7071
查看次数

Keycloak、oauth2-proxy 和 nginx.ingress.kubernetes

我在通过 oauth2-proxy/keycloak 进行身份验证 kubernetes webapp 时遇到问题。你不知道出了什么问题

  • Web 应用程序 (test-app.domain.com)
  • oauth2-proxy (oauth2-proxy.domain.com)
  • keycloak(keycloak-test.domain.com)

这三个应用程序单独运行。

认证流程说明:

打开后test.domain.com被重定向到https://keycloak-test.domain.com/auth/realms/local/protocol/openid-connect/auth?approval_prompt=force&client_id=k8s2&redirect_uri=https%3A%2F%2Foauth2- proxy.domain.com%2Foauth2%2Fcallback&response_type=code&scope=openid+profile+email+users&state=7a6504626c89d85dad9337f57072d7e4%3Ahttps%3A%2F%2Ftest-app%2F

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)

proxy nginx kubernetes keycloak oauth2-proxy

5
推荐指数
1
解决办法
6908
查看次数

oauth2 代理 sidecar 的目的是什么?

您能否解释一下为什么可以使用oauth2-proxy作为 sidecar?例如,在一个架构中,k8s 中的每个 pod 都有这个 sidecar,它代理 Keycloack。

kubernetes keycloak sidecar oauth2-proxy

3
推荐指数
1
解决办法
4285
查看次数

如何使用 oauth2_proxy 对 AAD (Azure Active Directory) 进行身份验证并获取访问令牌

我正在尝试使用 Kubernetes 中使用的 \xc2\xa0 oauth2_proxy \xc2\xa0 对 AAD(Azure Active Directory)进行身份验证以获取访问令牌。

\n

首先,我正在努力让正确的身份验证流程发挥作用。

\n

其次,重定向到我的应用程序后,访问令牌不在oauth2_proxy中指定的请求标头中 \xc2\xa0documentation 中指定的请求标头中。

\n

azure azure-active-directory kubernetes oauth2-proxy

2
推荐指数
1
解决办法
1903
查看次数