Skip to content

Releases: strimzi/strimzi-kafka-oauth

0.15.0

05 Mar 10:45
Compare
Choose a tag to compare

Main Changes since 0.14.x

Added OAuth Client Assertion support

Allows clients to authenticate to authorization server by using client assertion as specified by rfc7523 and rfc7521.
The assertion can be provided by an external mechanism and available as a file on the file system or it can be explicitly set through OAuth configuration before running the Kafka client.

Introduced the following new configuration options:

  • oauth.client.assertion
  • oauth.client.assertion.location
  • oauth.client.assertion.type

Added support for clients to read access token and refresh token from a file when authenticating

Introduced the following new configuration options:

  • oauth.refresh.token.location
  • oauth.access.token.location

Added support for bearer token authentication when connecting to protected authorization server endpoints

This is used by broker when connecting to JWKS and Introspection endpoints. Added to support talking to the Kubernetes API server's JWKS endpoint.

Introduced the following new configuration options:

  • oauth.server.bearer.token
  • oauth.server.bearer.token.location

The authentication configuration rules for configuring the introspection endpoint have been relaxed.
Introspection endpoint can now be unprotected (no authentication configured on the listener) or it can be protected with
oauth.client.id and oauth.client.secret to send Basic Authorization header or with the oauth.server.bearer.token or
oauth.server.bearer.token.location when sending Bearer Authorization header.

JWKS endpoint can now also be protected in the same way.

Fixed NullPointerException that occurred when OAuthKafkaPrincipalBuilder was used with Kerberos authentication

Fixed a user id extraction bug where oauth.fallback.username.prefix was ignored, and added oauth.username.prefix

A bug was introduced in 0.13.0 that resulted in oauth.fallback.username.prefix being ignored. That should now be fixed.

A new configuration option was added: oauth.username.prefix.

This allows for the consistent mapping of user ids into the same name space and may be needed to prevent name collisions.

Added support for SASL extension parameters

Added support for passing SASL extensions via OAuth configuration options, by using a prefix: oauth.sasl.extension.

If Kafka Broker uses some other custom OAUTHBEARER implementation, it may require SASL extensions options to be sent by the Kafka client.

For more details about the new features see the RELEASE_NOTES.md and the README.md. All changes can be found under the 0.15.0 milestone.

0.15.0-rc1

01 Mar 11:47
Compare
Choose a tag to compare
0.15.0-rc1 Pre-release
Pre-release

Main Changes since 0.14.x

Added OAuth Client Assertion support

Allows clients to authenticate to authorization server by using client assertion as specified by rfc7523 and rfc7521.
The assertion can be provided by an external mechanism and available as a file on the file system or it can be explicitly set through OAuth configuration before running the Kafka client.

Introduced the following new configuration options:

  • oauth.client.assertion
  • oauth.client.assertion.location
  • oauth.client.assertion.type

Added support for clients to read access token and refresh token from a file when authenticating

Introduced the following new configuration options:

  • oauth.refresh.token.location
  • oauth.access.token.location

Added support for bearer token authentication when connecting to protected authorization server endpoints

This is used by broker when connecting to JWKS and Introspection endpoints. Added to support talking to the Kubernetes API server's JWKS endpoint.

Introduced the following new configuration options:

  • oauth.server.bearer.token
  • oauth.server.bearer.token.location

The authentication configuration rules for configuring the introspection endpoint have been relaxed.
Introspection endpoint can now be unprotected (no authentication configured on the listener) or it can be protected with
oauth.client.id and oauth.client.secret to send Basic Authorization header or with the oauth.server.bearer.token or
oauth.server.bearer.token.location when sending Bearer Authorization header.

JWKS endpoint can now also be protected in the same way.

Fixed NullPointerException that occurred when OAuthKafkaPrincipalBuilder was used with Kerberos authentication

Fixed a user id extraction bug where oauth.fallback.username.prefix was ignored, and added oauth.username.prefix

A bug was introduced in 0.13.0 that resulted in oauth.fallback.username.prefix being ignored. That should now be fixed.

A new configuration option was added: oauth.username.prefix.

This allows for the consistent mapping of user ids into the same name space and may be needed to prevent name collisions.

Added support for SASL extension parameters

Added support for passing SASL extensions via OAuth configuration options, by using a prefix: oauth.sasl.extension.

If Kafka Broker uses some other custom OAUTHBEARER implementation, it may require SASL extensions options to be sent by the Kafka client.

For more details about the new features see the RELEASE_NOTES.md and the README.md. All changes can be found under the 0.15.0 milestone.

Staging repository

To test the release, use the staging repository by including following in your pom.xml:

  <repositories>
    <repository>
      <id>staging</id>
      <url>https://oss.sonatype.org/content/repositories/iostrimzi-1208</url>
    </repository>
  </repositories>

0.14.0

09 Oct 13:31
Compare
Choose a tag to compare

Main Changes since 0.13.x

Fixed logging of principal extraction configuration at startup

Fixed a bug where the configured usernameClaim, fallbackUsernameClaim and fallbackUsernamePrefix values were not displayed at initialisation time.

Added support for disabling the Accept header when communicating with the authorization server

Some authorization servers have issues with Accept header in some circumstances. Configuration options oauth.include.accept.header and strimzi.authorization.include.accept.header have been introduced to allow turning off the sending of Accept header.

Bumped Kafka version to 3.6.0

When using the Strimzi Kafka OAuth libraries on the client, Kafka version 3.6.0 will be included by default as a transitive dependency.

For more details about the new features see the RELEASE_NOTES.md and the README.md. All changes can be found under the 0.14.0 milestone.

0.14.0-rc1

06 Oct 05:59
Compare
Choose a tag to compare
0.14.0-rc1 Pre-release
Pre-release

Main Changes since 0.13.x

Fixed logging of principal extraction configuration at startup

Fixed a bug where the configured usernameClaim, fallbackUsernameClaim and fallbackUsernamePrefix values were not displayed at initialisation time.

Added support for disabling the Accept header when communicating with authorization server

Some authorization servers have issues with Accept header in some circumstances. Configuration options oauth.include.accept.header and strimzi.authorization.include.accept.header have been introduced to allow turning off the sending of Accept header.

Bumped Kafka version to 3.6.0

When using the Strimzi Kafka OAuth libraries on the client, Kafka version 3.6.0 will be included by default as a transitive dependency.

For more details about the new features see the RELEASE_NOTES.md and the README.md. All changes can be found under the 0.14.0 milestone.

Staging repository

To test the release, use the staging repository by including following in your pom.xml:

  <repositories>
    <repository>
      <id>staging</id>
      <url>https://oss.sonatype.org/content/repositories/iostrimzi-1196</url>
    </repository>
  </repositories>

0.13.0

11 Jul 20:13
Compare
Choose a tag to compare

Main Changes since 0.12.x

KeycloakAuthorizer has been added that supports both Zookeeper and KRaft mode

While KeycloakRBACAuthorizer can still be used in Zookeeper mode, for the future you should migrate your configuration to use KeycloakAuthorizer.

As part of supporting KRaft mode the grants mapping logic has changed slightly. Rather than using the access token as a unit of grant, the user id is now used. This results in better sharing of the grants between sessions of the same user, and should also reduce the number of grants held in cache, and the number of refresh requests to the Keycloak server.

Additional configuration options have been added:

  • strimzi.authorization.grants.max.idle.time.seconds specifies the time after which an idle grant in the cache can be evicted
  • strimzi.authorization.grants.gc.period.seconds specifies a time between consecutive runs of the grants cache garbage collection job

Also, the option strimzi.authorization.reuse.grants now defaults to true, and no longer to false.

Global option strimzi.oauth.metric.reporters has been added to supersede metric.reporters in OAuth metrics

To avoid double instantiation of metric reporters that only expect to work as singletons, metric.reporters option is no longer used by OAuth metrics.
If the new strimzi.oauth.metric.reporters is not set, OAuth metrics will still instantiate a default org.apache.kafka.common.metrics.JmxReporter if any OAuth metrics are enabled.
In order to install some other metric reporter in addition to JmxReporter both have to be listed.
Also, the suggested way to configure it on the Kafka broker is to set it as env variable, rather than a property in server.properties file.

Fixed JsonPath handling of null in a query when attribute was missing

This change introduces a backwards incompatible change in how queries using equals or not equals comparison to null are handled when the targeted attribute is not present.

Examples of affected queries as used in oauth.custom.claim.check:

  • "@.missing == null"
  • "@.missing != null"

Principal extraction from nested username claim was added

It is now possible to use JsonPath query to target nested attributes when extracting a principal. In order to use JsonPath start your claim specification with opening square bracket [.

For example:

oauth.username.claim="['user.info'].['user.id']"
oauth.fallback.username.claim="['user.info'].['client.id']"

For more details about the new features see the RELEASE_NOTES.md and the README.md. All changes can be found under the 0.13.0 milestone.

0.13.0-rc1

08 Jul 10:51
Compare
Choose a tag to compare
0.13.0-rc1 Pre-release
Pre-release

Main Changes since 0.12.x

KeycloakAuthorizer has been added that supports both Zookeeper and KRaft mode

While KeycloakRBACAuthorizer can still be used in Zookeeper mode, for the future you should migrate your configuration to use KeycloakAuthorizer.

As part of supporting KRaft mode the grants mapping logic has changed slightly. Rather than using the access token as a unit of grant, the user id is now used. This results in better sharing of the grants between sessions of the same user, and should also reduce the number of grants held in cache, and the number of refresh requests to the Keycloak server.

Additional configuration options have been added:

  • strimzi.authorization.grants.max.idle.time.seconds specifies the time after which an idle grant in the cache can be evicted
  • strimzi.authorization.grants.gc.period.seconds specifies an interval in which cleaning of stale grants from grants cache is performed

Also, the option strimzi.authorization.reuse.grants now defaults to true, and no longer to false.

Global option strimzi.oauth.metric.reporters has been added to supersede metric.reporters in OAuth metrics

To avoid double instantiation of metric reporters that only expect to work as singletons, metric.reporters option is no longer used by OAuth metrics.
If the new strimzi.oauth.metric.reporters is not set, OAuth metrics will still instantiate a default org.apache.kafka.common.metrics.JmxReporter if any OAuth metrics are enabled.
In order to install some other metric reporter in addition to JmxReporter both have to be listed.
Also, the suggested way to configure it on the Kafka broker is to set it as env variable, rather than a property in server.properties file.

Fixed JsonPath handling of null in a query when attribute was missing

This change introduces a backwards incompatible change in how queries using equals or not equals comparison to null are handled when the targeted attribute is not present.

Examples of affected queries as used in oauth.custom.claim.check:

  • "@.missing == null"
  • "@.missing != null"

Principal extraction from nested username claim was added

It is now possible to use JsonPath query to target nested attributes when extracting a principal. In order to use JsonPath start your claim specification with opening square bracket [.

For example:

oauth.username.claim="['user.info'].['user.id']"
oauth.fallback.username.claim="['user.info'].['client.id']"

For more details about the new features see the RELEASE_NOTES.md and the README.md. All changes can be found under the 0.13.0 milestone.

Staging repository

To test the release, use the staging repository by including following in your pom.xml:

  <repositories>
    <repository>
      <id>staging</id>
      <url>https://oss.sonatype.org/content/repositories/iostrimzi-1186</url>
    </repository>
  </repositories>

0.12.0

10 Mar 23:03
Compare
Choose a tag to compare

Main Changes since 0.11.x

Java 17 support

Project can now be compiled and tests performed by Java 8, Java 11, and Java 17.

Fixed handling of strimzi.authorization.enable.metrics

The option was ignored due to a bug.

Multiple improvements in KeycloakRBACAuthorizer

Some optimizations have been done to reduce the number of grants requests to the Keycloak.

A retry mechanism for unexpected failures was added. A configuration option strimzi.authorization.http.retries was introduced, that if set to a value greater than zero, results in the initial grants request for the session be immediately repeated upon failure for up to the specified number of times.

Added support for automatic retries during authentication and token validation

Introduced new configuration options oauth.http.retries and oauth.http.retry.pause.millis that can be used to enable
automatically retrying failed requests to the authorization server during authentication (to the token endpoint), and
during token validation (to the introspection and userinfo endpoints).

For more details about the new features see the RELEASE_NOTES.md and the README.md. All changes can be found under the 0.12.0 milestone.

0.12.0-rc1

08 Mar 10:46
Compare
Choose a tag to compare
0.12.0-rc1 Pre-release
Pre-release

Main Changes since 0.11.x

Java 17 support

Project can now be compiled and tests performed by Java 8, Java 11, and Java 17.

Fixed handling of strimzi.authorization.enable.metrics

The option was ignored due to a bug.

Multiple improvements in KeycloakRBACAuthorizer

Some optimizations have been done to reduce the number of grants requests to the Keycloak.

A retry mechanism for unexpected failures was added. A configuration option strimzi.authorization.http.retries was introduced, that if set to a value greater than zero, results in the initial grants request for the session be immediately repeated upon failure for up to the specified number of times.

Added support for automatic retries during authentication and token validation

Introduced new configuration options oauth.http.retries and oauth.http.retry.pause.millis that can be used to enable
automatically retrying failed requests to the authorization server during authentication (to the token endpoint), and
during token validation (to the introspection and userinfo endpoints).

For more details about the new features see the RELEASE_NOTES.md and the README.md. All changes can be found under the 0.12.0 milestone.

Staging repository

To test the release, use the staging repository by including following in your pom.xml:

  <repositories>
    <repository>
      <id>staging</id>
      <url>https://oss.sonatype.org/content/repositories/iostrimzi-1174</url>
    </repository>
  </repositories>

0.11.0

27 Oct 08:45
Compare
Choose a tag to compare

Main Changes since 0.10.x

Added OAuth metrics support

Added support for OAuth related metrics. It is disabled by default. To enable it set oauth.enable.metrics OAuth configuration option to true. Use metrics.reporters, and other Kafka configuration metrics.* options to configure the behaviour of metrics capture and how they are exported.

Added password grant support

The Resource Owner Password Credentials support was added for interoperability in existing corporate environments where established security policies prevent using client credentials to authenticate the client applications. The reason can also be purely technical in that the existing Identity and Access Management solution (IAM) only supports user accounts, even where the 'user' is actually an application service.

Added oauth.jwks.ignore.key.use config option

Set this option to true in order to use all the keys in the JWKS response for token signature validation, regardless of their use attribute.
This makes it possible to use authorization servers that don't specify use attribute in JWKS keys.

Added support for unprotected truststores

Truststores with empty password are now supported

For more details about the new features see the RELEASE_NOTES.md and the README.md. All changes can be found under the 0.11.0 milestone.

0.11.0-rc5

23 Oct 16:28
Compare
Choose a tag to compare
0.11.0-rc5 Pre-release
Pre-release

Main Changes since 0.10.x

Added OAuth metrics support

Added support for OAuth related metrics. It is disabled by default. To enable it set oauth.enable.metrics OAuth configuration option to true. Use metrics.reporters, and other Kafka configuration metrics.* options to configure the behaviour of metrics capture and how they are exported.

Added password grant support

The Resource Owner Password Credentials support was added for interoperability in existing corporate environments where established security policies prevent using client credentials to authenticate the client applications. The reason can also be purely technical in that the existing Identity and Access Management solution (IAM) only supports user accounts, even where the 'user' is actually an application service.

Added oauth.jwks.ignore.key.use config option

Set this option to true in order to use all the keys in the JWKS response for token signature validation, regardless of their use attribute.
This makes it possible to use authorization servers that don't specify use attribute in JWKS keys.

Added support for unprotected truststores

Truststores with empty password are now supported

For more details about the new features see the RELEASE_NOTES.md and the README.md. All changes can be found under the 0.11.0 milestone.

Staging repository

To test the release, use the staging repository by including following in your pom.xml:

  <repositories>
    <repository>
      <id>staging</id>
      <url>https://oss.sonatype.org/content/repositories/iostrimzi-1196</url>
    </repository>
  </repositories>