<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><title type="html">Maciej (&amp;quot;Ski&amp;quot;) Skierkowski&amp;#39;s Blog</title><subtitle type="html" /><id>http://blogs.msdn.com/b/sskier/atom.aspx</id><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/sskier/" /><link rel="self" type="application/atom+xml" href="http://blogs.msdn.com/b/sskier/atom.aspx" /><generator uri="http://telligent.com" version="5.6.50428.7875">Telligent Evolution Platform Developer Build (Build: 5.6.50428.7875)</generator><updated>2007-04-22T04:54:00Z</updated><entry><title>Requesting a Token from Azure AppFabric Access Control Service using OAuth 2.0 in C#</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/sskier/archive/2010/12/16/requesting-a-token-from-azure-appfabric-access-control-service-using-oauth-2-0-in-c.aspx" /><id>http://blogs.msdn.com/b/sskier/archive/2010/12/16/requesting-a-token-from-azure-appfabric-access-control-service-using-oauth-2-0-in-c.aspx</id><published>2010-12-16T23:54:21Z</published><updated>2010-12-16T23:54:21Z</updated><content type="html">&lt;p&gt;Back in September I wrote the article “&lt;a href="http://blogs.msdn.com/b/sskier/archive/2010/09/12/requesting-a-token-from-access-control-service-in-c.aspx"&gt;Requesting a Token from Access Control Service in C#&lt;/a&gt;”. In that article I demonstrated the creation of a requesting token, using the Simple Web Token (SWT) token format, and using the OAuth Web Resource Authorization Protocol (WRAP) as the token request protocol. In response ACS will issue a SWT token back which can be used to access web services (commonly REST).&lt;/p&gt;  &lt;p&gt;There is one problem though: &lt;a href="http://wiki.oauth.net/w/page/12238537/OAuth-WRAP"&gt;OAuth WRAP&lt;/a&gt; has been deprecated in favor of the &lt;a href="http://wiki.oauth.net/w/page/25236487/OAuth-2"&gt;OAuth 2.0 specification&lt;/a&gt; which the IETF community has been working on over the past year. &lt;/p&gt;  &lt;p&gt;The Access Control Service team has been working on supporting the latest revision of OAuth 2.0. As such, it is currently implemented in the Labs CTP version of ACS available at &lt;a href="http://portal.appfabriclabs.com/"&gt;http://portal.appfabriclabs.com/&lt;/a&gt; for testing.&lt;/p&gt;  &lt;p&gt;The intent of this article is to provide a simple piece of code to request tokens from ACS using the OAuth 2.0 protocol head instead of OAuth WRAP profile. As such, I will provide a new version of the TokenFactory class I previous posted and I will highlight the differences. For a full understanding of the OAuth 2.0 support in ACS please visit &lt;a href="http://acs.codeplex.com/"&gt;http://acs.codeplex.com/&lt;/a&gt; for documentation and samples.&lt;/p&gt;  &lt;p&gt;Also earlier in the year I had written a number of other samples for obtaining tokens from ACS using other languages other than C#, like &lt;a href="http://blogs.msdn.com/b/sskier/archive/2009/11/06/requesting-a-token-from-access-control-service-in-php.aspx"&gt;PHP&lt;/a&gt;, &lt;a href="http://blogs.msdn.com/b/sskier/archive/2009/11/06/requesting-a-token-from-access-control-service-in-java.aspx"&gt;Java&lt;/a&gt;, and &lt;a href="http://blogs.msdn.com/b/sskier/archive/2009/11/10/requesting-a-token-from-access-control-service-in-python.aspx"&gt;Python&lt;/a&gt;. I will not be updating those samples for using OAuth 2.0 instead of WRAP; however, both protocols are relatively simple so it won’t take much effort to figure out how the changes apply for the other languages.&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="color: blue"&gt;using &lt;/span&gt;System;
&lt;span style="color: blue"&gt;using &lt;/span&gt;System.Collections.Generic;
&lt;span style="color: blue"&gt;using &lt;/span&gt;System.Collections.Specialized;
&lt;span style="color: blue"&gt;using &lt;/span&gt;System.IO;
&lt;span style="color: blue"&gt;using &lt;/span&gt;System.Net;
&lt;span style="color: blue"&gt;using &lt;/span&gt;System.Text;
&lt;span style="color: blue"&gt;using &lt;/span&gt;System.Web.Script.Serialization;

&lt;span style="color: blue"&gt;public class &lt;/span&gt;&lt;span style="color: #2b91af"&gt;TokenFactory
&lt;/span&gt;{
    &lt;span style="color: blue"&gt;private static string &lt;/span&gt;acsHost = &lt;span style="color: #a31515"&gt;&amp;quot;accesscontrol.appfabriclabs.com&amp;quot;&lt;/span&gt;;
    &lt;span style="color: blue"&gt;string &lt;/span&gt;serviceNamespace;
    &lt;span style="color: blue"&gt;string &lt;/span&gt;serviceIdentityName;
    &lt;span style="color: blue"&gt;string &lt;/span&gt;serviceIdentityPassword;

    &lt;span style="color: blue"&gt;public &lt;/span&gt;TokenFactory(&lt;span style="color: blue"&gt;string &lt;/span&gt;serviceNamespace, &lt;span style="color: blue"&gt;string &lt;/span&gt;serviceIdentityName, &lt;span style="color: blue"&gt;string &lt;/span&gt;serviceIdentityPassword)
    {
        &lt;span style="color: blue"&gt;this&lt;/span&gt;.serviceNamespace = serviceNamespace;
        &lt;span style="color: blue"&gt;this&lt;/span&gt;.serviceIdentityName = serviceIdentityName;
        &lt;span style="color: blue"&gt;this&lt;/span&gt;.serviceIdentityPassword = serviceIdentityPassword;
    }

    &lt;span style="color: blue"&gt;public string &lt;/span&gt;GetACSToken(&lt;span style="color: blue"&gt;string &lt;/span&gt;relyingPartyApplicationName)
    {
        &lt;span style="color: blue"&gt;string &lt;/span&gt;response;

        &lt;span style="color: green"&gt;// request a token from ACS
        &lt;/span&gt;&lt;span style="color: #2b91af"&gt;WebClient &lt;/span&gt;client = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;WebClient&lt;/span&gt;();
        client.BaseAddress = &lt;span style="color: blue"&gt;string&lt;/span&gt;.Format(&lt;span style="color: #a31515"&gt;@&amp;quot;https://{0}.{1}/&amp;quot;&lt;/span&gt;, serviceNamespace, acsHost);

        &lt;span style="color: #2b91af"&gt;NameValueCollection &lt;/span&gt;values = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;NameValueCollection&lt;/span&gt;();
        values.Add(&lt;span style="color: #a31515"&gt;&amp;quot;grant_type&amp;quot;&lt;/span&gt;, &lt;span style="color: #a31515"&gt;&amp;quot;password&amp;quot;&lt;/span&gt;);
        values.Add(&lt;span style="color: #a31515"&gt;&amp;quot;client_id&amp;quot;&lt;/span&gt;, serviceIdentityName);
        values.Add(&lt;span style="color: #a31515"&gt;&amp;quot;username&amp;quot;&lt;/span&gt;, serviceIdentityName);
        values.Add(&lt;span style="color: #a31515"&gt;&amp;quot;client_secret&amp;quot;&lt;/span&gt;,serviceIdentityPassword);
        values.Add(&lt;span style="color: #a31515"&gt;&amp;quot;password&amp;quot;&lt;/span&gt;, serviceIdentityPassword);

        &lt;span style="color: blue"&gt;try
        &lt;/span&gt;{
            &lt;span style="color: blue"&gt;byte&lt;/span&gt;[] responseBytes = client.UploadValues(&lt;span style="color: #a31515"&gt;&amp;quot;/v2/OAuth2-10/rp/&amp;quot; &lt;/span&gt;+ relyingPartyApplicationName, values);
            &lt;span style="color: blue"&gt;string &lt;/span&gt;responseData = &lt;span style="color: #2b91af"&gt;Encoding&lt;/span&gt;.UTF8.GetString(responseBytes);

            &lt;span style="color: #2b91af"&gt;JavaScriptSerializer &lt;/span&gt;serializer = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;JavaScriptSerializer&lt;/span&gt;();
            &lt;span style="color: #2b91af"&gt;Dictionary&lt;/span&gt;&amp;lt;&lt;span style="color: blue"&gt;string&lt;/span&gt;, &lt;span style="color: blue"&gt;object&lt;/span&gt;&amp;gt; decodedDictionary = serializer.DeserializeObject(responseData) &lt;span style="color: blue"&gt;as &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Dictionary&lt;/span&gt;&amp;lt;&lt;span style="color: blue"&gt;string&lt;/span&gt;, &lt;span style="color: blue"&gt;object&lt;/span&gt;&amp;gt;;
            response = decodedDictionary[&lt;span style="color: #a31515"&gt;&amp;quot;access_token&amp;quot;&lt;/span&gt;] &lt;span style="color: blue"&gt;as string&lt;/span&gt;;
        }
        &lt;span style="color: blue"&gt;catch &lt;/span&gt;(&lt;span style="color: #2b91af"&gt;WebException &lt;/span&gt;ex)
        {
            &lt;span style="color: #2b91af"&gt;StreamReader &lt;/span&gt;reader = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;StreamReader&lt;/span&gt;(ex.Response.GetResponseStream());
            response = reader.ReadToEnd();
        }
        
        &lt;span style="color: blue"&gt;return &lt;/span&gt;response;
    }
}&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;Notice that there are a number of changes from the &lt;a href="http://blogs.msdn.com/b/sskier/archive/2010/09/12/requesting-a-token-from-access-control-service-in-c.aspx"&gt;previous version&lt;/a&gt;.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;The acsHost address was changed from “accesscontrol.windows.net” to “accesscontrol.appfabriclabs.com”. The OAuth 2.0 support is only on the Labs CTP release and not yet in the production environment, therefore the address change allows us to work against the proper environment.&lt;/li&gt;

  &lt;li&gt;The WRAP protocol required either a SWT or a Username/Password. The previous version used a SWT token which is why there was code to produce the SWT token itself as the token request then it was submitted using WRAP. There is another profile of WRAP which doesn’t require a token and instead just uses the Username/Password. This example doesn’t require a SWT either, it also only depends on the Username/Password which is why there is no code to produce a SWT.&lt;/li&gt;

  &lt;li&gt;The latest version of the labs release also includes better error responses, so I added try/catch and the extraction of the error response for my own development-time diagnosis.&lt;/li&gt;

  &lt;li&gt;The terminology was updated in this sample to match the terminology that is more familiar in the Management Portal.&lt;/li&gt;

  &lt;li&gt;Lastly, there are the obvious changes due to the differences in the protocols. The values being submitted as well as the address needs to be updated. One thing to note is that before the appliesTo property (i.e. the address) was used to identify the Relying Party, now the name of the RP is used instead.&lt;/li&gt;

  &lt;li&gt;This code also requires a reference to System.Web and System.Web.Extensions. Previous version only required System.Web, but this version needs the extensions for the JavaScriptSerializer.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Due to these changes Main() also needs to be updated as we no longer need to produce the SWT request and the terminology is updated.&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;static void &lt;/span&gt;Main(&lt;span style="color: blue"&gt;string&lt;/span&gt;[] args)
{
    &lt;span style="color: blue"&gt;string &lt;/span&gt;serviceNamespace = &lt;span style="color: #a31515"&gt;&amp;quot;...your service namespace...&amp;quot;&lt;/span&gt;;
    &lt;span style="color: blue"&gt;string &lt;/span&gt;serviceIdentityName = &lt;span style="color: #a31515"&gt;&amp;quot;... your service identity name...&amp;quot;&lt;/span&gt;;
    &lt;span style="color: blue"&gt;string &lt;/span&gt;serviceIdentityPassword = &lt;span style="color: #a31515"&gt;&amp;quot;...your service identity password...&amp;quot;&lt;/span&gt;;
    &lt;span style="color: blue"&gt;string &lt;/span&gt;relyingPartyApplicationName = &lt;span style="color: #a31515"&gt;&amp;quot;... your Relying Party application name...&amp;quot;&lt;/span&gt;;

    &lt;span style="color: #2b91af"&gt;TokenFactory &lt;/span&gt;tf = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;TokenFactory&lt;/span&gt;(serviceNamespace, serviceIdentityName, serviceIdentityPassword);
    &lt;span style="color: blue"&gt;string &lt;/span&gt;returnToken = tf.GetACSToken(relyingPartyApplicationName);

    &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(returnToken);
    &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.ReadLine();
}&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10106238" width="1" height="1"&gt;</content><author><name>skierkow</name><uri>http://blogs.msdn.com/sskier/ProfileUrlRedirect.ashx</uri></author></entry><entry><title>Calling a Service Bus HTTP Endpoint with Authentication using WebClient</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/sskier/archive/2010/09/12/client-calling-secure-service-bus-webhttp-endpoint-with-webclient.aspx" /><id>http://blogs.msdn.com/b/sskier/archive/2010/09/12/client-calling-secure-service-bus-webhttp-endpoint-with-webclient.aspx</id><published>2010-09-13T05:57:36Z</published><updated>2010-09-13T05:57:36Z</updated><content type="html">&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;This article demonstrates using WebClient in C# to make a client call to a secure Service Bus endpoint exposed using WebHttpRelayBinding. There are two key take-aways from this that mightn’t be covered by existing documentation and samples: (1) learn how place an Access Control STS issued token into the Authorization header, and (2) make a client call to the service without the dependency on the SB client library. The second point is particularly important because non-.NET languages (e.g. PHP, Python, Java) have an analogous to WebClient, therefore understanding this example enables you to easily build clients in other non-.NET languages.&lt;/p&gt;

&lt;p&gt;Before getting started you’ll first need to create a WCF service exposed via WebHttpRelayBinding. Below are four files you can copy-paste into your own solution and replace the values for the issuer name, key, and service namespace. The picture below illustrates where you can get the service namespace, default issuer name, and default issuer key to use out-of-the-box with these samples. The page is a screenshot of ServiceNamespace.aspx.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-66-86-metablogapi/1033.image_5F00_39D4E673.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-66-86-metablogapi/4331.image_5F00_thumb_5F00_59178D46.png" width="244" height="155" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;App.config&lt;/strong&gt;&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color: #a31515"&gt;xml &lt;/span&gt;&lt;span style="color: red"&gt;version&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;1.0&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;?&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;configuration&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
  &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;system.serviceModel&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;bindings&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
      &amp;lt;!-- &lt;/span&gt;&lt;span style="color: green"&gt;Application Binding &lt;/span&gt;&lt;span style="color: blue"&gt;--&amp;gt;
      &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;webHttpRelayBinding&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;binding &lt;/span&gt;&lt;span style="color: red"&gt;name&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;default&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;&amp;gt;
          &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;security &lt;/span&gt;&lt;span style="color: red"&gt;relayClientAuthenticationType&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;RelayAccessToken&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;security&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
        &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;binding&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
      &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;webHttpRelayBinding&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;bindings&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;

    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;services&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
      &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;service &lt;/span&gt;&lt;span style="color: red"&gt;behaviorConfiguration&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;default&lt;/span&gt;&amp;quot; &lt;span style="color: red"&gt;name&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;Microsoft.ServiceBus.Samples.TextService&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;endpoint &lt;/span&gt;&lt;span style="color: red"&gt;address&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&amp;quot; &lt;span style="color: red"&gt;behaviorConfiguration&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;sharedSecretClientCredentials&lt;/span&gt;&amp;quot;
          &lt;span style="color: red"&gt;binding&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;webHttpRelayBinding&lt;/span&gt;&amp;quot; &lt;span style="color: red"&gt;bindingConfiguration&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;default&lt;/span&gt;&amp;quot;
          &lt;span style="color: red"&gt;name&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;RelayEndpoint&lt;/span&gt;&amp;quot; &lt;span style="color: red"&gt;contract&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;Microsoft.ServiceBus.Samples.ITextContract&lt;/span&gt;&amp;quot; &lt;span style="color: blue"&gt;/&amp;gt;
      &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;service&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;services&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;

    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;behaviors&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
      &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;endpointBehaviors&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;behavior &lt;/span&gt;&lt;span style="color: red"&gt;name&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;sharedSecretClientCredentials&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;&amp;gt;
          &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;transportClientEndpointBehavior &lt;/span&gt;&lt;span style="color: red"&gt;credentialType&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;SharedSecret&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;clientCredentials&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
              &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;sharedSecret &lt;/span&gt;&lt;span style="color: red"&gt;issuerName&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;owner&lt;/span&gt;&amp;quot; &lt;span style="color: red"&gt;issuerSecret&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;-key-&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;/&amp;gt;
            &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;clientCredentials&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
          &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;transportClientEndpointBehavior&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
        &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;behavior&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
      &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;endpointBehaviors&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
      &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;serviceBehaviors&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;behavior &lt;/span&gt;&lt;span style="color: red"&gt;name&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;default&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;&amp;gt;
          &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;serviceDebug &lt;/span&gt;&lt;span style="color: red"&gt;httpHelpPageEnabled&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;false&lt;/span&gt;&amp;quot; &lt;span style="color: red"&gt;httpsHelpPageEnabled&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;false&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;/&amp;gt;
        &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;behavior&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
      &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;serviceBehaviors&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;behaviors&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
  &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;system.serviceModel&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ImageContract.cs&lt;/strong&gt;&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;namespace &lt;/span&gt;Microsoft.ServiceBus.Samples
{
    &lt;span style="color: blue"&gt;using &lt;/span&gt;System;
    &lt;span style="color: blue"&gt;using &lt;/span&gt;System.Runtime.Serialization;
    &lt;span style="color: blue"&gt;using &lt;/span&gt;System.ServiceModel;
    &lt;span style="color: blue"&gt;using &lt;/span&gt;System.ServiceModel.Channels;
    &lt;span style="color: blue"&gt;using &lt;/span&gt;System.ServiceModel.Web;
    &lt;span style="color: blue"&gt;using &lt;/span&gt;System.IO;

    [&lt;span style="color: #2b91af"&gt;ServiceContract&lt;/span&gt;(Name = &lt;span style="color: #a31515"&gt;&amp;quot;TextContract&amp;quot;&lt;/span&gt;, Namespace = &lt;span style="color: #a31515"&gt;&amp;quot;http://samples.microsoft.com/ServiceModel/Relay/&amp;quot;&lt;/span&gt;)]
    &lt;span style="color: blue"&gt;public interface &lt;/span&gt;&lt;span style="color: #2b91af"&gt;ITextContract
    &lt;/span&gt;{
        [&lt;span style="color: #2b91af"&gt;OperationContract&lt;/span&gt;, &lt;span style="color: #2b91af"&gt;WebGet&lt;/span&gt;]
        &lt;span style="color: #2b91af"&gt;String &lt;/span&gt;GetText();
    }

    &lt;span style="color: blue"&gt;public interface &lt;/span&gt;&lt;span style="color: #2b91af"&gt;IImageChannel &lt;/span&gt;: &lt;span style="color: #2b91af"&gt;ITextContract&lt;/span&gt;, &lt;span style="color: #2b91af"&gt;IClientChannel &lt;/span&gt;{ }
}&lt;/pre&gt;

&lt;p&gt;&lt;strong&gt;ImageService.aspx&lt;/strong&gt;&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;namespace &lt;/span&gt;Microsoft.ServiceBus.Samples
{
    &lt;span style="color: blue"&gt;using &lt;/span&gt;System;
    &lt;span style="color: blue"&gt;using &lt;/span&gt;System.Collections.Generic;
    &lt;span style="color: blue"&gt;using &lt;/span&gt;System.Drawing;
    &lt;span style="color: blue"&gt;using &lt;/span&gt;System.Drawing.Imaging;
    &lt;span style="color: blue"&gt;using &lt;/span&gt;System.IO;
    &lt;span style="color: blue"&gt;using &lt;/span&gt;Microsoft.ServiceBus.Web;
    &lt;span style="color: blue"&gt;using &lt;/span&gt;System.ServiceModel;
    &lt;span style="color: blue"&gt;using &lt;/span&gt;System.ServiceModel.Channels;
    &lt;span style="color: blue"&gt;using &lt;/span&gt;System.ServiceModel.Web;

    [&lt;span style="color: #2b91af"&gt;ServiceBehavior&lt;/span&gt;(Name = &lt;span style="color: #a31515"&gt;&amp;quot;TextService&amp;quot;&lt;/span&gt;, Namespace = &lt;span style="color: #a31515"&gt;&amp;quot;http://samples.microsoft.com/ServiceModel/Relay/&amp;quot;&lt;/span&gt;)]
    &lt;span style="color: blue"&gt;class &lt;/span&gt;&lt;span style="color: #2b91af"&gt;TextService &lt;/span&gt;: &lt;span style="color: #2b91af"&gt;ITextContract
    &lt;/span&gt;{
        &lt;span style="color: blue"&gt;public &lt;/span&gt;&lt;span style="color: #2b91af"&gt;String &lt;/span&gt;GetText()
        {
            &lt;span style="color: #2b91af"&gt;WebOperationContext&lt;/span&gt;.Current.OutgoingRequest.ContentType = &lt;span style="color: #a31515"&gt;&amp;quot;text/plain&amp;quot;&lt;/span&gt;;
            &lt;span style="color: blue"&gt;return &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;Hello World&amp;quot;&lt;/span&gt;;
        }
    }
}&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Program.cs&lt;/strong&gt;&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;namespace &lt;/span&gt;Microsoft.ServiceBus.Samples
{
    &lt;span style="color: blue"&gt;using &lt;/span&gt;System;
    &lt;span style="color: blue"&gt;using &lt;/span&gt;System.ServiceModel;
    &lt;span style="color: blue"&gt;using &lt;/span&gt;System.ServiceModel.Description;
    &lt;span style="color: blue"&gt;using &lt;/span&gt;Microsoft.ServiceBus;
    &lt;span style="color: blue"&gt;using &lt;/span&gt;System.ServiceModel.Web;

    &lt;span style="color: blue"&gt;class &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Program
    &lt;/span&gt;{
        &lt;span style="color: blue"&gt;static void &lt;/span&gt;Main(&lt;span style="color: blue"&gt;string&lt;/span&gt;[] args)
        {
            &lt;span style="color: blue"&gt;string &lt;/span&gt;serviceNamespace = &lt;span style="color: #a31515"&gt;&amp;quot;-servicenamespace-&amp;quot;&lt;/span&gt;;
            
            &lt;span style="color: #2b91af"&gt;Uri &lt;/span&gt;address = &lt;span style="color: #2b91af"&gt;ServiceBusEnvironment&lt;/span&gt;.CreateServiceUri(&lt;span style="color: #a31515"&gt;&amp;quot;https&amp;quot;&lt;/span&gt;, serviceNamespace, &lt;span style="color: #a31515"&gt;&amp;quot;Text&amp;quot;&lt;/span&gt;);

            &lt;span style="color: #2b91af"&gt;WebServiceHost &lt;/span&gt;host = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;WebServiceHost&lt;/span&gt;(&lt;span style="color: blue"&gt;typeof&lt;/span&gt;(&lt;span style="color: #2b91af"&gt;TextService&lt;/span&gt;), address);
            host.Open();

            &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: #a31515"&gt;&amp;quot;Copy the following address into a browser to see the image: &amp;quot;&lt;/span&gt;);
            &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(address + &lt;span style="color: #a31515"&gt;&amp;quot;GetText&amp;quot;&lt;/span&gt;);
            &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.WriteLine();
            &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: #a31515"&gt;&amp;quot;Press [Enter] to exit&amp;quot;&lt;/span&gt;);
            &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.ReadLine();

            host.Close();
        }
    }
}&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Once you have the above service up-and-running creating a client using WebClient is strait forward.&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Program.cs&lt;/strong&gt;&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;namespace &lt;/span&gt;Client
{
    &lt;span style="color: blue"&gt;using &lt;/span&gt;System;
    &lt;span style="color: blue"&gt;using &lt;/span&gt;Microsoft.AccessControl.Client;
    &lt;span style="color: blue"&gt;using &lt;/span&gt;System.Net;

    &lt;span style="color: blue"&gt;class &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Program
    &lt;/span&gt;{
        &lt;span style="color: blue"&gt;static void &lt;/span&gt;Main(&lt;span style="color: blue"&gt;string&lt;/span&gt;[] args)
        {
            &lt;span style="color: blue"&gt;string &lt;/span&gt;serviceNamespace = &lt;span style="color: #a31515"&gt;&amp;quot;-&amp;quot;&lt;/span&gt;;
            &lt;span style="color: blue"&gt;string &lt;/span&gt;issuerName = &lt;span style="color: #a31515"&gt;&amp;quot;-&amp;quot;&lt;/span&gt;;
            &lt;span style="color: blue"&gt;string &lt;/span&gt;issuerKey = &lt;span style="color: #a31515"&gt;&amp;quot;-&amp;quot;&lt;/span&gt;;
            
            &lt;span style="color: blue"&gt;string &lt;/span&gt;baseAddress= &lt;span style="color: blue"&gt;string&lt;/span&gt;.Format(&lt;span style="color: #a31515"&gt;&amp;quot;http://{0}.servicebus.windows.net/&amp;quot;&lt;/span&gt;,serviceNamespace);
            &lt;span style="color: blue"&gt;string &lt;/span&gt;serviceAddress = &lt;span style="color: blue"&gt;string&lt;/span&gt;.Format(&lt;span style="color: #a31515"&gt;&amp;quot;https://{0}.servicebus.windows.net/Text/GetText&amp;quot;&lt;/span&gt;, serviceNamespace);

            &lt;span style="color: #2b91af"&gt;TokenFactory &lt;/span&gt;tf = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;TokenFactory&lt;/span&gt;(&lt;span style="color: blue"&gt;string&lt;/span&gt;.Format(&lt;span style="color: #a31515"&gt;&amp;quot;{0}-sb&amp;quot;&lt;/span&gt;,serviceNamespace), issuerName, issuerKey);
            &lt;span style="color: blue"&gt;string &lt;/span&gt;requestToken = tf.CreateRequestToken();
            &lt;span style="color: blue"&gt;string &lt;/span&gt;returnToken = tf.GetACSToken(requestToken, baseAddress);

            &lt;span style="color: #2b91af"&gt;WebClient &lt;/span&gt;client = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;WebClient&lt;/span&gt;();
            
            client.Headers[&lt;span style="color: #2b91af"&gt;HttpRequestHeader&lt;/span&gt;.Authorization] = &lt;span style="color: blue"&gt;string&lt;/span&gt;.Format(&lt;span style="color: #a31515"&gt;&amp;quot;WRAP access_token=\&amp;quot;{0}\&amp;quot;&amp;quot;&lt;/span&gt;, returnToken);
            
            &lt;span style="color: blue"&gt;string &lt;/span&gt;returnString = client.DownloadString(&lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Uri&lt;/span&gt;(serviceAddress));
            
            &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(returnString);

            &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.ReadLine();
        }

    }
}&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;First you’ll notice that I am using TokenFactory, which comes from my “&lt;a href="http://blogs.msdn.com/b/sskier/archive/2010/09/12/requesting-a-token-from-access-control-service-in-c.aspx"&gt;Requesting a Token from Access Control in C#&lt;/a&gt;”. The base address is the address of the Relying Party. This address maps to the Scope in your Access Control Service configuration. A token granted to /foo in Service Bus will give you access too /foo/bar and /foo/baz because Service Bus uses longest pre-fix matching on the path. This is why we can get a token for the root of the path and use that token to access a resource (i.e. endpoint) at it’s child address.&lt;/p&gt;

&lt;p&gt;Also notice that the service namespace when instantiating TokenFactory is is postfixed with “-sb”. This is because the Access Control service has two independent instances of an STS running, one is at &lt;a href="http://servicenamespace.accesscontrol.windows.net"&gt;http://servicenamespace.accesscontrol.windows.net&lt;/a&gt; and the other at &lt;a href="http://servicenamespace-sb.accesscontrol.windows.net/"&gt;http://servicenamespace-sb.accesscontrol.windows.net/&lt;/a&gt; as you can see, they only differ by “-sb”. The latter is a special STS that is just for the Service Bus. I won’t go into the details of this design decision, but from the applications perspective we only have to make sure to use the right STS for issue tokens to be used by the Service Bus.&lt;/p&gt;

&lt;p&gt;Once the requesting token is generated by the TokenFactory it is sent to the Access Control Service STS via GetACSToken() method which returns a SWT token issued by the ACS STS.&lt;/p&gt;

&lt;p&gt;The ACS-issued token is then added to the HTTP Authorization Header. Make sure to include “WRAP access_token=\”\”” in the header. This informs the Service Bus endpoint of the structure of the token. &lt;/p&gt;

&lt;p&gt;F5 and you are golden.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10061051" width="1" height="1"&gt;</content><author><name>skierkow</name><uri>http://blogs.msdn.com/sskier/ProfileUrlRedirect.ashx</uri></author></entry><entry><title>Requesting a Token from Access Control Service in C#</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/sskier/archive/2010/09/12/requesting-a-token-from-access-control-service-in-c.aspx" /><id>http://blogs.msdn.com/b/sskier/archive/2010/09/12/requesting-a-token-from-access-control-service-in-c.aspx</id><published>2010-09-13T05:37:59Z</published><updated>2010-09-13T05:37:59Z</updated><content type="html">&lt;p&gt;The &lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=39856a03-1490-4283-908f-c8bf0bfad8a5&amp;amp;displaylang=en"&gt;AppFabric SDK V1.0 July Update SDK&lt;/a&gt; has a number of Access Control Service examples demonstrating the requesting of a token from the Access Control Service; however I find myself needing a small snippet to insert into other samples (e.g. Service Bus) just to craft a request token and get a token to Auth with SB. As such, I’m posting this “TokenFactory” code that I’ve been re-using. This is fundamentally the same functionality I’ve demonstrated in previous posts in PHP, Java, and Python.&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="color: blue"&gt;namespace &lt;/span&gt;Microsoft.AccessControl.Client
{
    &lt;span style="color: blue"&gt;using &lt;/span&gt;System;
    &lt;span style="color: blue"&gt;using &lt;/span&gt;System.Collections.Generic;
    &lt;span style="color: blue"&gt;using &lt;/span&gt;System.Linq;
    &lt;span style="color: blue"&gt;using &lt;/span&gt;System.Security.Cryptography;
    &lt;span style="color: blue"&gt;using &lt;/span&gt;System.Text;
    &lt;span style="color: blue"&gt;using &lt;/span&gt;System.Web;
    &lt;span style="color: blue"&gt;using &lt;/span&gt;System.Net;
    &lt;span style="color: blue"&gt;using &lt;/span&gt;System.Collections.Specialized;

    &lt;span style="color: blue"&gt;public class &lt;/span&gt;&lt;span style="color: #2b91af"&gt;TokenFactory
    &lt;/span&gt;{
        &lt;span style="color: blue"&gt;private static string &lt;/span&gt;acsHost = &lt;span style="color: #a31515"&gt;&amp;quot;accesscontrol.windows.net&amp;quot;&lt;/span&gt;;
        &lt;span style="color: blue"&gt;string &lt;/span&gt;serviceNamespace;
        &lt;span style="color: blue"&gt;string &lt;/span&gt;issuerName;
        &lt;span style="color: blue"&gt;string &lt;/span&gt;signingKey;

        &lt;span style="color: blue"&gt;public &lt;/span&gt;TokenFactory(&lt;span style="color: blue"&gt;string &lt;/span&gt;serviceNamespace, &lt;span style="color: blue"&gt;string &lt;/span&gt;issuerName, &lt;span style="color: blue"&gt;string &lt;/span&gt;signingKey)
        {
            &lt;span style="color: blue"&gt;this&lt;/span&gt;.serviceNamespace = serviceNamespace;
            &lt;span style="color: blue"&gt;this&lt;/span&gt;.issuerName = issuerName;
            &lt;span style="color: blue"&gt;this&lt;/span&gt;.signingKey = signingKey;
        }

        &lt;span style="color: blue"&gt;public string &lt;/span&gt;CreateRequestToken()
        {
            &lt;span style="color: blue"&gt;return this&lt;/span&gt;.CreatRequestToken(&lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Dictionary&lt;/span&gt;&amp;lt;&lt;span style="color: blue"&gt;string&lt;/span&gt;, &lt;span style="color: blue"&gt;string&lt;/span&gt;&amp;gt;());
        }

        &lt;span style="color: blue"&gt;public string &lt;/span&gt;CreatRequestToken(&lt;span style="color: #2b91af"&gt;Dictionary&lt;/span&gt;&amp;lt;&lt;span style="color: blue"&gt;string&lt;/span&gt;, &lt;span style="color: blue"&gt;string&lt;/span&gt;&amp;gt; claims)
        {
            &lt;span style="color: green"&gt;// build the claims string
            &lt;/span&gt;&lt;span style="color: #2b91af"&gt;StringBuilder &lt;/span&gt;builder = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;StringBuilder&lt;/span&gt;();
            &lt;span style="color: blue"&gt;foreach &lt;/span&gt;(&lt;span style="color: #2b91af"&gt;KeyValuePair&lt;/span&gt;&amp;lt;&lt;span style="color: blue"&gt;string&lt;/span&gt;, &lt;span style="color: blue"&gt;string&lt;/span&gt;&amp;gt; entry &lt;span style="color: blue"&gt;in &lt;/span&gt;claims)
            {
                builder.Append(entry.Key);
                builder.Append(&lt;span style="color: #a31515"&gt;'='&lt;/span&gt;);
                builder.Append(entry.Value);
                builder.Append(&lt;span style="color: #a31515"&gt;'&amp;amp;'&lt;/span&gt;);
            }

            &lt;span style="color: green"&gt;// add the issuer name
            &lt;/span&gt;builder.Append(&lt;span style="color: #a31515"&gt;&amp;quot;Issuer=&amp;quot;&lt;/span&gt;);
            builder.Append(&lt;span style="color: blue"&gt;this&lt;/span&gt;.issuerName);
            builder.Append(&lt;span style="color: #a31515"&gt;'&amp;amp;'&lt;/span&gt;);

            &lt;span style="color: green"&gt;// add the Audience
            &lt;/span&gt;builder.Append(&lt;span style="color: #a31515"&gt;&amp;quot;Audience=&amp;quot;&lt;/span&gt;);
            builder.Append(&lt;span style="color: blue"&gt;string&lt;/span&gt;.Format(&lt;span style="color: #a31515"&gt;&amp;quot;https://{0}.{1}/WRAPv0.9/&amp;amp;&amp;quot;&lt;/span&gt;, &lt;span style="color: blue"&gt;this&lt;/span&gt;.serviceNamespace, acsHost));

            &lt;span style="color: green"&gt;// add the expires on date
            &lt;/span&gt;builder.Append(&lt;span style="color: #a31515"&gt;&amp;quot;ExpiresOn=&amp;quot;&lt;/span&gt;);
            builder.Append(GetExpiresOn(20));

            &lt;span style="color: blue"&gt;string &lt;/span&gt;signature = &lt;span style="color: blue"&gt;this&lt;/span&gt;.GenerateSignature(builder.ToString(), &lt;span style="color: blue"&gt;this&lt;/span&gt;.signingKey);
            builder.Append(&lt;span style="color: #a31515"&gt;&amp;quot;&amp;amp;HMACSHA256=&amp;quot;&lt;/span&gt;);
            builder.Append(signature);

            &lt;span style="color: blue"&gt;return &lt;/span&gt;builder.ToString();
        }

        &lt;span style="color: blue"&gt;private string &lt;/span&gt;GenerateSignature(&lt;span style="color: blue"&gt;string &lt;/span&gt;unsignedToken, &lt;span style="color: blue"&gt;string &lt;/span&gt;signingKey)
        {
            &lt;span style="color: #2b91af"&gt;HMACSHA256 &lt;/span&gt;hmac = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;HMACSHA256&lt;/span&gt;(&lt;span style="color: #2b91af"&gt;Convert&lt;/span&gt;.FromBase64String(signingKey));

            &lt;span style="color: blue"&gt;byte&lt;/span&gt;[] locallyGeneratedSignatureInBytes = hmac.ComputeHash(&lt;span style="color: #2b91af"&gt;Encoding&lt;/span&gt;.ASCII.GetBytes(unsignedToken));

            &lt;span style="color: blue"&gt;string &lt;/span&gt;locallyGeneratedSignature = &lt;span style="color: #2b91af"&gt;HttpUtility&lt;/span&gt;.UrlEncode(&lt;span style="color: #2b91af"&gt;Convert&lt;/span&gt;.ToBase64String(locallyGeneratedSignatureInBytes));

            &lt;span style="color: blue"&gt;return &lt;/span&gt;locallyGeneratedSignature;
        }

        &lt;span style="color: blue"&gt;private static ulong &lt;/span&gt;GetExpiresOn(&lt;span style="color: blue"&gt;double &lt;/span&gt;minutesFromNow)
        {
            &lt;span style="color: #2b91af"&gt;TimeSpan &lt;/span&gt;expiresOnTimeSpan = &lt;span style="color: #2b91af"&gt;TimeSpan&lt;/span&gt;.FromMinutes(minutesFromNow);

            &lt;span style="color: #2b91af"&gt;DateTime &lt;/span&gt;expiresDate = &lt;span style="color: #2b91af"&gt;DateTime&lt;/span&gt;.UtcNow + expiresOnTimeSpan;

            &lt;span style="color: #2b91af"&gt;TimeSpan &lt;/span&gt;ts = expiresDate - &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;DateTime&lt;/span&gt;(1970, 1, 1, 0, 0, 0, 0);

            &lt;span style="color: blue"&gt;return &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Convert&lt;/span&gt;.ToUInt64(ts.TotalSeconds);
        }

        &lt;span style="color: blue"&gt;public string &lt;/span&gt;GetACSToken(&lt;span style="color: blue"&gt;string &lt;/span&gt;swt, &lt;span style="color: blue"&gt;string &lt;/span&gt;appliesTo)
        {
            &lt;span style="color: green"&gt;// request a token from ACS
            &lt;/span&gt;&lt;span style="color: #2b91af"&gt;WebClient &lt;/span&gt;client = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;WebClient&lt;/span&gt;();
            client.BaseAddress = &lt;span style="color: blue"&gt;string&lt;/span&gt;.Format(&lt;span style="color: #a31515"&gt;@&amp;quot;https://{0}.{1}/&amp;quot;&lt;/span&gt;, serviceNamespace, acsHost);

            &lt;span style="color: #2b91af"&gt;NameValueCollection &lt;/span&gt;values = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;NameValueCollection&lt;/span&gt;();
            values.Add(&lt;span style="color: #a31515"&gt;&amp;quot;wrap_assertion_format&amp;quot;&lt;/span&gt;, &lt;span style="color: #a31515"&gt;&amp;quot;SWT&amp;quot;&lt;/span&gt;);
            values.Add(&lt;span style="color: #a31515"&gt;&amp;quot;wrap_assertion&amp;quot;&lt;/span&gt;, swt);
            values.Add(&lt;span style="color: #a31515"&gt;&amp;quot;wrap_scope&amp;quot;&lt;/span&gt;, appliesTo);

            &lt;span style="color: blue"&gt;string &lt;/span&gt;response = &lt;span style="color: blue"&gt;null&lt;/span&gt;;

            &lt;span style="color: blue"&gt;byte&lt;/span&gt;[] responseBytes = client.UploadValues(&lt;span style="color: #a31515"&gt;&amp;quot;WRAPv0.9/&amp;quot;&lt;/span&gt;, values);
            response = &lt;span style="color: #2b91af"&gt;Encoding&lt;/span&gt;.UTF8.GetString(responseBytes);
            &lt;span style="color: blue"&gt;return &lt;/span&gt;&lt;span style="color: #2b91af"&gt;HttpUtility&lt;/span&gt;.UrlDecode(response
                .Split(&lt;span style="color: #a31515"&gt;'&amp;amp;'&lt;/span&gt;)
                .Single(value =&amp;gt; value.StartsWith(&lt;span style="color: #a31515"&gt;&amp;quot;wrap_access_token=&amp;quot;&lt;/span&gt;, &lt;span style="color: #2b91af"&gt;StringComparison&lt;/span&gt;.OrdinalIgnoreCase))
                .Split(&lt;span style="color: #a31515"&gt;'='&lt;/span&gt;)[1]);
        }
    }
}&lt;/pre&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Here is a sample that uses the above to get a token from ACS. In this example I am using it specifically for Service Bus (hence “-sb” in the service namespace).&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre class="code"&gt;&lt;span style="color: blue"&gt;string &lt;/span&gt;serviceNamespace = &lt;span style="color: #a31515"&gt;&amp;quot;-&amp;quot;&lt;/span&gt;;
&lt;span style="color: blue"&gt;string &lt;/span&gt;issuerName = &lt;span style="color: #a31515"&gt;&amp;quot;-&amp;quot;&lt;/span&gt;;
&lt;span style="color: blue"&gt;string &lt;/span&gt;issuerKey = &lt;span style="color: #a31515"&gt;&amp;quot;-&amp;quot;&lt;/span&gt;;
            
&lt;span style="color: blue"&gt;string &lt;/span&gt;baseAddress= &lt;span style="color: blue"&gt;string&lt;/span&gt;.Format(&lt;span style="color: #a31515"&gt;&amp;quot;http://{0}.servicebus.windows.net/&amp;quot;&lt;/span&gt;,serviceNamespace);
&lt;span style="color: blue"&gt;string &lt;/span&gt;serviceAddress = &lt;span style="color: blue"&gt;string&lt;/span&gt;.Format(&lt;span style="color: #a31515"&gt;&amp;quot;https://{0}.servicebus.windows.net/Text/GetText&amp;quot;&lt;/span&gt;, serviceNamespace);

&lt;span style="color: #2b91af"&gt;TokenFactory &lt;/span&gt;tf = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;TokenFactory&lt;/span&gt;(&lt;span style="color: blue"&gt;string&lt;/span&gt;.Format(&lt;span style="color: #a31515"&gt;&amp;quot;{0}-sb&amp;quot;&lt;/span&gt;,serviceNamespace), issuerName, issuerKey);
&lt;span style="color: blue"&gt;string &lt;/span&gt;requestToken = tf.CreateRequestToken();
&lt;span style="color: blue"&gt;string &lt;/span&gt;returnToken = tf.GetACSToken(requestToken, baseAddress);

&lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(requestToken);
&lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(returnToken);
&lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.ReadLine();&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10061047" width="1" height="1"&gt;</content><author><name>skierkow</name><uri>http://blogs.msdn.com/sskier/ProfileUrlRedirect.ashx</uri></author></entry><entry><title>Azure AppFabric Access Control Sample Import/Export Tool (acmsafeguard.exe) </title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/sskier/archive/2010/02/12/azure-appfabric-access-control-sample-import-export-tool-acmsafeguard-exe.aspx" /><link rel="enclosure" type="application/x-zip-compressed" length="33448" href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-components-postattachments/00-09-96-27-58/AcmSafeGuard.zip" /><id>http://blogs.msdn.com/b/sskier/archive/2010/02/12/azure-appfabric-access-control-sample-import-export-tool-acmsafeguard-exe.aspx</id><published>2010-02-12T17:48:00Z</published><updated>2010-02-12T17:48:00Z</updated><content type="html">&lt;P&gt;The AcmSafeGuard tool is a command line tool built to be able to perform a full export and import of the Azure AppFabric Access Control entities, as well as a delete-all operation. This tool, with source, is available in the attachment. I built this by evolving the acm.exe tool that is already included in the AppFabric SDK today. &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Scenarios&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;This tool can be used in two primary scenarios, &lt;STRONG&gt;backup and restore&lt;/STRONG&gt; of the ACS entities in case you are worried you make unintended changes to the data, and &lt;STRONG&gt;environment migration&lt;/STRONG&gt; of ACS entities from one service namespace to another. This second scenario may be helpful in cases you want to setup another service namespace with a duplicate for the purpose of geo-redundancy. This ensures safety in case one of the service namespaces in a given location becomes unavailable; your application logic can resort to using the back-up service. &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Warning &lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;This tool is unsupported because there are many limitations in its capabilities to provide any guarantees of satisfying the scenarios defined. Read the following, it’s the big “WARNING!” sign. &lt;/P&gt;
&lt;P&gt;During the duration of the export process, the entities might change. Since the export process is non-transactional, interdependencies between entities are not guaranteed. For example, if a Rule references an Issuer which was deleted after the Issuers were exported, then there is a broken relationship. Also, if you want to be able to say at which exact time the snapshot occurred, that too is not possible. Since the process takes a while and changes might occur for that duration, it is hard to set an exact time of the snapshot as it is not accurate with either the begging or end. &lt;/P&gt;
&lt;P&gt;If you want to perform a backup/restore process, I suggest that you use the ACS service as a “cache”, and store the “master” data on your system locally and maintain proper backup practices on that master data. &lt;/P&gt;
&lt;P&gt;If you want to perform an environment migration I would suggest that you ensure that the entities do not change for the duration of the export, this way you can actually make an accurate replica. This means you’ll have to prevent modifications of the entities from you application logic. Furthermore, a migration should be done off the master copy, not this ACS cache. That is, if you maintain a master copy of the data as suggested, then instead of migrating from one environment to another, you’d just be deploying the master data to a new ACS service namespace. &lt;BR&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;[&lt;U&gt;&lt;A href="http://blogs.msdn.com/sskier/attachment/9962758.ashx" mce_href="http://blogs.msdn.com/sskier/attachment/9962758.ashx"&gt;DOWNLOAD&lt;/A&gt;&lt;/U&gt;]&lt;/STRONG&gt;&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9962758" width="1" height="1"&gt;</content><author><name>skierkow</name><uri>http://blogs.msdn.com/sskier/ProfileUrlRedirect.ashx</uri></author></entry><entry><title>Sample updates per WRAP update from V0.8 to V0.9</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/sskier/archive/2010/02/11/sample-updates-per-protocol-changes.aspx" /><id>http://blogs.msdn.com/b/sskier/archive/2010/02/11/sample-updates-per-protocol-changes.aspx</id><published>2010-02-11T19:56:00Z</published><updated>2010-02-11T19:56:00Z</updated><content type="html">&lt;P&gt;I am in the process of updating the ACS Token Request samples per protocol updates in the ACS service from Version 0.8 to 0.9. I will update the samples in the blog, but in case you made your own changes to the samples, here are the updates you need to make...&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Change the STS URI from "https://&amp;lt;service&amp;gt;.accesscontrol.windows.net/WRAPv0.8/" &amp;nbsp;to "https://&amp;lt;service&amp;gt;.accesscontrol.windows.net/WRAPv0.9/"&amp;nbsp;&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;Change "wrap_SWT" claim type to "wrap_assertion"&lt;/LI&gt;
&lt;LI&gt;Add "wrap_assertion_format" claim type with claim value "SWT"&lt;/LI&gt;
&lt;LI&gt;Change "applies_to" claim type to "wrap_scope"&lt;/LI&gt;&lt;/UL&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9962184" width="1" height="1"&gt;</content><author><name>skierkow</name><uri>http://blogs.msdn.com/sskier/ProfileUrlRedirect.ashx</uri></author></entry><entry><title>Requesting a Token from Access Control Service in Python</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/sskier/archive/2009/11/10/requesting-a-token-from-access-control-service-in-python.aspx" /><id>http://blogs.msdn.com/b/sskier/archive/2009/11/10/requesting-a-token-from-access-control-service-in-python.aspx</id><published>2009-11-10T00:11:00Z</published><updated>2009-11-10T00:11:00Z</updated><content type="html">&lt;P&gt;&lt;SPAN style="FONT-FAMILY: Tahoma, Arial, Helvetica, sans-serif" class=Apple-style-span&gt;[UPDATE 2/11: Updated to use new STS V0.9 instead of V0.8]&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;In the previous posts I demonstrated requesting tokens from the Access Control Service using both Simple Web Token and Shared Secret requests in Java and in PHP. In this little example I am only showing the Shared Secret request in Python.&lt;/P&gt;
&lt;P&gt;import sys, httplib, urllib&lt;/P&gt;
&lt;P&gt;def MakeSTSRequest(claimSet,stsUrl):&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; headers = {"Content-type":"application/x-www-form-urlencoded"}&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; conn = httplib.HTTPSConnection(stsUri)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; conn.request("POST","/WRAPv0.9/",claimSet,headers)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; response = conn.getresponse()&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; data = response.read()&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; conn.close()&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return data&lt;/P&gt;
&lt;P&gt;def GetTokenBySharedSecret(stsUrl,claimSet,issuerName,issuerKey,rpURL):&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; claimSet = urllib.urlencode({"wrap_scope":rpUri,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "wrap_name":issuerName,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "wrap_password":issuerKey})&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; responseString=MakeSTSRequest(claimSet,stsUrl)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return ExtractTokenFromResponse(responseString)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;def ExtractTokenFromResponse(stringResponse):&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; claims=stringResponse.split("&amp;amp;")&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for claim in claims:&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; keyValue=claim.split("=")&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(keyValue[0]=="wrap_token"):&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return keyValue[1]&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return stringResponse&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;stsUri="[service namespace].accesscontrol.windows.net"&lt;BR&gt;rpUri="[scope applies_to]"&lt;BR&gt;issuerName="[issuer name]"&lt;BR&gt;issuerKey="[issuer key]"&lt;/P&gt;
&lt;P&gt;claimSet={"sample_claim_type":"sample_claim_value"}&lt;BR&gt;print GetTokenBySharedSecret(stsUri,claimSet,issuerName,issuerKey,rpUri)&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9919905" width="1" height="1"&gt;</content><author><name>skierkow</name><uri>http://blogs.msdn.com/sskier/ProfileUrlRedirect.ashx</uri></author></entry><entry><title>Requesting a Token from Access Control Service in Java</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/sskier/archive/2009/11/06/requesting-a-token-from-access-control-service-in-java.aspx" /><id>http://blogs.msdn.com/b/sskier/archive/2009/11/06/requesting-a-token-from-access-control-service-in-java.aspx</id><published>2009-11-06T05:38:00Z</published><updated>2009-11-06T05:38:00Z</updated><content type="html">&lt;DIV&gt;&lt;SPAN style="FONT-FAMILY: Tahoma, Arial, Helvetica, sans-serif" class=Apple-style-span&gt;[UPDATE 2/11: Updated to use new STS V0.9 instead of V0.8]&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="FONT-FAMILY: Tahoma, Arial, Helvetica, sans-serif" class=Apple-style-span&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="FONT-FAMILY: Tahoma, Arial, Helvetica, sans-serif" class=Apple-style-span&gt;Following demonstrates requesting a token from the .NET Services Access Control Services using a Shared Secret and another using a Simple Web Token.&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;You'll also need these three libraries to help in the encoding process and the HTTP calls. There are some hacky pieces of code here, but that's mostly due to my ignorance in Java. Feedback to make this better quality code is welcome.&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;A href="http://commons.apache.org/codec/" mce_href="http://commons.apache.org/codec/"&gt;http://commons.apache.org/codec/&lt;/A&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;A href="http://commons.apache.org/lang/" mce_href="http://commons.apache.org/lang/"&gt;http://commons.apache.org/lang/&lt;/A&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;A href="http://hc.apache.org/" mce_href="http://hc.apache.org/"&gt;http://hc.apache.org/&lt;/A&gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;import java.io.IOException;&lt;/DIV&gt;
&lt;DIV&gt;import java.io.UnsupportedEncodingException;&lt;/DIV&gt;
&lt;DIV&gt;import java.security.InvalidKeyException;&lt;/DIV&gt;
&lt;DIV&gt;import java.security.NoSuchAlgorithmException;&lt;/DIV&gt;
&lt;DIV&gt;import java.util.ArrayList;&lt;/DIV&gt;
&lt;DIV&gt;import java.util.Iterator;&lt;/DIV&gt;
&lt;DIV&gt;import java.util.List;&lt;/DIV&gt;
&lt;DIV&gt;&lt;BR&gt;&lt;/DIV&gt;
&lt;DIV&gt;import javax.crypto.Mac;&lt;/DIV&gt;
&lt;DIV&gt;import javax.crypto.spec.SecretKeySpec;&lt;/DIV&gt;
&lt;DIV&gt;&lt;BR&gt;&lt;/DIV&gt;
&lt;DIV&gt;import org.apache.commons.codec.binary.Base64;&lt;/DIV&gt;
&lt;DIV&gt;import org.apache.commons.lang.StringUtils;&lt;/DIV&gt;
&lt;DIV&gt;import org.apache.http.HttpEntity;&lt;/DIV&gt;
&lt;DIV&gt;import org.apache.http.HttpResponse;&lt;/DIV&gt;
&lt;DIV&gt;import org.apache.http.NameValuePair;&lt;/DIV&gt;
&lt;DIV&gt;import org.apache.http.client.ClientProtocolException;&lt;/DIV&gt;
&lt;DIV&gt;import org.apache.http.client.HttpClient;&lt;/DIV&gt;
&lt;DIV&gt;import org.apache.http.client.entity.UrlEncodedFormEntity;&lt;/DIV&gt;
&lt;DIV&gt;import org.apache.http.client.methods.HttpPost;&lt;/DIV&gt;
&lt;DIV&gt;import org.apache.http.impl.client.DefaultHttpClient;&lt;/DIV&gt;
&lt;DIV&gt;import org.apache.http.message.BasicNameValuePair;&lt;/DIV&gt;
&lt;DIV&gt;import org.apache.http.util.EntityUtils;&lt;/DIV&gt;
&lt;DIV&gt;&lt;BR&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;BR&gt;&lt;/DIV&gt;
&lt;DIV&gt;public class RequestACSToken {&lt;/DIV&gt;
&lt;DIV&gt;&lt;BR&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;private static final String HMAC_SHA256 = "HmacSHA256";&lt;/DIV&gt;
&lt;DIV&gt;&lt;BR&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;public static void main(String[] args) throws ClientProtocolException, NoSuchAlgorithmException, IllegalStateException, IOException, Exception&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;{&lt;/DIV&gt;
&lt;BLOCKQUOTE&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;String stsUrl="https://[service namespace].accesscontrol.windows.net/WRAPv0.9/";&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;String rpUrl="[scope applies_to]";&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;String issuerKey="[issuer key]";&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;String issuerName="[issuer name]";&lt;/DIV&gt;
&lt;DIV&gt;&lt;BR&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;List&amp;lt;NameValuePair&amp;gt; claimSetSharedSecret = new ArrayList&amp;lt;NameValuePair&amp;gt;();&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;claimSetSharedSecret.add(new BasicNameValuePair("sample_in_claim_type","sample_in_claim_value"));&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;String tokenSharedSecret=GetTokenBySharedSecret(stsUrl,claimSetSharedSecret,issuerName,issuerKey,rpUrl);&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;System.out.println("Shared Secret: " + tokenSharedSecret);&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;List&amp;lt;NameValuePair&amp;gt; claimSetSimpleWebToken = new ArrayList&amp;lt;NameValuePair&amp;gt;();&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;claimSetSimpleWebToken.add(new BasicNameValuePair("sample_in_claim_type","sample_in_claim_value"));&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;String tokenSimpleWebToken=GetTokenBySimpleWebToken(stsUrl,claimSetSimpleWebToken,issuerName,issuerKey,rpUrl);&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;System.out.println("Simple Web Token: " + tokenSimpleWebToken);&lt;/DIV&gt;&lt;/BLOCKQUOTE&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;}&lt;/DIV&gt;
&lt;DIV&gt;&lt;BR&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;public static String ExtractTokenFromResponse(String stringResponse)&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;{&lt;/DIV&gt;
&lt;BLOCKQUOTE style="MARGIN-RIGHT: 0px" dir=ltr&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;String[] returnClaimSet=stringResponse.split("&amp;amp;");&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;for(int i=0; i&amp;lt;returnClaimSet.length; i++)&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;{&lt;/DIV&gt;
&lt;BLOCKQUOTE&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;String[] claimItem=returnClaimSet[i].split("=");&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;if(claimItem[0].equals("wrap_token"))&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;{&lt;/DIV&gt;
&lt;BLOCKQUOTE&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;return claimItem[1];&lt;/DIV&gt;&lt;/BLOCKQUOTE&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;}&lt;/DIV&gt;&lt;/BLOCKQUOTE&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;}&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;// this is an error case, but the body does contain the error details so useful to display&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;return stringResponse;&lt;/DIV&gt;&lt;/BLOCKQUOTE&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;}&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;public static String MakeSTSRequest(List&amp;lt;NameValuePair&amp;gt; claimSet, String stsUrl) throws ClientProtocolException, IOException&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;{&lt;/DIV&gt;
&lt;BLOCKQUOTE&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;// encode the claim set&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;UrlEncodedFormEntity entity = new UrlEncodedFormEntity(claimSet, "UTF-8");&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;// make the request to the STS&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;HttpPost httpPost = new HttpPost(stsUrl);&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;httpPost.setEntity(entity);&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;HttpClient client = new DefaultHttpClient();&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;HttpResponse response = client.execute(httpPost);&lt;/DIV&gt;
&lt;DIV&gt;&lt;BR&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;// capture the response into a string&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;HttpEntity responseEntity = response.getEntity();&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;String stringResponse = entity!=null ? EntityUtils.toString(responseEntity) : "";&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;return stringResponse;&lt;/DIV&gt;&lt;/BLOCKQUOTE&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;}&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;public static String GetTokenBySharedSecret(String stsUrl, List&amp;lt;NameValuePair&amp;gt; claimSet, String issuerName, String issuerKey, String rpUrl) throws ClientProtocolException, IOException&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;{&lt;/DIV&gt;
&lt;BLOCKQUOTE&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;claimSet.add(new BasicNameValuePair("wrap_name",issuerName));&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;claimSet.add(new BasicNameValuePair("wrap_password",issuerKey));&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;claimSet.add(new BasicNameValuePair("wrap_scope",rpUrl));&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;String stringResponse=MakeSTSRequest(claimSet,stsUrl);&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;// extract the value for wrap_token and return&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;return ExtractTokenFromResponse(stringResponse);&lt;/DIV&gt;&lt;/BLOCKQUOTE&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;}&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;public static String GetTokenBySimpleWebToken(String stsUrl, List&amp;lt;NameValuePair&amp;gt; claimSet, String issuerName, String issuerKey, String rpUrl) throws ClientProtocolException, IOException, Exception, NoSuchAlgorithmException, IllegalStateException&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;{&lt;/DIV&gt;
&lt;BLOCKQUOTE&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;claimSet.add(new BasicNameValuePair("Issuer",issuerName));&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;claimSet.add(new BasicNameValuePair("Audience",stsUrl));&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;claimSet.add(new BasicNameValuePair("HMACSHA256",CreateSignature(EncodeQueryString(claimSet),issuerKey)));&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;List&amp;lt;NameValuePair&amp;gt; newClaimSet = new ArrayList&amp;lt;NameValuePair&amp;gt;();&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;String wrapToken=EncodeQueryString(claimSet);&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;newClaimSet.add(new BasicNameValuePair("wrap_assertion",wrapToken));&lt;/DIV&gt;
&lt;DIV&gt;newClaimSet.add(new BasicNameValuePair("wrap_assertion_format","SWT"));&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;newClaimSet.add(new BasicNameValuePair("wrap_scope",rpUrl));&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;String stringResponse=MakeSTSRequest(newClaimSet,stsUrl);&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;// extract the value for wrap_token and return&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;return ExtractTokenFromResponse(stringResponse);&lt;/DIV&gt;&lt;/BLOCKQUOTE&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;}&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;&amp;nbsp;public static String CreateSignature(String hmacFreeClaimSet, String key) throws NoSuchAlgorithmException, InvalidKeyException, IllegalStateException, UnsupportedEncodingException&lt;/DIV&gt;
&lt;DIV&gt;{&lt;/DIV&gt;
&lt;BLOCKQUOTE&gt;
&lt;DIV&gt;SecretKeySpec signingKey = new SecretKeySpec(Base64.decodeBase64(key), HMAC_SHA256);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;Mac mac = Mac.getInstance(HMAC_SHA256);&lt;BR&gt;mac.init(signingKey);&lt;/DIV&gt;&lt;/BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;DIV&gt;byte[] rawHmac = mac.doFinal(hmacFreeClaimSet.getBytes("ASCII"));&lt;BR&gt;return Base64.encodeBase64String(rawHmac);&lt;/DIV&gt;&lt;/BLOCKQUOTE&gt;
&lt;DIV&gt;}&lt;/DIV&gt;
&lt;DIV&gt;public static String EncodeQueryString(List&amp;lt;NameValuePair&amp;gt; claimSet) throws UnsupportedEncodingException&lt;BR&gt;{&lt;/DIV&gt;
&lt;BLOCKQUOTE&gt;
&lt;DIV&gt;List&amp;lt;String&amp;gt; claims = new ArrayList&amp;lt;String&amp;gt;();&lt;BR&gt;for(Iterator&amp;lt;NameValuePair&amp;gt; i = claimSet.iterator(); i.hasNext();)&lt;/DIV&gt;
&lt;DIV&gt;{&lt;/DIV&gt;
&lt;BLOCKQUOTE&gt;
&lt;DIV&gt;NameValuePair item = (NameValuePair)i.next();&lt;BR&gt;claims.add(item.getName() + "=" + URLEncoder.encode(item.getValue().trim(),"UTF-8"));&lt;/DIV&gt;&lt;/BLOCKQUOTE&gt;
&lt;DIV&gt;}&lt;/DIV&gt;
&lt;DIV&gt;return StringUtils.join(claims,"&amp;amp;");&lt;/DIV&gt;&lt;/BLOCKQUOTE&gt;
&lt;DIV&gt;}&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9918391" width="1" height="1"&gt;</content><author><name>skierkow</name><uri>http://blogs.msdn.com/sskier/ProfileUrlRedirect.ashx</uri></author></entry><entry><title>Requesting a Token from Access Control Service in PHP</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/sskier/archive/2009/11/06/requesting-a-token-from-access-control-service-in-php.aspx" /><id>http://blogs.msdn.com/b/sskier/archive/2009/11/06/requesting-a-token-from-access-control-service-in-php.aspx</id><published>2009-11-06T05:05:00Z</published><updated>2009-11-06T05:05:00Z</updated><content type="html">&lt;DIV&gt;&lt;SPAN style="FONT-FAMILY: Tahoma, Arial, Helvetica, sans-serif" class=Apple-style-span&gt;[UPDATE 2/11: Updated to use new STS V0.9 instead of V0.8]&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="FONT-FAMILY: Tahoma, Arial, Helvetica, sans-serif" class=Apple-style-span&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="FONT-FAMILY: Tahoma, Arial, Helvetica, sans-serif" class=Apple-style-span&gt;&lt;/SPAN&gt;Following demonstrates requesting a token from the .NET Services Access Control Services using a Shared Secret and another using a Simple Web Token.&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&amp;lt;?php&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;$stsUrl="https://[service namespace].accesscontrol.windows.net/WRAPv0.9/";&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;$rpUrl="[scope applies_to]";&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;$issuerKey="[issuer key]";&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;$issuerName="[issuer name]";&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;$claims = array("sample_in_claim_type"=&amp;gt;"sample_in_claim_value");&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;echo("&amp;lt;b&amp;gt;Shared Secret&amp;lt;/b&amp;gt;: " . GetTokenBySharedSecret($stsUrl,$claims,$issuerName,$issuerKey,$rpUrl) . "&amp;lt;br/&amp;gt;");&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;echo("&amp;lt;b&amp;gt;Simple Web Token&amp;lt;/b&amp;gt;: " . GetTokenBySimpleWebToken($stsUrl,$claims,$issuerName,$issuerKey,$rpUrl) . "&amp;lt;br/&amp;gt;");&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;function GetTokenBySharedSecret($stsUrl, $claimSet, $issuerName, $issuerKey, $rpUrl)&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;{&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;$claimSet["wrap_name"]=$issuerName;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;$claimSet["wrap_password"]=$issuerKey;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;$claimSet["wrap_scope"]=$rpUrl;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;$stringResponse = MakeSTSRequest($claimSet,$stsUrl);&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;return ExtractTokenFromResponse($stringResponse);&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;}&lt;/DIV&gt;
&lt;DIV&gt;&lt;BR&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;function GetTokenBySimpleWebToken($stsUrl, $claimSet, $issuerName, $issuerKey, $rpUrl)&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;{&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;$claimSet["Issuer"]=$issuerName;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;$claimSet["Audience"]=$stsUrl;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;$claimSet["HMACSHA256"]=CreateSignature($claimSet,$issuerKey);&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;$requestSet=array();&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;$requestSet["wrap_assertion"]=http_build_query($claimSet);&lt;/DIV&gt;
&lt;DIV&gt;$requestSet["wrap_assertion_format"]="SWT";&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;$requestSet["wrap_scope"]=$rpUrl;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;$stringResponse = MakeSTSRequest($requestSet,$stsUrl);&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;return ExtractTokenFromResponse($stringResponse);&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;}&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;function MakeSTSRequest($claimSet, $stsUrl)&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;{&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;// encode the claimset&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;$tokenRequestBody=http_build_query($claimSet);&lt;/DIV&gt;
&lt;DIV&gt;&lt;BR&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;// make the request to the STS&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;$options = array(&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;"http"=&amp;gt;array(&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;"method"=&amp;gt;"POST",&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;"header"=&amp;gt;"Content-Type: application/x-www-form-urlencoded",&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;"content"=&amp;gt;$tokenRequestBody));&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;$context=stream_context_create($options);&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;$fp = fopen($stsUrl,'r',false,$context);&lt;/DIV&gt;
&lt;DIV&gt;&lt;BR&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;// capture the response into a string&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;return stream_get_contents($fp);&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;}&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;function ExtractTokenFromResponse($stringResponse)&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;{&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;parse_str($stringResponse,$Values);&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;return $Values["wrap_token"];&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;}&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;function CreateSignature($claimSet, $key)&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;{&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;$hmacFreeClaimSet=http_build_query($claimSet);&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;$key64Encoded=base64_decode($key);&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;return base64_encode(hash_hmac("sha256",$hmacFreeClaimSet,$key64Encoded,true));&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="WHITE-SPACE: pre" class=Apple-tab-span&gt;&lt;/SPAN&gt;}&lt;/DIV&gt;
&lt;DIV&gt;?&amp;gt;&amp;nbsp;&lt;/DIV&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9918386" width="1" height="1"&gt;</content><author><name>skierkow</name><uri>http://blogs.msdn.com/sskier/ProfileUrlRedirect.ashx</uri></author></entry><entry><title>Requesting Tokens from Access Control Service</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/sskier/archive/2009/11/06/requesting-tokens-from-access-control-service-in-php-and-java.aspx" /><id>http://blogs.msdn.com/b/sskier/archive/2009/11/06/requesting-tokens-from-access-control-service-in-php-and-java.aspx</id><published>2009-11-06T05:00:00Z</published><updated>2009-11-06T05:00:00Z</updated><content type="html">&lt;DIV&gt;When designing the Access Control Service we wanted to make it easy to request a token from the STS. We also wanted to make it possible to work with other languages, not just the .NET Framework. As such, I decided to validate the simplicity of the design by picking a few popular programming languages and implementing a token request from the Access Control Service STS. The following few posts will demonstrate requesting a Simple Web Token (SWT) using both Shared Secret and Simple Web Tokens to for the request.&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;If you are unfamiliar with the Access Control Service, please check out the MSDN documentation “Overview of the Access Control Service.” (&lt;A title=http://msdn.microsoft.com/en-us/library/dd582780.aspx href="http://msdn.microsoft.com/en-us/library/dd582780.aspx" mce_href="http://msdn.microsoft.com/en-us/library/dd582780.aspx"&gt;http://msdn.microsoft.com/en-us/library/dd582780.aspx&lt;/A&gt;)&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9918382" width="1" height="1"&gt;</content><author><name>skierkow</name><uri>http://blogs.msdn.com/sskier/ProfileUrlRedirect.ashx</uri></author></entry><entry><title>United States map in XAML</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/sskier/archive/2007/04/22/united-states-map-in-xaml.aspx" /><link rel="enclosure" type="application/xaml+xml" length="53012" href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-components-postattachments/00-02-22-71-65/USMap.xaml" /><id>http://blogs.msdn.com/b/sskier/archive/2007/04/22/united-states-map-in-xaml.aspx</id><published>2007-04-22T06:54:00Z</published><updated>2007-04-22T06:54:00Z</updated><content type="html">&lt;P&gt;I worked on a little toy project on the side for which I needed a XAML map of the United States; however, I could not find such a thing myself. After looking through a few options I ruled out making a SVG to XAML converter, as I suck too much with XSLT. So instead, I traced a map of the united states from an image state by state. End result is attached for your consumption. &lt;/P&gt;
&lt;P&gt;&amp;nbsp;I will continue working with this XAML by making it interactive with some JavaScript thanks to &lt;A class="" title="WPF/E Silverlight" href="http://www.microsoft.com/silverlight/" mce_href="http://www.microsoft.com/silverlight/"&gt;WPF/E (Silverlight)&lt;/A&gt;.&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=2227165" width="1" height="1"&gt;</content><author><name>skierkow</name><uri>http://blogs.msdn.com/sskier/ProfileUrlRedirect.ashx</uri></author></entry></feed>