Hi Ron,

I think we should be able to process substitutions for both static JAAS
configuration file as well as `sasl.jaas.config` property. We load the
configuration using org.apache.kafka.common.security.
JaasContext.loadXXXContext() and that would be a good place to do any
substitution. The method has access to the producer/consumer/broker configs
as well in case we want keys to refer to these.

On Fri, Apr 13, 2018 at 2:15 PM, Ron Dagostino <rndg...@gmail.com> wrote:

> Hi Rajini.  Regarding processing the sasl.jaas.config value up-front, there
> are a couple of things that occur to me about it.  First, the older way of
> storing the JAAS config in a separate file is still supported (and is at
> this time the prevalent mechanism on the broker side since sasl.jaas.config
> support for brokers was only recently added via KIP 226).  We could state
> that substitution is only supported via sasl.jaas.config and force people
> to convert over to get substitution functionality, but that wouldn't be
> necessary if we let the login module do the substitution later on.
>
> The second thing that occurs to me is related to namespacing and creates
> tension with the first point above.  If we refer to the "fubar" key in the
> config, is that key a JAAS module option or is it a value in the
> cluster/producer/consumer config?  It would be very positive if we could
> eliminate namespacing entirely such that when you reference another key it
> is always very clear what is being referred to -- i.e. always a key in the
> cluster/producer/consumer config.  Otherwise the docs have to spell out
> when it is one versus the other.
>
> That is a good point about being able to provide substitution support to
> SASL/GSSAPI (which relies upon login module code that we do not control) if
> we choose the simple, consistent way of doing things up front.
>
> You asked if there are OAuth use cases that require substitutions to be
> performed in a login module that cannot be done if the substitution is
> performed when the configuration is parsed.  I don't think so, no; the
> timing should not matter.
>
> I hadn't thought about the listener prefix issue.  I don't know that area
> of the code very well, but I have looked enough to guess that the
> underlying "originals" map in AbstractConfig is what we would want to use
> when making a reference to something.  It would eliminate the listener
> prefix namespacing confusion if we always refer to the key as originally
> provided.
>
> I'm willing to go with doing substitution once, up-front, at the
> cluster/producer/consumer config level, and supporting substitution for
> JAAS configs only when provided via sasl.jaas.config.  I'm willing to try
> the coding to introduce it at that level -- tentative given my
> unfamiliarity with the code and its subtleties, but willing to try.  Let me
> chew on it for a day or two and see what I can make happen.  In case you
> want to try as well, you can pull the current implementation (which I think
> is in good shape and might only need cosmetic/stylistic code review changes
> as opposed to wholesale API adjustments) from the KAFKA-6664 branch of
> https://github.com/rondagostino/kafka.git.
>
> Ron
>
> On Fri, Apr 13, 2018 at 7:49 AM, Rajini Sivaram <rajinisiva...@gmail.com>
> wrote:
>
> > Hi Ron,
> >
> > Thanks for the notes and KIP update.
> >
> > Handling `sasl.jaas.config` as a special case is fine, but it would be
> > better if we can do any substitutions before we create a `Configuration`
> > object rather than expect the login module to do the substitution. That
> > way, we will have a consistent substitution format for all login modules
> > including built-in ones. And since we have users who already have their
> own
> > login modules (before KIP-86), they will benefit from substitution too
> > without adding additional code to the login module, But you have thought
> > about this more in the context of OAuth, so this is more of a question.
> Are
> > there use cases that require substitutions to be performed in a login
> > module that cannot be done if the substitution is performed when the
> > configuration is parsed?
> >
> > The ability to refer to other keys is generally quite useful. But as you
> > said, "*there is a namespacing of sorts going on*". Even with regular
> > configs, we have listener prefix, which is also a "*namespacing of
> sorts"*.
> > Our current config framework doesn't represent these well. As you already
> > noticed before, there is magic that removes prefixes, flattening the
> > namespace. Perhaps that is not an issue if we want to allow references to
> > keys that are in the global namespace (non-listener-prefixed) as well.
> But
> > we probably want to make sure namespaces are handled consistently for `
> > sasl.jaas.config` and other configs.
> >
> >
> >
> > On Tue, Apr 10, 2018 at 3:41 AM, Ron Dagostino <rndg...@gmail.com>
> wrote:
> >
> > > Hi folks.  I updated KIP 269 to help clarify some of the issues
> mentioned
> > > previously.  In particular, I added a new single-method
> UnderlyingValues
> > > interface to make it clear how data is to be provided to
> > > SubstitutableValues, and I added information about if/how the
> underlying
> > > values might be re-read in case they can potentially change (basically
> an
> > > instance of SubstitutableValues never re-reads anything, so if the
> > > underlying values are expected to change a new instance of
> > > SubstitutableValues must be allocated in order to have any chance of
> > seeing
> > > those changes).  I kept the KIP focused on the same JAAS use case for
> > now,
> > > but these additions/clarifications should help if we want to expand the
> > > scope to cluster/producer/consumer configs.
> > >
> > > Ron
> > >
> > > On Mon, Apr 9, 2018 at 11:22 AM, Ron Dagostino <rndg...@gmail.com>
> > wrote:
> > >
> > > > Hi folks.  Here is a summary of where I think we stand on this KIP
> and
> > > > what I believe it means for how we move forward.
> > > >
> > > >
> > > >    - There is some desire to use substitution more broadly beyond
> just
> > > >    JAAS module options.  Specifically, cluster/producer/consumer
> config
> > > values
> > > >    such as ssl.keystore.password are places where substitution adds
> > value
> > > >    (dormant KIP 76
> > > >    <https://cwiki.apache.org/confluence/display/KAFKA/KIP-
> > > 76+Enable+getting+password+from+executable+rather+than+
> > > passing+as+plaintext+in+config+files>
> > > >    was an attempt to add value here in the past).
> > > >    - *More broad review of this KIP is needed given the potential for
> > its
> > > >    expanded scope*
> > > >    - If substitution is applied more broadly, then the
> sasl.jaas.config
> > > >    value should not have substitution performed on it at the same
> times
> > > as
> > > >    other cluster/producer/consumer configs; that value should be
> passed
> > > >    unchanged to the login module where substitution can be applied
> > later.
> > > >    - There are some adjustments to this KIP that should be made to
> > > >    reflect the possibility of more broad use:
> > > >
> > > >
> > > >    1. The use of delimiters that trigger a substitution attempt but
> > that
> > > >       fail to parse should result in the text being passed through
> > > unchanged
> > > >       instead of raising an exception
> > > >       2. The application of substitution should generally be on an
> > opt-in
> > > >       basis
> > > >       3. The implicit fact that substitution was associated with a
> > > >       namespace of sorts (i.e. saying that a default came from a
> > > particular key
> > > >       meant a JAAS module option) needs to be made explicit.  The
> > > namespace is
> > > >       defined by the Map that is passed into the
> SubstitutableValues()
> > > constructor
> > > >       4. It is not clear to me if the Map that is passed into the
> > > >       SubstitutableValues() constructor can be relied upon to contain
> > > only String
> > > >       values in the context of cluster/producer/consumer configs.
> The
> > > >       AbstractConfig's so-called "originals" map seems to support
> > values
> > > of type
> > > >       String, Boolean, Password, Integer, Short, Long, Number, List,
> > and
> > > Class.
> > > >       It is not difficult to support non-String values in the Map
> that
> > > is passed
> > > >       to the SubstitutableValues() constructor, so I can explicitly
> add
> > > support
> > > >       for that.
> > > >
> > > > I don't think these changes impact usage in a JAAS context, so they
> do
> > no
> > > > harm to the original use case while increasing the potential for more
> > > broad
> > > > use of the concept.
> > > >
> > > >
> > > > Ron
> > > >
> > > >
> > > > On Sun, Apr 8, 2018 at 8:46 PM, Ron Dagostino <rndg...@gmail.com>
> > wrote:
> > > >
> > > >> Hi Rajini.  I've also been thinking about how sasl.jaas.config will
> be
> > > >> parsed.  Something that is implicit in the current proposal needs to
> > be
> > > >> made explicit if this is to be applied more broadly, and that is the
> > > fact
> > > >> that there is a namespacing of sorts going on.  For example, in the
> > > current
> > > >> proposal, when you indicate that you want to somehow refer to
> another
> > > value
> > > >> (via defaultKey=<key> or fromValueOfKey) then the key being referred
> > to
> > > is
> > > >> taken as a JAAS module option name.  If we allow substitution at the
> > > >> cluster/producer/consumer config level then within the context of
> > > >> something like ssl.keystore.password any such key being referred to
> > > >> would be a cluster/producer/consumer config key.  But I think within
> > the
> > > >> context of sasl.jaas.config any key reference should still be
> > referring
> > > >> to a JAAS module option.  I think sasl.jaas.config would need to be
> > > >> special-cased in the sense that its value would not have
> substitution
> > > >> applied to it up front but instead would have substitution applied
> to
> > it
> > > >> later on.  In other words, the login module would be where the
> > > substitution
> > > >> logic is applied.  Note that we re-use an existing kerberos login
> > > module,
> > > >> so we do not control that code and cannot apply substitution logic
> > > there,
> > > >> so I think the statement regarding if/how sasl.jaas.config (or any
> > JAAS
> > > >> configuration file) is processed with respect to substitution is to
> > say
> > > >> that it is determined by the login module.
> > > >>
> > > >> I think the chances of an unintended substitution accidentally
> parsing
> > > >> correctly is pretty close to zero, but making substitution an opt-in
> > > means
> > > >> the possibility -- regardless of how small it might be -- will be
> > > >> explicitly acknowledged.  I think that makes it fine.
> > > >>
> > > >> I suspect you are right that adding substitution into
> > > cluster/producer/consumer
> > > >> configs will require careful code changes given how configs are
> > > >> currently implemented.  I will take a closer look to see how it
> might
> > be
> > > >> done; if it isn't obvious to me then perhaps it would be best to
> split
> > > that
> > > >> change out into a separate JIRA issue so that someone with more
> > > experience
> > > >> with that part of the code can do it.  But I'll still take a look
> just
> > > in
> > > >> case I can see how it should be done.
> > > >>
> > > >> I agree that the OAuth callback handler that needs to be written
> > anyway
> > > >> could simply go out and talk directly to a password vault.  With
> > > >> substitution as an option, though, the callback handler can just ask
> > for
> > > >> the value from a JAAS module option, and then whether that goes out
> > to a
> > > >> password vault or not would be up to how the app is configured.  I
> > think
> > > >> the ability to encapsulate the actual mechanism behind a module
> option
> > > is
> > > >> valuable.
> > > >>
> > > >> Ron
> > > >>
> > > >> On Sun, Apr 8, 2018 at 4:47 AM, Rajini Sivaram <
> > rajinisiva...@gmail.com
> > > >
> > > >> wrote:
> > > >>
> > > >>> Hi Ron,
> > > >>>
> > > >>> Thanks for the responses.
> > > >>>
> > > >>> For broader use as configs, opt-in makes sense to avoid any
> surprises
> > > >>> and a
> > > >>> global opt-in ought to be fine.
> > > >>>
> > > >>> If we do want to use this for all configs, a few things to
> consider:
> > > >>>
> > > >>>    - How will sasl.jaas.config property will get parsed? This is
> > > >>>    essentially a compound config which may contain some options
> that
> > > are
> > > >>>    substitutable. Will it be possible to handle this and static
> JAAS
> > > >>>    configuration files in the same way?
> > > >>>    - At the moment I think the whole option is redacted if one
> > > >>> substitution
> > > >>>    is marked redact. Would it make sense to define values that
> > consist
> > > of
> > > >>>    some redactable components. I am thinking of sasl.jaas.config
> as a
> > > >>>    single property, but perhaps treating this alone separately is
> > good
> > > >>> enough.
> > > >>>    - If we did treat failed substitutions as pass-thru, would it
> > cover
> > > >>> all
> > > >>>    cases, or do we also need to be concerned about valid
> > substitutions
> > > >>> that
> > > >>>    weren't intended to be substitutions? I am thinking that we
> don't
> > > >>> need to
> > > >>>    worry about the latter if substitutions are only by opt-in.
> > > >>>    - It will be good to get more feedback on this KIP before
> updating
> > > the
> > > >>>    code to use it for all configs since the code may need to change
> > > >>> quite a
> > > >>>    bit to fit in with the config classes.
> > > >>>
> > > >>>
> > > >>> For the callbacks, I agree that we want a LoginModule for OAuth
> that
> > > can
> > > >>> be
> > > >>> reused. But to use OAuth, you will probably have your own callback
> > > >>> handler
> > > >>> implementation to process OAuthBearerLoginCallback . From the
> > example,
> > > it
> > > >>> is not clear to me why the callback handler that processes
> > > >>> OAuthBearerLoginCallback cannot do whatever a custom substitution
> > class
> > > >>> would do, e,g. read some options like passwordVaultUrl from the
> JAAS
> > > >>> config
> > > >>> (which it has access to) and retrieve passwords from a password
> > vault?
> > > If
> > > >>> we are going to have extensible substitution anyway, then
> obviously,
> > we
> > > >>> could use that as an option here too.
> > > >>>
> > > >>>
> > > >>>
> > > >>> On Fri, Apr 6, 2018 at 2:47 PM, Ron Dagostino <rndg...@gmail.com>
> > > wrote:
> > > >>>
> > > >>> > Hi folks.  I think there are a couple of issues that were just
> > raised
> > > >>> in
> > > >>> > this thread.  One is whether the ability to use PasswordCallback
> > > >>> exists,
> > > >>> > and if so whether that impacts the applicability of this KIP to
> the
> > > >>> > SASL/OAUTHBEARER KIP-255.  The second issue is related to how we
> > > might
> > > >>> > leverage this KIP more broadly (including as an alternative to
> > > KIP-76)
> > > >>> > while maintaining forward compatibility and not causing
> unexpected
> > > >>> > substitutions/parsing exceptions.
> > > >>> >
> > > >>> > Let me address the second issue (more broad use) first, since I
> > think
> > > >>> > Rajini hit on a good possibility.  Currently this KIP addresses
> the
> > > >>> > possibility of an unexpected substitution by saying "This would
> > > cause a
> > > >>> > substitution to be attempted, which of course would fail and
> raise
> > an
> > > >>> > exception."  I think Rajini's idea is to explicitly state that
> any
> > > >>> > substitution that cannot be parsed is to be treated as a
> pass-thru
> > > or a
> > > >>> > no-op.  So, for example, if a configured password happened to
> look
> > > like
> > > >>> > "Asd$[,mhsd_4]Q" and a substitution was attempted on that value
> > then
> > > >>> the
> > > >>> > result should not be an exception simply because "$[,mhsd_4]"
> > > couldn't
> > > >>> be
> > > >>> > parsed according to the required delimited syntax but should
> > instead
> > > >>> just
> > > >>> > end up doing nothing and the password would
> remain"Asd$[,mhsd_4]Q".
> > > >>> > Rajini, do I have that right?  If so, then I think it is worth
> > > >>> considering
> > > >>> > the possibility that substitution could be turned on more broadly
> > > with
> > > >>> an
> > > >>> > acceptably low risk.  In the interest of caution substitution
> could
> > > >>> still
> > > >>> > be turned on only as an opt-in, but it could be a global opt-in
> if
> > we
> > > >>> > explicitly take a "do no harm" approach to things that have
> > > delimiters
> > > >>> but
> > > >>> > do not parse as valid substitutions.
> > > >>> >
> > > >>> > Regarding whether the ability to use PasswordCallback exists in
> > > >>> > SASL/OAUTHBEARER KIP-255, I don't think it does.  The reason is
> > > because
> > > >>> > customers do not generally write the login module implementation;
> > > they
> > > >>> use
> > > >>> > the implementation provided, which is short and delegates the
> token
> > > >>> > retrieval to the callback handler (which users are expected to
> > > >>> provide).
> > > >>> > Here is the login module code:
> > > >>> >
> > > >>> >     @Override
> > > >>> >     public boolean login() throws LoginException {
> > > >>> >         OAuthBearerLoginCallback callback = new
> > > >>> OAuthBearerLoginCallback();
> > > >>> >         try {
> > > >>> >             this.callbackHandler.handle(new Callback[]
> > {callback});
> > > >>> >         } catch (IOException | UnsupportedCallbackException e) {
> > > >>> >             log.error(e.getMessage(), e);
> > > >>> >             throw new LoginException("An internal error
> occurred");
> > > >>> >         }
> > > >>> >         token = callback.token();
> > > >>> >         if (token == null) {
> > > >>> >             log.info(String.format("Login failed: %s : %s
> > (URI=%s)",
> > > >>> > callback.errorCode(), callback.errorDescription(),
> > > >>> >                     callback.errorUri()));
> > > >>> >             throw new LoginException(callback.
> errorDescription());
> > > >>> >         }
> > > >>> >         log.info("Login succeeded");
> > > >>> >         return true;
> > > >>> >     }
> > > >>> >
> > > >>> > I don't see the callbackHandler using a PasswordCallback instance
> > to
> > > >>> ask
> > > >>> > (itself?) to retrieve a password.  If the callbackHandler needs a
> > > >>> password,
> > > >>> > then I imagine it will get that password from a login module
> > option,
> > > >>> and
> > > >>> > that could in turn come from a file, environment variable,
> password
> > > >>> vault,
> > > >>> > etc. if substitution is applicable.
> > > >>> >
> > > >>> > Ron
> > > >>> >
> > > >>> >
> > > >>> >
> > > >>> > On Fri, Apr 6, 2018 at 4:41 AM, Rajini Sivaram <
> > > >>> rajinisiva...@gmail.com>
> > > >>> > wrote:
> > > >>> >
> > > >>> > > Yes, I was going to suggest that we should do this for all
> > configs
> > > >>> > earlier,
> > > >>> > > but was reluctant to do that since in its current form, there
> is
> > a
> > > >>> > > property enableSubstitution
> > > >>> > > (in JAAS config at the moment) that indicates if substitution
> is
> > to
> > > >>> be
> > > >>> > > performed. If enabled, all values in that config are considered
> > for
> > > >>> > > substitution. That works for JAAS configs with a small number
> of
> > > >>> > > properties, but I wasn't sure it was reasonable to do this for
> > all
> > > >>> Kafka
> > > >>> > > configs where there are several configs that may contain
> > arbitrary
> > > >>> > > characters including substitution delimiters. It will be good
> if
> > > some
> > > >>> > > configs that contain arbitrary characters can be specified
> > directly
> > > >>> in
> > > >>> > the
> > > >>> > > config while others are substituted from elsewhere. Perhaps a
> > > >>> > substitution
> > > >>> > > type that simply uses the value within delimiters would work?
> > Ron,
> > > >>> what
> > > >>> > do
> > > >>> > > you think?
> > > >>> > >
> > > >>> > >
> > > >>> > >
> > > >>> > > On Fri, Apr 6, 2018 at 7:49 AM, Manikumar <
> > > manikumar.re...@gmail.com
> > > >>> >
> > > >>> > > wrote:
> > > >>> > >
> > > >>> > > > Hi,
> > > >>> > > >
> > > >>> > > > Substitution mechanism can be useful to configure regular
> > > password
> > > >>> > > configs
> > > >>> > > > liken ssl.keystore.password, ssl.truststore.password, etc.
> > > >>> > > > This is can be good alternative to previously proposed KIP-76
> > and
> > > >>> will
> > > >>> > > give
> > > >>> > > > more options to the user.
> > > >>> > > >
> > > >>> > > > https://cwiki.apache.org/confluence/display/KAFKA/KIP-
> > > >>> > > > 76+Enable+getting+password+from+executable+rather+than+
> > > >>> > > > passing+as+plaintext+in+config+files
> > > >>> > > >
> > > >>> > > >
> > > >>> > > > Thanks,
> > > >>> > > >
> > > >>> > > > On Fri, Apr 6, 2018 at 4:29 AM, Rajini Sivaram <
> > > >>> > rajinisiva...@gmail.com>
> > > >>> > > > wrote:
> > > >>> > > >
> > > >>> > > > > Hi Ron,
> > > >>> > > > >
> > > >>> > > > > For the password example, you could define a login
> > > >>> CallbackHandler
> > > >>> > that
> > > >>> > > > > processes PasswordCallback to provide passwords. We don't
> > > >>> currently
> > > >>> > do
> > > >>> > > > this
> > > >>> > > > > with PLAIN/SCRAM because login callback handlers were not
> > > >>> > configurable
> > > >>> > > > > earlier and we haven't updated the login modules to do
> this.
> > > But
> > > >>> that
> > > >>> > > > could
> > > >>> > > > > be one way of providing passwords and integrating with
> other
> > > >>> password
> > > >>> > > > > sources, now that we have configurable login callback
> > handlers.
> > > >>> I was
> > > >>> > > > > wondering whether similar approach could be used for the
> > > >>> parameters
> > > >>> > > that
> > > >>> > > > > OAuth needed to obtain at runtime. We could still have this
> > KIP
> > > >>> with
> > > >>> > > > > built-in substitutable types to handle common cases like
> > > getting
> > > >>> > > options
> > > >>> > > > > from a file without writing any code. But I wasn't sure if
> > > there
> > > >>> were
> > > >>> > > > OAuth
> > > >>> > > > > options that couldn't be handled as callbacks using the
> login
> > > >>> > callback
> > > >>> > > > > handler.
> > > >>> > > > >
> > > >>> > > > > On Thu, Apr 5, 2018 at 10:25 PM, Ron Dagostino <
> > > >>> rndg...@gmail.com>
> > > >>> > > > wrote:
> > > >>> > > > >
> > > >>> > > > > > Hi Rajini.  Thanks for the questions.  I could see
> someone
> > > >>> wanting
> > > >>> > to
> > > >>> > > > > > retrieve a password from a vended password vault solution
> > > (for
> > > >>> > > > example);
> > > >>> > > > > > that is the kind of scenario that the ability to add new
> > > >>> > > substitutable
> > > >>> > > > > > types would be meant for.  I do still consider this KIP
> 269
> > > to
> > > >>> be a
> > > >>> > > > > > prerequisite for the SASL/OAUTHBEARER KIP 255.  I am open
> > to
> > > a
> > > >>> > > > different
> > > >>> > > > > > perspective in case I missed or misunderstood your point.
> > > >>> > > > > >
> > > >>> > > > > > Ron
> > > >>> > > > > >
> > > >>> > > > > > On Thu, Apr 5, 2018 at 8:13 AM, Rajini Sivaram <
> > > >>> > > > rajinisiva...@gmail.com>
> > > >>> > > > > > wrote:
> > > >>> > > > > >
> > > >>> > > > > > > Hi Ron,
> > > >>> > > > > > >
> > > >>> > > > > > > Now that login callback handlers are configurable, is
> > this
> > > >>> KIP
> > > >>> > > still
> > > >>> > > > a
> > > >>> > > > > > > pre-req for OAuth? I was wondering whether we still
> need
> > > the
> > > >>> > > ability
> > > >>> > > > to
> > > >>> > > > > > add
> > > >>> > > > > > > new substitutable types or whether it would be
> sufficient
> > > to
> > > >>> add
> > > >>> > > the
> > > >>> > > > > > > built-in ones to read from file etc.
> > > >>> > > > > > >
> > > >>> > > > > > >
> > > >>> > > > > > > On Thu, Mar 29, 2018 at 6:48 AM, Ron Dagostino <
> > > >>> > rndg...@gmail.com>
> > > >>> > > > > > wrote:
> > > >>> > > > > > >
> > > >>> > > > > > > > Hi everyone.  There have been no comments on this
> KIP,
> > > so I
> > > >>> > > intend
> > > >>> > > > to
> > > >>> > > > > > put
> > > >>> > > > > > > > it to a vote next week if there are no comments that
> > > might
> > > >>> > entail
> > > >>> > > > > > changes
> > > >>> > > > > > > > between now and then.  Please take a look in the
> > meantime
> > > >>> if
> > > >>> > you
> > > >>> > > > > wish.
> > > >>> > > > > > > >
> > > >>> > > > > > > > Ron
> > > >>> > > > > > > >
> > > >>> > > > > > > > On Thu, Mar 15, 2018 at 2:36 PM, Ron Dagostino <
> > > >>> > > rndg...@gmail.com>
> > > >>> > > > > > > wrote:
> > > >>> > > > > > > >
> > > >>> > > > > > > > > Hi everyone.
> > > >>> > > > > > > > >
> > > >>> > > > > > > > > I created KIP-269: Substitution Within
> Configuration
> > > >>> Values
> > > >>> > > > > > > > > <https://cwiki.apache.org/
> > > confluence/display/KAFKA/KIP+
> > > >>> > > > > > > > 269+Substitution+Within+Configuration+Values>
> > > >>> > > > > > > > > (https://cwiki.apache.org/conf
> > > >>> luence/display/KAFKA/KIP+269+
> > > >>> > > > > > > > > Substitution+Within+Configuration+Values
> > > >>> > > > > > > > > <https://cwiki.apache.org/
> confluence/pages/viewpage.
> > > >>> > > > > > > > action?pageId=75968876>
> > > >>> > > > > > > > > ).
> > > >>> > > > > > > > >
> > > >>> > > > > > > > > This KIP proposes adding support for substitution
> > > within
> > > >>> > client
> > > >>> > > > > JAAS
> > > >>> > > > > > > > > configuration values for PLAIN and SCRAM-related
> SASL
> > > >>> > > mechanisms
> > > >>> > > > > in a
> > > >>> > > > > > > > > backwards-compatible manner and making the
> > > functionality
> > > >>> > > > available
> > > >>> > > > > to
> > > >>> > > > > > > > other
> > > >>> > > > > > > > > existing (or future) configuration contexts where
> it
> > is
> > > >>> > deemed
> > > >>> > > > > > > > appropriate.
> > > >>> > > > > > > > >
> > > >>> > > > > > > > > This KIP was extracted from (and is now a
> > prerequisite
> > > >>> for)
> > > >>> > > > > KIP-255:
> > > >>> > > > > > > > > OAuth Authentication via SASL/OAUTHBEARER
> > > >>> > > > > > > > > <https://cwiki.apache.org/
> confluence/pages/viewpage.
> > > >>> > > > > > > > action?pageId=75968876>
> > > >>> > > > > > > > > based on discussion of that KIP.
> > > >>> > > > > > > > >
> > > >>> > > > > > > > > Ron
> > > >>> > > > > > > > >
> > > >>> > > > > > > >
> > > >>> > > > > > >
> > > >>> > > > > >
> > > >>> > > > >
> > > >>> > > >
> > > >>> > >
> > > >>> >
> > > >>>
> > > >>
> > > >>
> > > >
> > >
> >
>

Reply via email to