Hi everyone,

As we are now in the stages of removing the admin web interface and instead 
relying on the REST API for all aspects of Wookie, I think its time we thought 
about how we want security to work in Wookie more generally. 

Currently we have two distinct forms of authentication:

- API keys are used to authenticate requests from applications working with 
widget instances, assumed to be using a server-server back channel
- HTTP Basic authentication is used to access admin APIs using the servlet 
container's security roles

The problem is that each authn approach is configured statically against a 
particular set of API requests with implied authz roles.

I also have a proposal[1] to use both a key and secret to sign API requests 
using Two-legged oAuth, which could be used for all the APIs when combined with 
permissions associated with key/secret combinations. I've also attached the 
code I've been playing with for that to the issue to take a look at.

Of course this then puts an overhead on connectors to be able to sign messages, 
manage consumer secrets etc. On the plus side, it doesn't matter about sending 
requests over plain HTTP outside the firewall when using signed requests, as 
you never disclose the shared secret.

This could be configured to still use the plain unsigned requests in cases 
where Wookie is behind the firewall and you want to use simple requests, or we 
can allow unsigned requests for some APIs but not others - e.g. keep the 
current distinction between admin and non-admin interfaces - maybe using 
Shiro[2]. Its more work, but doable, and more flexible than editing web.xml. So 
the code I attached to the Jira ticket could be modified to check whether the 
request is signed or unsigned, and add that as a property to an authenticated 
principal for use when checking authz.

In any case, any changes to authn/authz would mean updating the connectors 
(something we have to do for 0.10 anyway as we're updating other parts of the 
API.)

What do you think?

S

PS we also have the possibly-related issue of getting access rights to Rave 
admins when co-deploying Wookie.

[1] https://issues.apache.org/jira/browse/WOOKIE-279
[2] http://shiro.apache.org/



Reply via email to