[keycloak-user] How does the public key rotation in Keycloak work?
Chandrashekhar, Nithin
Nithin.Chandrashekhar at Teradata.com
Wed Aug 7 03:43:46 EDT 2019
>From what I know, keycloak does not disable/rotate the keys automatically.
Thanks
Nithin
On 8/7/19, 12:28 AM, "Peemöller, Björn" <Bjoern.Peemoeller at berenberg.de> wrote:
Hi Nithin,
thank you for your quick reply. Is there some automatism for deactivating and disabling keys? As far as I know, none of our admins does this manually, but obviously in our case some keys were disabled.
Thanks
Björn
-----Ursprüngliche Nachricht-----
Von: Chandrashekhar, Nithin [mailto:Nithin.Chandrashekhar at Teradata.com]
Gesendet: Mittwoch, 7. August 2019 08:38
An: Peemöller, Björn; 'keycloak-user at lists.jboss.org'
Betreff: Re: [keycloak-user] How does the public key rotation in Keycloak work?
Hi Björn,
https://www.keycloak.org/docs/latest/server_admin/index.html#rotating-keys - Here is the documentation for rotating keys.
Keys can be in three states active, passive and disabled.
- Key in active state with the highest priority will be used for signing and validating jwt token.
- If the key is passive, it will be used for validating the already issued jwt token.
- If the key is disabled or deleted, jwt tokens signed with these keys will be invalidated.
Thanks
Nithin
On 8/6/19, 11:19 PM, "keycloak-user-bounces at lists.jboss.org on behalf of Peemöller, Björn" <keycloak-user-bounces at lists.jboss.org on behalf of Bjoern.Peemoeller at berenberg.de> wrote:
[External Email]
________________________________
Hi all,
I have some questions regarding the public key rotation in Keycloak.
We have an Spring Boot 2.1 application providing a rest api that is secured by Keycloak, and we occasionally get requests that are rejected with a 401 Unauthorized and the following information in the log:
Failed to verify tokenorg.keycloak.exceptions.TokenNotActiveException: Token is not active
at org.keycloak.TokenVerifier$2.test(TokenVerifier.java:84)
at org.keycloak.TokenVerifier.verify(TokenVerifier.java:370)
at org.keycloak.RSATokenVerifier.verify(RSATokenVerifier.java:89)
at org.keycloak.adapters.rotation.AdapterRSATokenVerifier.verifyToken(AdapterRSATokenVerifier.java:56)
at org.keycloak.adapters.rotation.AdapterRSATokenVerifier.verifyToken(AdapterRSATokenVerifier.java:37)
at org.keycloak.adapters.BearerTokenRequestAuthenticator.authenticateToken(BearerTokenRequestAuthenticator.java:99)
at org.keycloak.adapters.BearerTokenRequestAuthenticator.authenticate(BearerTokenRequestAuthenticator.java:84)
at org.keycloak.adapters.RequestAuthenticator.authenticate(RequestAuthenticator.java:68)
at org.keycloak.adapters.springsecurity.filter.KeycloakAuthenticationProcessingFilter.attemptAuthentication(KeycloakAuthenticationProcessingFilter.java:147)
...
Didn't find publicKey for kid: <some kid>
Failed to verify tokenorg.keycloak.common.VerificationException: Didn't find publicKey for specified kid
at org.keycloak.adapters.rotation.AdapterRSATokenVerifier.getPublicKey(AdapterRSATokenVerifier.java:47)
at org.keycloak.adapters.rotation.AdapterRSATokenVerifier.verifyToken(AdapterRSATokenVerifier.java:55)
at org.keycloak.adapters.rotation.AdapterRSATokenVerifier.verifyToken(AdapterRSATokenVerifier.java:37)
at org.keycloak.adapters.BearerTokenRequestAuthenticator.authenticateToken(BearerTokenRequestAuthenticator.java:99)
at org.keycloak.adapters.BearerTokenRequestAuthenticator.authenticate(BearerTokenRequestAuthenticator.java:84)
at org.keycloak.adapters.RequestAuthenticator.authenticate(RequestAuthenticator.java:68)
at org.keycloak.adapters.springsecurity.filter.KeycloakAuthenticationProcessingFilter.attemptAuthentication(KeycloakAuthenticationProcessingFilter.java:147)
...
We tuned our logging to have a look at the provided Bearer token, and discovered that the rejected call performed at 2019-08-07T03:00:00Z used a token which was issued at 2019-08-05T03:00:00Z and expired at 2019-08-05T11:00:00Z. Thus, the call was performed using an expired token. However, the above stack trace did not directly lead us into this direction.
Obviously, the token is checked whether its active (leading to the first two errors) and its kid is verified (leading the third error).
My guess is that the provided token is so old that the kid has already been removed from the Keycloak server. Could anybody explain to me how the key rotation is implemented in Keycloak? Is there a fixed interval? Are older keys kept for a while?
Another question: I would expect dealing with invalid tokens to be regular business for the Keycloak client adapters, therefore I don't understand why an expired token leads to three error log entries with two stack traces. Is there a reason for this behavior I'm not aware of? Can this be configured using log settings? Personally, I rather would have expected warning level entries with a stack trace.
Regards,
Björn
Bei Berenberg hat der Schutz Ihrer Daten seit jeher höchste Priorität. Informationen zum Umgang mit personenbezogenen Daten finden Sie hier: https://www.berenberg.de/files/Rechtliche%20Hinweise/DSGVO/DSGVO-Kundeninformation%20-%20Binder%20-%20D.pdf
Diese Nachricht einschliesslich etwa beigefuegter Anhaenge ist vertraulich und kann dem Bank- und Datengeheimnis unterliegen oder sonst rechtlich geschuetzte Daten und Informationen enthalten. Wenn Sie nicht der richtige Adressat sind oder diese Nachricht irrtuemlich erhalten haben, informieren Sie bitte sofort den Absender über die Antwortfunktion. Anschliessend moechten Sie bitte diese Nachricht einschliesslich etwa beigefuegter Anhaenge unverzueglich vollstaendig loeschen. Das unerlaubte Kopieren oder Speichern dieser Nachricht und/oder der ihr etwa beigefuegten Anhaenge sowie die unbefugte Weitergabe der darin enthaltenen Daten und Informationen sind nicht gestattet. Wir weisen darauf hin, dass rechtsverbindliche Erklaerungen namens unseres Hauses grundsaetzlich der Unterschriften zweier ausreichend bevollmaechtigter Vertreter unseres Hauses beduerfen. Wir verschicken daher keine rechtsverbindlichen Erklaerungen per E-Mail an Dritte. Demgemaess nehmen wir per E-Mail auch keine rechtsverbindlichen Erklaerungen oder Auftraege von Dritten entgegen.
Sollten Sie Schwierigkeiten beim Oeffnen dieser E-Mail haben, wenden Sie sich bitte an den Absender oder an info at berenberg.de. Unsere Hinweise zum Schutz personenbezogener Daten finden Sie unter https://www.berenberg.de/files/Rechtliche+Hinweise/DSGVO/DSGVO-Kundeninformation-Binder+DE+2018-04+L.pdf.
_______________________________________________
keycloak-user mailing list
keycloak-user at lists.jboss.org
https://lists.jboss.org/mailman/listinfo/keycloak-user
Bei Berenberg hat der Schutz Ihrer Daten seit jeher höchste Priorität. Informationen zum Umgang mit personenbezogenen Daten finden Sie hier: https://www.berenberg.de/files/Rechtliche%20Hinweise/DSGVO/DSGVO-Kundeninformation%20-%20Binder%20-%20D.pdf
Diese Nachricht einschliesslich etwa beigefuegter Anhaenge ist vertraulich und kann dem Bank- und Datengeheimnis unterliegen oder sonst rechtlich geschuetzte Daten und Informationen enthalten. Wenn Sie nicht der richtige Adressat sind oder diese Nachricht irrtuemlich erhalten haben, informieren Sie bitte sofort den Absender über die Antwortfunktion. Anschliessend moechten Sie bitte diese Nachricht einschliesslich etwa beigefuegter Anhaenge unverzueglich vollstaendig loeschen. Das unerlaubte Kopieren oder Speichern dieser Nachricht und/oder der ihr etwa beigefuegten Anhaenge sowie die unbefugte Weitergabe der darin enthaltenen Daten und Informationen sind nicht gestattet. Wir weisen darauf hin, dass rechtsverbindliche Erklaerungen namens unseres Hauses grundsaetzlich der Unterschriften zweier ausreichend bevollmaechtigter Vertreter unseres Hauses beduerfen. Wir verschicken daher keine rechtsverbindlichen Erklaerungen per E-Mail an Dritte. Demgemaess nehmen wir per E-Mail auch keine rechtsverbindlichen Erklaerungen oder Auftraege von Dritten entgegen.
Sollten Sie Schwierigkeiten beim Oeffnen dieser E-Mail haben, wenden Sie sich bitte an den Absender oder an info at berenberg.de. Unsere Hinweise zum Schutz personenbezogener Daten finden Sie unter https://www.berenberg.de/files/Rechtliche+Hinweise/DSGVO/DSGVO-Kundeninformation-Binder+DE+2018-04+L.pdf.
More information about the keycloak-user
mailing list