Access Control Service: Protocol and Token Transition

Posted by Your DisplayName here! on Least Privilege See other posts from Least Privilege or by Your DisplayName here!
Published on Wed, 22 Jun 2011 06:49:32 GMT Indexed on 2011/06/22 8:30 UTC
Read the original article Hit count: 433

Filed under:
|

ACS v2 supports a number of protocols (WS-Federation, WS-Trust, OpenId, OAuth 2 / WRAP) and a number of token types (SWT, SAML 1.1/2.0) – see Vittorio’s Infographic here. Some protocols are designed for active client (WS-Trust, OAuth / WRAP) and some are designed for passive clients (WS-Federation, OpenID).

One of the most obvious advantages of ACS is that it allows to transition between various protocols and token types. Once example would be using WS-Federation/SAML between your application and ACS to sign in with a Google account. Google is using OpenId and non-SAML tokens, but ACS transitions into WS-Federation and sends back a SAML token. This way you application only needs to understand a single protocol whereas ACS acts as a protocol bridge (see my ACS2 sample here).

Another example would be transformation of a SAML token to a SWT. This is achieved by using the WRAP endpoint – you send a SAML token (from a registered identity provider) to ACS, and ACS turns it into a SWT token for the requested relying party, e.g. (using the WrapClient from Thinktecture.IdentityModel):

[TestMethod]
public void
GetClaimsSamlToSwt()
{
   
// get saml token from idp
    var samlToken = Helper
.GetSamlIdentityTokenForAcs();

   
// send to ACS for SWT converion
    var swtToken = Helper
.GetSimpleWebToken(samlToken);

   
var client = new HttpClient(Constants
.BaseUri);
    client.SetAccessToken(swtToken,
WebClientTokenSchemes
.OAuth);

   
// call REST service with SWT
    var response = client.Get("wcf/client"
);

   
Assert.AreEqual<HttpStatusCode>(HttpStatusCode.OK, response.StatusCode);
}

There are more protocol transitions possible – but they are not so obvious. A popular example would be how to call a REST/SOAP service using e.g. a LiveId login. In the next post I will show you how to approach that scenario.

© Least Privilege or respective owner

Related posts about Azure

Related posts about IdentityModel