Thursday 6 June 2024

WS-Fed vs. SAML vs. OAuth vs. OpenID Connect

https://nirajrules.wordpress.com/2016/03/05/ws-fed-vs-saml-vs-oauth-vs-openid-connect/

WS-Fed vs. SAML vs. OAuth vs. OpenID Connect

 Identity protocols are more pervasive than ever. Almost every enterprise you would come across will have an identity product incubated, tied with a specific identity protocol. While the initial idea behind these protocols was to unify an enterprise-wide identity store with a single set of credentials across applications, new use cases have popped up since then. In this post, I will provide a quick overview of major protocols and the use cases they are trying to solve. I hope you will find it useful.

WS-Fed & SAML are the old boys in the market. Appearing in the early 2000s they are widespread today. Almost every major SSO COTS product supports one of these protocols. WS-Fed (WS-Federation) is a protocol from WS-* family primarily supported by IBM & Microsoft, while SAML (Security Assertion Markup Language) adopted by Computer Associates, Ping Identity, and others for their SSO products. The premise with both WS-Fed and SAML is similar – decouple the applications (relying party/service provider) from the identity provider. This decoupling allows applications to use an identity provider with a predefined protocol, and not care about the implementation details of the identity provider per se.

For web applications, this works via a set of browser redirects and message exchanges. The user tries to access web application, the application redirects the user to identity provider. User authenticates himself, identity provider issues a claims token, and redirects the user back to the application. The application then validates the token (trust needs to established out of band between application and IdP), authorizes user access by asserting claims, and allows user to access protected resources. The token is then stored in the session cookie of user browser, ensuring the process doesn’t have be repeated for every access request.

At a high level, there isn’t much separating the flow of these two protocols, but they are different specifications with each having its own lingo. WS-Fed is perceived to be less complex and light weight (certainly an exception for WS-* family), but SAML being more complex is perceived to be more secure. At the end, you have to look at your ecosystem including existing investments, partners, in-house expertise, etc., and determine which one will provide higher value. The diagram below taken from wiki, depicts the SAML flow.

640px-Saml2-browser-sso-redirect-post

OAuth (Open Standard for Authorization) has a different intent (the current version is OAuth 2.0). Its driving force isn’t SSO but access delegation (type of authorization). In simplest terms, it means giving your access to someone you trust, so that they can perform the job on your behalf. E.g. let’s say you want to do a social media update across Facebook, Twitter, Instagram, etc. The option you have is either to go to these sites manually, or delegate your access to an app that can implicitly connect to these platforms to update status on your behalf. Flow is pretty simple, you ask the application to update your status on Facebook, the app redirects you to Facebook, you authenticate yourself to Facebook, Facebook throws up a consent page stating you are about give this app rights to update status on your behalf, you agree, the app gets an opaque access token from Facebook, app caches that access token, send the status update with access token to facebook, facebook validates the access token (easy in this case as the token was issued by Facebook itself), and updates your status.

OAuth refers to the parties involved as Client, Resource Owner (end-user), Resource Server, and Authorization Server. Mapping these to our Facebook example, the Client is the application trying to do work on your behalf. Resource owner is you (you owe the Facebook account), Resource Server is the Facebook (holding your account), and Authorization Server is also Facebook (in our case Facebook issues the access token using which client can update status on Facebook account). It perfectly ok for Resource Server and Authorization Server to be managed by separate entities, it just means more work to establish common ground for protocols and token formats. Below screenshot depicts the OAuth2 protocol flow

OAuth2

Web community liked the lightweight approach of OAuth. And hence, the question came – can OAuth do authentication as well, providing an alternative to heavy lifting protocols like WS-Fed and SAML? Enter OpenID Connect. Open ID Connect is about adding Authentication to OAuth. It aims at making Authorization Server do more – i.e. not only issuing access token, but also an ID token. ID token is a JWT (JSON Web Token) containing information about authentication event, like when it did it occur, etc. and also about subject / user (specification talks of a UserInfo Endpoint to obtain user details). Going back to the Facebook example, here the client not only relies on Facebook to provide us an opaque access token for status updates, but also an ID token which client can consume and validate that the user actually authenticated with Facebook. It can also fetch additional user details it needs via Facebook’s UserInfo Endpoint. Below diagram from OpenID connect spec indicates the protocol flow.

OpenIDConnect

OP in above case is OpenID Provider. All OpenID Providers have the discovery details published via JSON document found by concatenating provider URL with /.well-known/openid-configuration. This document has all the provider details including Authorization, Token and UserInfo Endpoints. Let’s see a quick example with a Microsoft offering called Azure Active Directory (Azure AD). Azure AD being a OpenID Provider, will have the openid configuration for it’s tenant demoad2.onmicrosoft.com available at https://login.microsoftonline.com/demoad2.onmicrosoft.com/.well-known/openid-configuration.

No comments:

Post a Comment

Note: only a member of this blog may post a comment.