当前位置: 首页 > 知识库问答 >
问题:

Keycloak、oauth2-proxy和nginx.ingress.kubernetes

哈栋
2023-03-14

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

  • WebApp(test-app.domain.com)
  • oauth2-proxy(oauth2-proxy.domain.com)
  • keycloak(keycloak-test.domain.com)

Keycloak登录页面显示正确,但在用户登录后,我得到:500 Internal Server Error with URL https://oauth2-proxy.domain.com/oauth2/callback?4A79-AA7A-56BBAA16056F.78732EE5-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 - "/oauth2/start?rd=https://test-app.domain.com/" 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" 302 400 0.000
[2021/03/16 11:25:39] [oauthproxy.go:753] Error redeeming code during OAuth2 callback: email in id_token (user1@user.com) isn't verified
10.96.5.198:35502 - - [2021/03/16 11:25:39] oauth2-proxy.domain.com GET - "/oauth2/callback?state=1fe22deb33ce4dc7e316f23927b8d821%3Ahttps%3A%2F%2Ftest-app.domain.com%2F&session_state=c69d7a8f-32f2-4a84-a6af-41b7d2391561&code=4759cce8-1c1c-4da3-ba94-9987c2ce3e02.c69d7a8f-32f2-4a84-a6af-41b7d2391561.78732ee5-af17-43fc-9f52-856e06bfce04" 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" 500 345 0.030

测试应用程序入口

    apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/auth-url: "oauth2-proxy.domain.com/oauth2/auth"
    nginx.ingress.kubernetes.io/auth-signin: "oauth2-proxy.domain.com/oauth2/start?rd=$scheme://$best_http_host$request_uri"
    nginx.ingress.kubernetes.io/auth-response-headers: "x-auth-request-user, x-auth-request-email, x-auth-request-access-token"
    nginx.ingress.kubernetes.io/proxy-buffer-size: "16k"
  name: test-app
  namespace: its
spec:
  rules:
    - host: test-app.domain.com
      http:
        paths:
          - path: /
            backend:
              serviceName: test-app
              servicePort: http

  tls:
    - hosts:
      - test-app.domain.com
      secretName: cert-wild.test-proxy.domain.com

oauth2-proxy配置和入口

 containers:
      - name: oauth2-proxy
        image: quay.io/oauth2-proxy/oauth2-proxy:latest
        ports:
        - containerPort: 8091
        args:
        - --provider=oidc
        - --client-id=k8s2
        - --client-secret=Sd28cf1-1e14-4db1-8ed1-5ba64e1cd421
        - --cookie-secret=x-1vrrMhC-886ITuz8ySNw==
        - --oidc-issuer-url=https://keycloak-test.domain.com/auth/realms/local
        - --email-domain=*
        - --scope=openid profile email users
        - --cookie-domain=.domain.com
        - --whitelist-domain=.domain.com
        - --pass-authorization-header=true
        - --pass-access-token=true
        - --pass-user-headers=true
        - --set-authorization-header=true
        - --set-xauthrequest=true
        - --cookie-refresh=1m
        - --cookie-expire=30m
        - --http-address=0.0.0.0:8091
---
apiVersion: v1
kind: Service
metadata:
  name: oauth2-proxy
  labels:
    name: oauth2-proxy
spec:
  ports:
  - name: http
    port: 8091
    targetPort: 8091
  selector:
    name: oauth2-proxy
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/proxy-buffer-size: "16k"
  name: oauth2-proxy
  namespace: its
spec:
  rules:
    - host: oauth2-proxy.domain.com
      http:
        paths:
          - path: /oauth2
            backend:
              serviceName: oauth2-proxy
              servicePort: 8091
  tls:
    - hosts:
      - oauth2-proxy.domain.com
      secretName: cert-wild.oauth2-proxy.domain.com

共有1个答案

童华池
2023-03-14

您可以尝试在oauth2-proxy配置中设置--insecure-oidc-allow-unverificed-email。或者,在keycloak中,在用户设置中标记用户电子邮件已验证…

 类似资料:
  • 我在Kubernetes集群中配置了Keycloak(10.0.3)服务器。 问题是,当我试图访问我的web应用程序时,它总是重定向到'http://keycloak-cluster-http.keycloak-cluster.svc.cluster.local/auth/realms/myrealm',这在K8S之外无法解决。 如果我将issuiser-uri更改为http://keycloak

  • Proxy概述 Proxy用于修改某些操作的默认行为,等同于在语言层面做出修改,所以属于一种“元编程”(meta programming),即对编程语言进行编程。 Proxy可以理解成,在目标对象之前架设一层“拦截”,外界对该对象的访问,都必须先通过这层拦截,因此提供了一种机制,可以对外界的访问进行过滤和改写。Proxy这个词的原意是代理,用在这里表示由它来“代理”某些操作,可以译为“代理器”。

  • 一个 Proxy 对象包装另一个对象并拦截诸如读取/写入属性和其他操作,可以选择自行处理它们,或者透明地允许该对象处理它们。 Proxy 被用于了许多库和某些浏览器框架。在本文中,我们将看到许多实际应用。 Proxy 语法: let proxy = new Proxy(target, handler) target —— 是要包装的对象,可以是任何东西,包括函数。 handler —— 代理配置:

  • 谁能告诉我如何迁移keycloak和spring security。我已经遵循了http://keycloak.github.io/docs/userguide/keycloak-server/html/ch08.html#spring-security-adapter中步骤。但它很管用。我需要编写自己的提供程序吗? 我的原始spring-security.xml 我们很抱歉... 无效参数:re

  • 设置http代理(也支持socks代理、https代理),配置方式: pattern proxy://ip:port # 加用户名密码 pattern proxy://username:password@ip:port 也可以用 http-proxy pattern参见匹配模式,更多模式请参考配置方式。 例子: 把所有请求代理到127.0.0.1:8888的代理服务器: * proxy://1