Keycloak实现开源SSO oauth2登陆权限系统(1)—— 安装keycloak并配置 oauth clienntid 和 nginx-ingress配置oauth-proxy2授权登陆跳转

1、启动keycloak

开始之前,确保已经安装Docker。

从终端开启 keycloak,命令如下:

docker run -p 8080:8080 -e KEYCLOAK_ADMIN=admin -e KEYCLOAK_ADMIN_PASSWORD=admin quay.io/keycloak/keycloak:18.0.0 start-dev

2、应用示例

(1)登录管理控制台

去Keycloak管理控制台并使用之前创建的用户名和密码登录。登录后界面如下:

3,创建一个realm

在 keycloak 中,一个 realm 相当于一个租户。它允许创建独立的应用程序和用户组。master 是keycloak 中默认的 realm,master 是专用于管理 keycloak的,不建议用于自己的应用程序。要应用于自己的应用程序时,一般建立一个指定名称的 realm。创建 realm 的步骤如下:

3.1、打开Keycloak管理控制台。

3.2、将鼠标移到左上角标有 Master 的下拉框处,在下拉处可以看到 Add realm 按钮,点击该按钮,可以看到如下界面:

3、在右侧 Add realm 界面的 Name 处填写自己相应建立的 realm  的名称,例如: myrealm。

4、点击 Create 按钮创建。

创建一个user

在新创建的 realm 中没有用户,需要先创建一个,创建步骤如下:

1、打开Keycloak管理控制台。

2、点击左侧菜单中的 Users,在弹出的右侧面板中点击 Add user,如下图:

在 Add user 面板中,填写类似如下的示例信息:

Username:myuser

First Name:my

Last Name:user

4、点击 Save 按钮。

5、保存成功后,设置初始密码,操作如下:

1、在出现界面点击 Credentials,出现如下界面。

 2、设置密码,设置完后,Temporary 处点击为 OFF。

3、点击 Set Password 按钮完成密码设置。

(4)配置第一个示例应用程序

现在尝试配置第一个应用程序。 第一步是用你的 Keycloak 实例注册一个应用程序,如下:

1、打开Keycloak管理控制台。

2、点击左侧的 Clients,在右侧的弹出界面点击 Create 按钮,得到 Add Client 界面。

3、在 Add Client 界面填写相关信息,示例如下:

Client ID:myclient

Client Protocol: openid-connect

Root URL:Test application - Keycloak

4、点击 Save 按钮。

添加域 名字叫istio

访问keycloak添加客户端

配置客户端

获取客户端的凭据,后面要用

创建mappers

 6,创建nginx应用k8s deployment和ingress, nginx-ingress部署请看这个文章:如何在本地k8s 1.27中设置 nginx-ingress 局域网入口访问网址_ingress-nginx loadbalancer-CSDN博客

6.1 应用的 deployment yaml

apiVersion: v1
kind: Endpoints
metadata:
  name: proxy-ingress
subsets:
- addresses:
  - ip: 192.168.2.96
  ports:
  - port: 80
    protocol: TCP
---
apiVersion: v1
kind: Service
metadata:
  name: myapp
  namespace: default
spec:
  selector:
    app: myapp
    release: canary
  ports:
  - name: http
    targetPort: 80
    port: 80
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-backend-pod
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      app: myapp
      release: canary
  template:
    metadata:
      labels:
        app: myapp
        release: canary
    spec:
      containers:
      - name: myapp
        image: registry.cn-hangzhou.aliyuncs.com/luyanjiegerouth/nginx:alpine
        ports:
        - name: http
          containerPort: 80

 6.2 创建应用ingress yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-myapp
  annotations:
      nginx.ingress.kubernetes.io/auth-signin: http://$host/oauth2/start?rd=$escaped_request_uri
      nginx.ingress.kubernetes.io/auth-url: http://$host/oauth2/auth
      nginx.ingress.kubernetes.io/proxy-buffer-size: 512k
spec:
  ingressClassName: "nginx"
  rules:
  - host: "myapp.magedu.com"
    http:
      paths:
      - pathType: Prefix
        path: "/"
        backend:
          service:
            name: myapp
            port:
              number: 80

7,创建oauth2-proxy的deployment和ingress  yaml

apiVersion: v1
kind: Service
metadata:
  labels:
    app: oauth-proxy
  name: oauth-proxy
  namespace: oauth2-proxy
spec:
  type: ClusterIP
  selector:
    app: oauth-proxy
  ports:
  - name: http-oauthproxy
    port: 4180
---
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: oauth-proxy
  name: oauth-proxy
  namespace: oauth2-proxy
spec:
  replicas: 1
  selector:
    matchLabels:
      app: "oauth-proxy"
  template:
    metadata:
      labels:
        app: oauth-proxy
    spec:
      volumes:
        - name: oauth2-proxy-config
          configMap:
            name: oauth2-proxy-config
      containers:
      - name: oauth-proxy
        image: "quay.io/oauth2-proxy/oauth2-proxy:latest"
        ports:
        - containerPort: 4180
        volumeMounts:
        - name: oauth2-proxy-config
          mountPath: /etc/oauth2-proxy.cfg
          subPath: oauth2-proxy.cfg
        args:
          - --config=/etc/oauth2-proxy.cfg
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: oauth2-proxy
  namespace: oauth2-proxy
spec:
  ingressClassName: nginx
  rules:
  - host: myapp.magedu.com
    http:
      paths:
      - backend:
          service:
            name: oauth-proxy
            port:
              number: 4180
        path: /oauth2
        pathType: Prefix
---
apiVersion: v1
data:
  oauth2-proxy.cfg: |-
    # Provider config
    provider="keycloak"
    provider_display_name="Keycloak"
    login_url="http://keycloak.qnxr.ltd/realms/testoauth2/protocol/openid-connect/auth"
    redeem_url="http://keycloak.qnxr.ltd/realms/testoauth2/protocol/openid-connect/token"
    validate_url="http://keycloak.qnxr.ltd/realms/testoauth2/protocol/openid-connect/userinfo"
    profile_url="http://keycloak.qnxr.ltd/realms/testoauth2/protocol/openid-connect/userinfo"
    ssl_insecure_skip_verify=true
    # Client config
    client_id="myclient"
    client_secret="qvi04SUXYJvRDDW7TrujtpQgVWL5eGJK"
    cookie_secret="ZzBkN000Wm0pQkVkKUhzMk5YPntQRUw_ME1oMTZZTy0="
    cookie_secure="false"
    # Upstream config
    http_address="0.0.0.0:4180"
    upstreams="file:///dev/null"
    email_domains=["*"]
    oidc_issuer_url="http://keycloak.qnxr.ltd/realms/testoauth2"
    scope="openid"
    whitelist_domains=[".myapp.magedu.com:*"]
    # Redis session store config
    # session_store_type="redis"
    # redis_connection_url="redis://<RedisServiceName>:6379"
kind: ConfigMap
metadata:
  name: oauth2-proxy-config
  namespace: oauth2-proxy

8,访问:http://myapp.magedu.com

9, 登陆keycloak用户后,成功跳转

  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值