Hi,

I'm Felix Delval from Adobe, my team has been working on adding authentication through Adobe Identity Management System (IMS) to OpenWhisk API as an internal project. IMS can in this context can be thought as an OAuth Bearer Token authentication service.

We are now thinking about making that implementation a more generic Oauth Bearer Token (RFC 6750 [1]) and contributing it back to the OpenWhisk project. I have seen a few threads mentioning this subject in the past: [2] [3]

Our goal is to be able to provide:

 * a customizable OAuth Integration that could work with Adobe IMS,
   Google OAuth Facebook OAuth, ...
 * a chain authentication mechanism so BasicAuth and OAuth can function
   in parallel
 * a first-class OAuth authentication, in which BasicAuth could be
   forbidden

To be able to design such a solution, and also when we were trying to solve it internally, we faced some issues where we thought the OpenWhisk codebase was not extensible enough or providing the wrong interfaces.

I'd like to open the discussion on several of those topics

I - Authentication SPI

AuthenticationDirectiveProvider [4] presents two extension point the `authenticate` method and the `identityByNamespace` method.

The `authenticate` method aims at returning an `Identity` [5] object back which is a good enough abstraction. The `Identity` represents the composition of `Subject`, `Namespace` and `Limits`. We can use this as a base for extension and be generating the Identity necessary for the rest of the process to work.

The case of `identityFromNamespace` function, which is used for anomymous web actions, is slight different. In the context of an Oauth Bearer Token integration, the Identity of an anonymous web actions is more complicated to formulate.

Is there a use case I'm missing for `identityFromNamespace` is an OAuth context?

II - Extensibility issues

In order to be able to extend the authentication mechanism and offer the possibilities to create third party authentication modules some class would need to become extensible. Currently the basic elements of the Identity which are : Privileges, Limits, Namespaces are all with limited access to org.apache.openwhisk.core. Thoses package will need to have public visibility and be considered part of the extensibility API of OpenWhisk.

III - Authorization mechanism

As of now there is a 1-1 relation between Subject (represented by WskAuth) and Namespace. We would need to create a consistent way to link the Subject, represented by an OAuth provider User ID, to the namespace. This would require storage but also probably an API to edit the permissions of each Subject on Namespace. The relationship of Subject, Namespace and Limits being an Identity, it would take the form of an Identity API Management.

As far as I know, OpenWhisk administration is done through the `wskadmin` utilities that access directly the storage. In other words, there are not administration API so far. Should we consider creating an Adiministration Identity API? Would an addition to `wskadmin` be the correct way?

 * [1] https://tools.ietf.org/html/rfc6750
 * [2]
   
https://lists.apache.org/thread.html/565c6823d34e9c618b8b40a1b22fc6979d33307055e971a9cdc73c4d%40%3Cdev.openwhisk.apache.org%3E
 * [3]
   
https://lists.apache.org/thread.html/8b5ddfe5e302098370b8b4bc265e5aed5f57ba7c2c73860363a9da6a%40%3Cdev.openwhisk.apache.org%3E
 * [4]
   
https://github.com/apache/openwhisk/blob/59b67fe96f44e573f3348afed966a1cdaf80ddf2/core/controller/src/main/scala/org/apache/openwhisk/core/controller/RestAPIs.scala#L331
 * [5]
   
https://github.com/apache/openwhisk/blob/59b67fe96f44e573f3348afed966a1cdaf80ddf2/common/scala/src/main/scala/org/apache/openwhisk/core/entity/Identity.scala

If you have any comments or suggestion, I'd love hear them.

Thanks.

FĂ©lix Delval

Reply via email to