I'm okay with "Starting Tokens".

-jOrGe W.

On Oct 23, 2012, at 7:25 AM, Adam Young wrote:

On 10/23/2012 01:25 AM, Jorge Williams wrote:
Here's my view:

On making the default token a configuration option:  Like the idea.  Disabling 
the option by default.  That's fine too.

On scoping a token to a specific endpoint:  That's fine, though I believe that 
that's in the API today.  Currently, the way that we scope tokens to endpoints 
is by validating against the service catalog. I'm not sure if the default 
middleware checks for this yet, but the Repose middleware does.  If you try to 
use a token in an endpoint that's not in the service catalog the request fails 
-- well, if the check is turned on.

Obviously, I'd like the idea of scoping a single token to multiple tenants / 
endpoints.

I don't like the idea of calling tokens "sloppy tokens" -- it's confusing.   
All you have to say is that a token has a scope -- and the scope of the token 
is the set of resources that the token can provide access to.  You can limit 
the scope of a token to a tenant, to a endpoint, to a set of endpoints or 
tenants etc -- what limits you place on the scope of an individual token should 
be up to the operator.

Keep in mind that as we start digging into delegation and fine grained 
authorization (after Grizzly, I'm sure), we'll end up with tokens that have a 
scope of a subset of resources in a single or multiple tenants.  So calling 
them sloppy now is just confusing.  Simply stating that a token has a scope (as 
I've defined above) should suffice.  This is part of the reason why I've never 
liked the term "unscoped" token, because an unscoped token does have a scope. 
It just so happens that the scope of that token is the resource that provides a 
list of available tenants.
This is a pretty good distinction.  What we were calling "Unscoped" is, to me, 
the equivalent of a TGT in Kerberos:  a starting point, that has not been 
specified to any resources.  I'd be willing to entertain a different name than 
"Unscoped."  Let me throw out "Starting Tokens" as a straw man, and we can beat 
it up to come up with a better term.

"Sloppy" was never meant seriously, but more a way to tweak the noses of the 
project members named "Joe."



-jOrGe W.

On Oct 22, 2012, at 9:57 PM, Adam Young wrote:

Are you guys +1 ing the original Idea, my suggestion to make it optional, the 
fact that I think we should call these sloppy tokens?

On 10/22/2012 03:40 PM, Jorge Williams wrote:
+1 here too.

At the end of the day, we'd like the identity API to be flexible enough to 
allow the token to be scoped in a manner that the deployer sees fit.  What the 
keystone implementation does by default is a different matter -- and disabling 
multiple tenant  scope by default would be fine by me.

-jOrGe W.


On Oct 21, 2012, at 11:10 AM, Joe Savak wrote:

+1. ;)

So the issue is that the v2 API contract allows a token to be scoped to 
multiple tenants. For v3, I'd like to have the same flexibility. I don't see 
security issues, as if a token were to be sniffed you can change the password 
of the account using it and use those creds to scope tokens to any tenant you 
wish.
Scope should always be kept as limited as possible. Personally, I don't feel 
like limiting the tenant list makes much difference.  THe more I think about 
it, the real benefit comes from limiting the  endpoints.





On Oct 20, 2012, at 21:07, "Adam Young" 
<ayo...@redhat.com<mailto:ayo...@redhat.com>> wrote:

On 10/20/2012 01:50 PM, heckj wrote:
I sent this to the openstack-dev list, and thought I'd double post this onto 
the openstack list at Launchpad for additional feedback.

-joe

Begin forwarded message:
From: heckj <he...@mac.com<mailto:he...@mac.com>>
Subject: [openstack-dev] [keystone] Tokens representing authorization to 
projects/tenants in the Keystone V3 API
Date: October 19, 2012 1:51:16 PM PDT
To: OpenStack Development Mailing List 
<openstack-...@lists.openstack.org<mailto:openstack-...@lists.openstack.org>>
Reply-To: OpenStack Development Mailing List 
<openstack-...@lists.openstack.org<mailto:openstack-...@lists.openstack.org>>

The topic of what a token can or can't represent for the upcoming V3 Keystone 
API  came up - and I wanted to share the conversation a bit more broadly to get 
feedback.


A bit of history:

In the V2 API, when you authenticated with just a username and password, the 
token that was provided wasn't entirely clearly defined. The reference 
implementation that Keystone used was to create what's been called an 
'unscoped' token - which was generally limited to only being able to get a list 
of possible tenants/projects and the capability of getting a token specific to 
a user & tenant/project (what's been called a "scoped" token)

Likewise, the reference implementation of the rest of the OpenStack projects 
all require a tenant information to be included within the token as that token 
was the identity refernce inforoamtion - and most OpenStack services were 
wanting to know the tenant associated with the token for 
authorization/ownership purposes.

Apparently Rackspace's internal implementation provided a token that was 
immediately valid for all possible tenants to which the user was associated, 
and presumably their internal implementations of openstack do whatever work is 
appropriate to discern and provide that information to the various openstack 
services.

The quandary:

In the V3 API, we started off with, and currently define the token as being 
specifically mandated to a single tenant, with a new requirement that if you 
authorize with just a username and password, a "default tenant" is used. If for 
some reason you have no tenant associated with the userid, the authorization is 
to be refused. If the user is associated with more than one tenant/project, 
it's possible to use the token to get a list of other tenants/projects and 
request a new token specific to one of those other tenant/projects, but the 
implementation is expected to respect and provide a default.

I would like to make "default tenant" a configuration option, and have it 
disabled by default.  Unscoped tokens are a very useful construct.  In the case 
where the user has many roles across a multitude of projects, it is possible to 
create huge tokens.  I would prefer unscoped tokens to remain, and to be 
associated with no tenant.  The only operation Keystone should provide with 
them is the ability to enumerate tenants, so something like Horizon can then 
request an appropriately scoped token.

I am also in favor of limiting the scope of a token to an endpoint.  Even 
more-so than tenants, scoping a token to an end point increases security.  Once 
a token has been scoped to an endpoint, it can only be used on that endpoint.  
If an endpoint gets compromised, the damage is limited to resources that 
endpoint already has access to.  This, in conjunction with pre-auths, could 
allow a user to perform an action with a minimum of risk in a public cloud 
environment.



A few folks from Rackspace touched on this at the very tail end of the V3 API 
review session on Thursday, bringing up that they had an issue with the token 
being scoped to a single tenant. Since this has significant implications to 
both security and a potential user experience flow, I wanted to bring the issue 
up across the broader community for discussion.

The request outstanding:

Rackspace folks are requesting that the token not be limited to a single 
tenant/project, but instead provides a list of potential tenants against which 
the token should be considered valid.
I would like the world to know that we are affectionately calling such tokens 
"sloppy tokens" and Joe Savak has adopted the nickname of "Sloppy Joe" for 
championing them.  Allowing it as an option is fine, but I would not recommend 
that this become the norm, or that we enable this feature by default.

Brief (maybe shoddy) analysis:

This would potentially imply changes to what gets passed as a part of the 
authentication reference in the context passed using auth_token middleware - 
multiple tenants possible instead of the currently expected single value - so 
using that as information for create() style mechanisms would need to provide 
some alternative means of clearly defining what tenant/project should be owner. 
It  would provide anyone compromising that particular token with a broader 
spectrum of impact on a replay style attack. Likewise, the impact of tenant 
enable/disable or role changes would necessarily mean a broader invalidation of 
all tokens associated with the user.

On the flip side, it has the potential to remove the token-reissuance that 
currently exists when switching contexts from one project to another (primarily 
through horizon or other client/UI/dashboard mechanisms that cache the token).

Feedback and Input desired!

-joe


_______________________________________________
OpenStack-dev mailing list
openstack-...@lists.openstack.org<mailto:openstack-...@lists.openstack.org>
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev




_______________________________________________
Mailing list: 
https://launchpad.net/~openstack<https://launchpad.net/%7Eopenstack>
Post to     : 
openstack@lists.launchpad.net<mailto:openstack@lists.launchpad.net>
Unsubscribe : 
https://launchpad.net/~openstack<https://launchpad.net/%7Eopenstack>
More help   : https://help.launchpad.net/ListHelp


_______________________________________________
Mailing list: 
https://launchpad.net/~openstack<https://launchpad.net/%7Eopenstack>
Post to     : 
openstack@lists.launchpad.net<mailto:openstack@lists.launchpad.net>
Unsubscribe : 
https://launchpad.net/~openstack<https://launchpad.net/%7Eopenstack>
More help   : https://help.launchpad.net/ListHelp
_______________________________________________
Mailing list: 
https://launchpad.net/~openstack<https://launchpad.net/%7Eopenstack>
Post to     : 
openstack@lists.launchpad.net<mailto:openstack@lists.launchpad.net>
Unsubscribe : 
https://launchpad.net/~openstack<https://launchpad.net/%7Eopenstack>
More help   : https://help.launchpad.net/ListHelp





_______________________________________________
Mailing list: https://launchpad.net/~openstack
Post to     : openstack@lists.launchpad.net
Unsubscribe : https://launchpad.net/~openstack
More help   : https://help.launchpad.net/ListHelp

Reply via email to