[openstack-dev] Request for Input on multi-domain identifiers.

Jay Pipes jaypipes at gmail.com
Sun Apr 27 22:05:42 UTC 2014


Somewhat surprised this got zero responses. Some comments inline from me.

On 04/15/2014 10:39 PM, Adam Young wrote:
> As we get closer to the summit, I'd like to make sure we have resolution
> on one of the most critical issues in Keystone.  How to deal with users
> coming out of multiple data sources.
>
> The issue is that a userid out of one domain must fill two requirements:
>
> 1. one userid cannot conflict with a userid from any other domain

Why is this the case? Or perhaps I am misunderstanding what you mean by 
"userid". To me, a userid is a unique identifier for the user within the 
Keystone system -- in other words, the UUID that is globally unique for 
the user. There may be many usernames in other domains that map to the 
same user UUID in a Keystone system. But only the UUID should ever 
"leave Keystone" -- i.e. be transmitted out of the auth_token middleware 
and end up in the other project databases.

> 2. we must be able to map from the userid back to the domain backend
> that issued it.

Yup, agreed. But Keystone should do this and only Keystone. I see no 
valid reason to leak domain and username information outside of Keystone.

> We are trying to avoid an approach where we shadow the LDAP or Federated
> identity provider data in a SQL backend specific to Keystone.  That kind
> of data duplication has a host of problems we would rather not have to
> address.  Instead, we need to come up with a way to layer on the User ID
> scheme on top of the data from LDAP.
>
> I suspect the scheme is going to end up being something like:
>
> user the same field for username an userid.
>
> The actual userid value will be composed of two parts.  One will be the
> username from LDAP, the other will be assigned by Keystone based on the
> domain id.  The last instalment we had a suggestion that looked like:
>
> ayoung@@redhat.
>
> The @@ is to make sure we don;t trip over some place that decided to use
> email address, but still gives a separator character that is URL safe.

If you are talking about the above being the user ID that gets 
transmitted to other project endpoints, then -1 from me. If you are 
talking about the above being the format of a "user identifier" that 
gets passed to the Keystone auth_token middleware, then verified by 
Keystone and the real user UUID is then used by the other project 
endpoints, then I'm fine with that.

Also, I don't really understand why you need this to be URL-safe... 
Isn't this transferred as an HTTP header?

> There is some concern with the length of the field.  Most of the
> services have userid as 64chars long, and we are pushing to syncronize
> all the projects on that length.  UUIDs ar 32 chars long, and Nova was
> the last to assume that as userid was a UUID.  Still, we can't go beyond
> the 64 char limit without some pain.

I am a big -1 on expanding the length of the user ID fields in Nova or 
any other project's database. UUIDs should be the *only* thing stored in 
non-Keystone databases, and IMO, the only appropriate way forward is the 
following:

  1) Change the Keystone auth_token middleware to only return the user 
UUID value (once any mapping/translation has occurred)
  2) Design data migration scripts for any environment that has non-UUID 
values in the user ID fields in their databases and translate the 
non-UUID value to the UUID value
  3) Change the data storage for these types of fields to CHAR(32) or 
BINARY(16)

> One question is whether we are stuck with requirement 2.  For example,
> if we said that a user login was always done with:  domain name and
> username, we would never have to look up a user by pure userid.

Again, I'm 100% against having these things live outside of Keystone. 
Within Keystone, having whatever mapping system is needed is perfectly fine.

> If we can loosen up on the "map userid back to domain" requirement, we
> can  get away with something more like  sha256("%s%S" %(username,
> domain_name))  for the userid.  This has the benefit of looking just
> like a UUID and fitting into the same size filed in the databases.

-1. We have experienced the pain in Nova of having to map between 
internal UUIDs and non-UUID identifier values with the EC2 server 
identifiers. I'd much prefer any such translation of identifiers for the 
user and domain level be firmly behind Keystone's walls.

Best,
-jay

> Resolving this issue is key to both Multiple LDAP and Federation.
>
>
> _______________________________________________
> OpenStack-dev mailing list
> OpenStack-dev at lists.openstack.org
> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev



More information about the OpenStack-dev mailing list