Tuesday, February 14, 2012

REST - an architectural style

Here in this post, I would like to keep some short notes on REST be written down.

REST is an architectural style to build networked applications. 
World wide web is based on REST style has following key characteristics:

1. Resources identified through URL:

URLs are defined to access every resource, which provides a consistent way of naming things in the web. This leads to build up a global addressing space for resource discovery.

Eg: A thing will have a url as : 
https://example.com/v1/Users/2819c223-7f76-453a-919d-413861904646

A collection of things will have a url as:
https://example.com/v1/Users?attributes=userName

2. Uniform interface for resources:

Every resource is exposed through a uniform interface consisting of a universal set of verbs - GET, POST, PUT, DELETE. All the operations to manipulate the resource should be aligned with this interface.

This enables any component that understands a RESTful protocol (i.e HTTP), to communicate with the application and also avoids the need of having WSDL like service descriptions.

3. Multiple representations for resources:

Resource is a concept. It can have multiple representations - represented in multiple formats for different needs. These representations can vary from HTML like web pages to XML to JSON to many more.

4. Stateless Communication:

RESTful  server application doen't retain state - it is either turned into resource state or maintained in client.

This characteristic provides several advantages such as:
       - avoids server being coupled to specific client
       - load balancing becomes easier
       - more reliable to network failures
       - minimizes server footprint

References:
- REST is first defined in PhD thesis of Roy Fielding http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm
- http://www.infoq.com/articles/rest-introduction
- http://docs.oracle.com/javaee/6/tutorial/doc/gijqy.html

Sunday, February 12, 2012

Implementing SCIM with Charon - Part 1

You may need to refer to my previous blog post in order to get an overall idea on SCIM - Simple Cloud Identity Management..

This is about WSO2 Charon - one of the SCIM implementations which will be made available under Apache 2.0 license. Lets look at it in a top down approach.

Following diagram will give an overview on the module break down of Charon along with purpose of each module and  planned tasks of them.


Following is a brief introduction on each of the modules:
  • Charon-Core:
        This is the API that exposes an implementation of SCIM specification. It can be used by any SCIM service provider or client implementation to support SCIM operations/functionalities. In addition to that, it also allows room for extension points to be plugged in according to the particular server side/client side implementation, such as authentication handler, user storage, encoders/decoders etc.
  • Charon-Utils:
          This contains a set of default implementations of the extension points mentioned above. For an example - Basic Auth, OAuth handlers, LDAP based user storage etc. A particular implementation that uses charon-core as SCIM API, can use these default implementations as building blocks.
  • Charon-Deployment: (Note: this is renamed as Charon-Impl)
       A reference implementation of SCIM service provider will be shipped with this module. Currently it is a Apache Wink based webapp that can be deployed in any application server - such as Tomcat, and make the SCIM endpoints be exposed. This is based on the above two modules : charon-core and charon-utils, and illustrates how any SCIM implementation can utilize the API and supporting module provided by Charon.
  • Charon-Samples:
          This contains samples illustrating the SCIM use cases. Samples contains mainly the SCIM client side implementations which can be run against a SCIM server, and hence can also be referenced to get to know how the API provided by Charon can be used to implement SCIM client side.

Well.. this is a brief overview of what Charon is, how it is structured and what each module is supposed to do, supposed to be used for.

 More posts on Charon to be followed...

SCIM - To overcome identity provisioning nightmares...

Identity provisioning is a key aspect of any Identity Management Solution.

In simple terms, it is to create, maintain and delete user accounts and related identities in one or more systems or applications in response to business processes which are initiated either by humans directly or by automated tasks.

Today the enterprise solutions adopt products and services from multiple cloud providers in order to accomplish various business requirements. Hence it is no longer sufficient to maintain user identities only in corporate LDAP.

In most cases, SaaS providers also need dedicated user accounts created for the cloud service users, which raises the need of proper identity provisioning mechanisms to be in place.

Currently, different cloud vendors expose non-standard provisioning APIs which makes it a nightmare for the enterprises to develop and maintain proprietary connectors to integrate with multiple SaaS providers.
For an example, Google exposes Google Provisioning API for provisioning user accounts in Google Apps Domain.

When enterprise IT systems consist of distributed, heterogeneous components from multiple vendors and from both in house and from cloud, it is key to have an open standard that all agree upon, in order to achieve interoperability and simplicity while getting rid of multiple connectors to perform the same thing.

Simple Cloud Identity Management is an emerging open standard which defines a comprehensive REST API along with a platform neutral schema and a SAML binding to facilitate the user management operations across SaaS applications; placing specific emphasis on simplicity and interoperability as well.

SCIM specification is in its version 1 and the cloud directory working group is  working on submitting it to IETF. You can get subscribed to cloud-directory@googlegroups.com and get updated with the latest happenings w.r.t SCIM spec.

Following embedded presentation which was used in a webinar, illustrates how some of the common use cases encountered in an enterprise identity management solution are achieved with SCIM.

We also identify the key characteristics of SCIM which makes it preferable over the other existing provisioning standards. Highlights of the overall SCIM specification -which is currently consisted of three normative parts, is also included in the slides.