Hi Michael, +1, Thank you for your PIP! That's important for modern authentication!
I have a question: > 2. Implement `KubernetesFunctionAuthProvider` with `KubernetesSecretsAuthProvider`. It looks like we add an authentication provider for the Kubernetes environment. Is the OIDC authentication provider? Thanks, Zixuan Lari Hotari <lhot...@apache.org> 于2023年3月10日周五 14:56写道: > Thanks for starting this PIP, Michael. > This is really important in improving Pulsar's security and reducing > certain attack surfaces and eliminating certain attack vectors. I'm looking > forward to having Open ID connect (OIDC) supported in Pulsar server > components so that Pulsar could be operated without the use of static JWT > tokens such as the superuser token. > > -Lari > > On 2023/03/09 22:34:49 Michael Marshall wrote: > > Hi Pulsar Community, > > > > I would like to contribute Open ID Connect support to the server > > components in Pulsar. Here is a link to the PIP: > > https://github.com/apache/pulsar/issues/19771. I plan to start working > > on the implementation next week. I look forward to your feedback. > > > > Thanks, > > Michael > > > > ### Motivation > > > > Apache Pulsar does not yet support a server side > > `AuthenticationProvider` that implements the Open ID Connect spec for > > a relying party as defined by https://openid.net/connect/. The only > > token based authentication is provided via the > > `AuthenticationProviderToken` class. Given that we already have > > clients that implement the OAuth2.0 protocol, which integrates easily > > with an Open ID Connect `AuthenticationProvider`, it would be very > > helpful to add this support to the Pulsar Server components. > > > > ### Goal > > > > In implementing the OIDC spec, we will fulfill both the core > > (https://openid.net/specs/openid-connect-core-1_0.html) and the > > discovery (https://openid.net/specs/openid-connect-discovery-1_0.html) > > portions of the spec in the `AuthenticationProvider` implementation. > > > > The end result will be a plugin that: > > > > * supports multiple token issuers > > > > * retrieves the JWKS uri for each issuer from the token issuer's > > `/.well-known/openid-configuration` endpoint > > > > * retrieves and caches the JKWS when a client attempts to connect > > using a token issued by one of the trusted issuers > > > > * refreshes the JWKS after a configured amount of time, which allows > > for seamless key rotation without needing to restart the proxy, > > broker, function worker, websocket proxy. (Restarts are still needed > > to mitigate problems like leaked private keys.) > > > > * verifies that a token's signature and claims are valid > > > > ### API Changes > > > > There will be two new public classes: > > > > 1. Implement `AuthenticationProvider` with > > `AuthenticationProviderOpenIDConnect`. > > 2. Implement `KubernetesFunctionAuthProvider` with > > `KubernetesSecretsAuthProvider`. > > > > ### Implementation > > > > Add a module to the apache/pulsar repo named `pulsar-openid-connect` > > where we will implement the logic for > > `AuthenticationProviderOpenIDConnect`. The core additions will include > > the ability to discovery the JWKS URI for each token issuer, following > > the Open ID Connect Discovery protocol, then retrieving and caching > > the JWKS. > > > > Create a class named `KubernetesSecretsAuthProvider` that mounts a > > pre-existing secret into the Pulsar Function pod. This class serves > > two purposes. First, the function worker does not need to have the > > credentials used by the function pod. Second, the current > > authentication flow in the function worker is to forward the > > authentication data used to create the function. Because OpenID > > Connect supports short lived tokens, it is not valid to assume that > > the function pod can operate with the supplied authentication data. > > Instead, a user will be able to configure the function pod with the > > client id and the client secret necessary to retrieve the > > authentication token from the OAuth 2 Authorization Server. > > > > ### Alternatives > > > > There was an initial attempt to implement this feature here: > > https://github.com/apache/pulsar/pull/11794. The PR was never > > completed, so it is closed now. > > > > ### Anything else? > > > > We will need to address the proxy authentication handling in order for > > users to avoid encountering some of the issues documented here > > https://github.com/apache/pulsar/issues/10816. I plan to follow up > > with a fix for this issue. > > >