<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 12 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:Helvetica;
        panose-1:2 11 6 4 2 2 2 2 2 4;}
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
@font-face
        {font-family:Consolas;
        panose-1:2 11 6 9 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";
        color:black;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
pre
        {mso-style-priority:99;
        mso-style-link:"HTML Preformatted Char";
        margin:0in;
        margin-bottom:.0001pt;
        font-size:10.0pt;
        font-family:"Courier New";
        color:black;}
p.MsoAcetate, li.MsoAcetate, div.MsoAcetate
        {mso-style-priority:99;
        mso-style-link:"Balloon Text Char";
        margin:0in;
        margin-bottom:.0001pt;
        font-size:8.0pt;
        font-family:"Tahoma","sans-serif";
        color:black;}
span.HTMLPreformattedChar
        {mso-style-name:"HTML Preformatted Char";
        mso-style-priority:99;
        mso-style-link:"HTML Preformatted";
        font-family:Consolas;
        color:black;}
span.BalloonTextChar
        {mso-style-name:"Balloon Text Char";
        mso-style-priority:99;
        mso-style-link:"Balloon Text";
        font-family:"Tahoma","sans-serif";
        color:black;}
span.EmailStyle21
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body bgcolor="white" lang="EN-US" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Your suggestion to it optional (it being a token scoped to multiple projects). :)<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<div>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif";color:windowtext">From:</span></b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif";color:windowtext"> Adam Young [mailto:ayoung@redhat.com]
<br>
<b>Sent:</b> Monday, October 22, 2012 9:57 PM<br>
<b>To:</b> Jorge Williams<br>
<b>Cc:</b> Joe Savak; OpenStack Development Mailing List; openstack@lists.launchpad.net<br>
<b>Subject:</b> Re: [Openstack] Fwd: [openstack-dev] [keystone] Tokens representing authorization to projects/tenants in the Keystone V3 API<o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<p class="MsoNormal">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?<br>
<br>
On 10/22/2012 03:40 PM, Jorge Williams wrote:<o:p></o:p></p>
</div>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<p class="MsoNormal">+1 here too. <o:p></o:p></p>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">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.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">-jOrGe W.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<div>
<p class="MsoNormal">On Oct 21, 2012, at 11:10 AM, Joe Savak wrote:<o:p></o:p></p>
</div>
<p class="MsoNormal"><br>
<br>
<o:p></o:p></p>
<div>
<div>
<p class="MsoNormal">+1. ;)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">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.<o:p></o:p></p>
</div>
</div>
</div>
</div>
</blockquote>
<p class="MsoNormal">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.<br>
<br>
<br>
<br>
<o:p></o:p></p>
<div>
<div>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-bottom:12.0pt"><br>
On Oct 20, 2012, at 21:07, "Adam Young" <<a href="mailto:ayoung@redhat.com">ayoung@redhat.com</a>> wrote:<o:p></o:p></p>
</div>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<div>
<div>
<p class="MsoNormal">On 10/20/2012 01:50 PM, heckj wrote:<o:p></o:p></p>
</div>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<p class="MsoNormal">I sent this to the openstack-dev list, and thought I'd double post this onto the openstack list at Launchpad for additional feedback.
<o:p></o:p></p>
<div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">-joe<o:p></o:p></p>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<p class="MsoNormal">Begin forwarded message:<o:p></o:p></p>
</div>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<div>
<p class="MsoNormal"><b><span style="font-size:13.5pt;font-family:"Helvetica","sans-serif"">From:
</span></b><span style="font-size:13.5pt;font-family:"Helvetica","sans-serif"">heckj <<a href="mailto:heckj@mac.com">heckj@mac.com</a>></span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><b><span style="font-size:13.5pt;font-family:"Helvetica","sans-serif"">Subject: [openstack-dev] [keystone] Tokens representing authorization to projects/tenants in the Keystone V3 API</span></b><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><b><span style="font-size:13.5pt;font-family:"Helvetica","sans-serif"">Date:
</span></b><span style="font-size:13.5pt;font-family:"Helvetica","sans-serif"">October 19, 2012 1:51:16 PM PDT</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><b><span style="font-size:13.5pt;font-family:"Helvetica","sans-serif"">To:
</span></b><span style="font-size:13.5pt;font-family:"Helvetica","sans-serif"">OpenStack Development Mailing List <<a href="mailto:openstack-dev@lists.openstack.org">openstack-dev@lists.openstack.org</a>></span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><b><span style="font-size:13.5pt;font-family:"Helvetica","sans-serif"">Reply-To:
</span></b><span style="font-size:13.5pt;font-family:"Helvetica","sans-serif"">OpenStack Development Mailing List <<a href="mailto:openstack-dev@lists.openstack.org">openstack-dev@lists.openstack.org</a>></span><o:p></o:p></p>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<p class="MsoNormal">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.<br>
<br>
<br>
A bit of history:<br>
<br>
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)<br>
<br>
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.<br>
<br>
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.<br>
<br>
The quandary:<br>
<br>
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.<o:p></o:p></p>
</div>
</blockquote>
</div>
</div>
</div>
</blockquote>
<p class="MsoNormal"><br>
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. 
<br>
<br>
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.<br>
<br>
<br>
<br>
<o:p></o:p></p>
<div>
<div>
<div>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<div>
<p class="MsoNormal"><br>
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.<br>
<br>
The request outstanding:<br>
<br>
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.<o:p></o:p></p>
</div>
</blockquote>
</div>
</div>
</div>
<p class="MsoNormal">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.  <br>
<br>
<o:p></o:p></p>
<div>
<div>
<div>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<div>
<p class="MsoNormal"><br>
Brief (maybe shoddy) analysis:<br>
<br>
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.<br>
<br>
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).<br>
<br>
Feedback and Input desired!<br>
<br>
-joe<br>
<br>
<br>
_______________________________________________<br>
OpenStack-dev mailing list<br>
<a href="mailto:OpenStack-dev@lists.openstack.org">OpenStack-dev@lists.openstack.org</a><br>
<a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev">http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</a><o:p></o:p></p>
</div>
</blockquote>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
</div>
<p class="MsoNormal"><br>
<br>
<br>
<o:p></o:p></p>
<pre>_______________________________________________<o:p></o:p></pre>
<pre>Mailing list: <a href="https://launchpad.net/%7Eopenstack">https://launchpad.net/~openstack</a><o:p></o:p></pre>
<pre>Post to     : <a href="mailto:openstack@lists.launchpad.net">openstack@lists.launchpad.net</a><o:p></o:p></pre>
<pre>Unsubscribe : <a href="https://launchpad.net/%7Eopenstack">https://launchpad.net/~openstack</a><o:p></o:p></pre>
<pre>More help   : <a href="https://help.launchpad.net/ListHelp">https://help.launchpad.net/ListHelp</a><o:p></o:p></pre>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
</blockquote>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<div>
<p class="MsoNormal">_______________________________________________<br>
Mailing list: <a href="https://launchpad.net/%7Eopenstack">https://launchpad.net/~openstack</a><br>
Post to     : <a href="mailto:openstack@lists.launchpad.net">openstack@lists.launchpad.net</a><br>
Unsubscribe : <a href="https://launchpad.net/%7Eopenstack">https://launchpad.net/~openstack</a><br>
More help   : <a href="https://help.launchpad.net/ListHelp">https://help.launchpad.net/ListHelp</a><o:p></o:p></p>
</div>
</blockquote>
</div>
<p class="MsoNormal">_______________________________________________<br>
Mailing list: <a href="https://launchpad.net/%7Eopenstack">https://launchpad.net/~openstack</a><br>
Post to     : <a href="mailto:openstack@lists.launchpad.net">openstack@lists.launchpad.net</a><br>
Unsubscribe : <a href="https://launchpad.net/%7Eopenstack">https://launchpad.net/~openstack</a><br>
More help   : <a href="https://help.launchpad.net/ListHelp">https://help.launchpad.net/ListHelp</a><o:p></o:p></p>
</blockquote>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
</body>
</html>