Delegated creds and SPNEGO
Nicolas Williams
Nicolas.Williams at sun.com
Thu Aug 27 11:54:16 EDT 2009
On Wed, Aug 26, 2009 at 10:39:51PM -0700, Love Hörnquist Åstrand wrote:
> 26 aug 2009 kl. 22:07 skrev Nicolas Williams:
> >You must first store them somewhere with gss_store_cred(), so that
> >you can re-acquire; gss_store_cred(), like gss_acquire/add_cred() and
> >GSS_C_NO_CREDENTIAL, refers to the "current credential store".
> >Setting up credential stores and changing the current credential
> >store are outsire the scope of the GSS-API and really are
> >OS-dependent matters (e.g., putenv("KRB5CCNAME=...")? setuid()?
> >setup keyrings? PAGs? all OS-specific).
>
> gss_store_cred() is mostly unusable for just that reason, you can't
> use it inside a multi threaded application, and you are not sure how
> it will affect other processes if you call it. for example, two proxy
> smb fileservers store credentails for the same user, one might
> overwrite credentials for another process.
That's not necessarily true. For example, it's not true on Linux, since
you can setup your per-thread keyrings appropriately and off it goes.
And we could introduce a notion of credential store handles. This would
entail:
a) functions to create and release credentials stores;
b) a function to get a handle to the current credential store, and one
to set the current credential store to a given handle;
c) new versions of gss_acquire/add/store_cred() that take a credential
store handle;
d) OS-specific functions for finding and manipulating other processes'/
threads' notion of current credential stores.
> >Our special case does not actually check for the SPNEGO OID. It's a
> >very simple special case (if (have_deleg_cred && actual_mech !=
> >initial_context_token_mech) then expect the mech to have returned a
> >mechglue cred, not a mech cred). It could use a tiny tweak for the
> >case of composite mechs (instead of actual_mech !=
> >initial_context_token_mech it needs to check that
> >initial_context_token_mech is equal to or a prefix of actual_mech).
>
> Then you force all composed mechs to use mechglue layer credentials,
> so they can't have their own credentials. Somethings that you
> recommend doing for gss_acquire_cred (ie defer acquire until later)
> above.
I got the sense of the check backwards, sorry, it should be:
if (have_deleg_cred && actual_mech != init_ctx_tok_mech &&
!is_prefix(init_ctx_tok_mech, actual_mech))
expect deleg cred to be a mechglue cred;
A stackable mech that returns a composite mech as the actual_mech will
be able to (will have to) have its own wrapper for the delegated
credentials.
Nico
--
More information about the krbdev
mailing list