<div dir="ltr"><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Feb 27, 2015 at 8:39 AM, Dmitry Tantsur <span dir="ltr"><<a href="mailto:dtantsur@redhat.com" target="_blank">dtantsur@redhat.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">Hi all!<br>
<br>
This (presumably) pretty basic question tortures me for several months already, so I kindly seek for help here.<br>
<br>
I'm working on a Flask-based service [1] and I'd like to use Keystone tokens for authentication. This is an admin-only API, so we need to check for an admin role. We ended up with code [2] first accessing Keystone with a given token and (configurable) admin tenant name, then checking 'admin' role. Things went well for a while.<br>
<br>
Now I'm writing an Ironic driver accessing API of [1]. Pretty naively I was trying to use an Ironic service user credentials, that we use for accessing all other services. For TripleO-based installations it's a user with name 'ironic' and a special tenant 'service'. Here is where problems are. Our code perfectly authenticates a mere user (that has tenant 'admin'), but asks Ironic to go away.<br>
<br>
We've spent some time researching documentation and keystone middleware source code, but didn't find any more clues. Neither did we find a way to use keystone middleware without rewriting half of project. What we need is 2 simple things in a simple Flask application:<br>
1. validate a token<br>
2. make sure it belongs to admin<br></blockquote><div><br></div><div>I'm not really clear on what problem you're having, because I'm not sure if you care about an "admin" username, "admin" tenant name, or "admin" role name. If you're implementing RBAC, you only really need to care about the user have an "admin" role in their list of roles.</div><div><br></div><div>You can wrap your flask application with a configured instance of auth_token middleware; this is about the simplest way to do it, and this also demos the environment variables exposed to your application that you can use to validation authorization:</div><div><br></div><div>  <a href="https://github.com/dolph/keystone-deploy/blob/master/playbooks/roles/http/templates/echo.py#L33-L41">https://github.com/dolph/keystone-deploy/blob/master/playbooks/roles/http/templates/echo.py#L33-L41</a><br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<br>
I'll thankfully appreciate any ideas how to fix our situation.<br>
Thanks in advance!<br>
<br>
Dmitry.<br>
<br>
[1] <a href="https://github.com/stackforge/ironic-discoverd" target="_blank">https://github.com/stackforge/<u></u>ironic-discoverd</a><br>
[2] <a href="https://github.com/stackforge/ironic-discoverd/blob/master/ironic_discoverd/utils.py#L50-L65" target="_blank">https://github.com/stackforge/<u></u>ironic-discoverd/blob/master/<u></u>ironic_discoverd/utils.py#L50-<u></u>L65</a><br>
<br>
______________________________<u></u>______________________________<u></u>______________<br>
OpenStack Development Mailing List (not for usage questions)<br>
Unsubscribe: <a href="http://OpenStack-dev-request@lists.openstack.org?subject:unsubscribe" target="_blank">OpenStack-dev-request@lists.<u></u>openstack.org?subject:<u></u>unsubscribe</a><br>
<a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" target="_blank">http://lists.openstack.org/<u></u>cgi-bin/mailman/listinfo/<u></u>openstack-dev</a><br>
</blockquote></div><br></div></div>