diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml
index 0ea01b98d00d73909773f6150fdaa1a0873fde45..5fa372f159e7789d7c05c0a3fa0c4850fc617104 100644
--- a/.github/workflows/ci.yaml
+++ b/.github/workflows/ci.yaml
@@ -39,7 +39,7 @@ jobs:
         options: --health-cmd "ETCDCTL_API=3 etcdctl --endpoints http://localhost:2379 endpoint health" --health-interval 10s --health-timeout 5s --health-retries 5
 
       keystone:
-        image: openio/openstack-keystone:pike
+        image: openio/openstack-keystone:rocky
         ports:
           - 5000
           - 35357
diff --git a/README.md b/README.md
index ca48eb2d6a490c2ca011247d4d9da8eee6a85a9e..b94dc4de8f6ef777f3c3c4e8145e812ab21249c5 100644
--- a/README.md
+++ b/README.md
@@ -80,6 +80,7 @@ Dex implements the following connectors:
 | [OpenShift](https://dexidp.io/docs/connectors/openshift/) | no | yes | no | stable | |
 | [Atlassian Crowd](https://dexidp.io/docs/connectors/atlassiancrowd/) | yes | yes | yes * | beta | preferred_username claim must be configured through config |
 | [Gitea](https://dexidp.io/docs/connectors/gitea/) | yes | no | yes | alpha | |
+| [OpenStack Keystone](https://dexidp.io/docs/connectors/keystone/) | yes | yes | no | alpha | |
 
 Stable, beta, and alpha are defined as:
 
diff --git a/connector/keystone/keystone.go b/connector/keystone/keystone.go
index d817bd9454a9e8f3e6b268339d3d273fb7d62474..3750710e742af2d4e8a80facf674b613253e7f49 100644
--- a/connector/keystone/keystone.go
+++ b/connector/keystone/keystone.go
@@ -42,8 +42,8 @@ type domainKeystone struct {
 //		config:
 //			keystoneHost: http://example:5000
 //			domain: default
-//      keystoneUsername: demo
-//      keystonePassword: DEMO_PASS
+//			keystoneUsername: demo
+//			keystonePassword: DEMO_PASS
 type Config struct {
 	Domain        string `json:"domain"`
 	Host          string `json:"keystoneHost"`
diff --git a/web/static/img/keystone-icon.svg b/web/static/img/keystone-icon.svg
new file mode 100644
index 0000000000000000000000000000000000000000..7a30aba1fe33d5ff041d5f47e9fe35bf608f3288
--- /dev/null
+++ b/web/static/img/keystone-icon.svg
@@ -0,0 +1,12 @@
+<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="-10 0 210 185">
+    <defs>
+        <style>.cls-1{opacity:0.98;}.cls-2{fill:#ed1944;}</style>
+    </defs>
+    <title>OpenStack_Logo_Mark</title>
+    <g class="cls-1">
+        <path class="cls-2" d="M461.82,215.24h-150a17.17,17.17,0,0,0-17.12,17.12v40.35h41.61v-6.59a9.26,9.26,0,0,1,9.26-9.26h82.53a9.26,9.26,0,0,1,9.26,9.26v6.59H479V232.36A17.18,17.18,0,0,0,461.82,215.24Z" transform="translate(-294.67 -215.24)"/>
+        <path class="cls-2" d="M437.33,344.72a9.27,9.27,0,0,1-9.26,9.26H345.54a9.27,9.27,0,0,1-9.26-9.26v-6.59H294.67v40.34a17.17,17.17,0,0,0,17.12,17.13h150A17.18,17.18,0,0,0,479,378.47V338.13H437.33Z" transform="translate(-294.67 -215.24)"/>
+        <rect class="cls-2" y="69.37" width="41.62" height="41.62"/>
+        <rect class="cls-2" x="142.66" y="69.37" width="41.62" height="41.62"/>
+    </g>
+</svg>
diff --git a/web/static/main.css b/web/static/main.css
index c5b967be76f1c94847942d317275b07bc9326126..0ce2c2530b8dd54df3390aeddbb6a4b9a5d3fcb7 100644
--- a/web/static/main.css
+++ b/web/static/main.css
@@ -64,6 +64,12 @@ body {
   background-size: contain;
 }
 
+.dex-btn-icon--keystone {
+  background-color: #F5F5F5;
+  background-image: url(../static/img/keystone-icon.svg);
+  background-size: contain;
+}
+
 .dex-btn-icon--oidc {
   background-color: #EBEBEE;
   background-image: url(../static/img/oidc-icon.svg);