<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>www.leastprivilege.com</title>
    <link>http://www.leastprivilege.com/</link>
    <description>dominick baier on .net, security and other stuff</description>
    <image>
      <url>http://www.leastprivilege.com/favicon.ico</url>
      <title>www.leastprivilege.com</title>
      <link>http://www.leastprivilege.com/</link>
    </image>
    <copyright>Dominick Baier</copyright>
    <lastBuildDate>Sat, 24 Jul 2010 08:14:36 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 2.0.7226.0</generator>
    <managingEditor>dbaier@pleasepleasenospam_leastprivilege.com</managingEditor>
    <webMaster>dbaier@pleasepleasenospam_leastprivilege.com</webMaster>
    <item>
      <trackback:ping>http://www.leastprivilege.com/Trackback.aspx?guid=b5028a25-6e10-40ab-b229-c54b30529ff5</trackback:ping>
      <pingback:server>http://www.leastprivilege.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.leastprivilege.com/PermaLink.aspx?guid=b5028a25-6e10-40ab-b229-c54b30529ff5</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <title>WIF, ASP.NET 4.0 and Request Validation</title>
      <guid isPermaLink="false">http://www.leastprivilege.com/PermaLink.aspx?guid=b5028a25-6e10-40ab-b229-c54b30529ff5</guid>
      <link>http://www.leastprivilege.com/WIFASPNET40AndRequestValidation.aspx</link>
      <pubDate>Sat, 24 Jul 2010 08:14:36 GMT</pubDate>
      <description>&lt;p&gt;
Since the response of a WS-Federation sign-in request contains XML, the ASP.NET built-in
request validation will trigger an exception. To solve this, request validation needs
to be turned off for pages receiving such a response message.
&lt;/p&gt;
&lt;p&gt;
Starting with ASP.NET 4.0 you can plug in your own request validation logic. This
allows letting WS-Federation messages through, while applying all standard request
validation to all other requests. The WIF SDK (v4) contains a sample validator that
does exactly that:
&lt;/p&gt;
&lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;
&lt;span style="font-family: consolas; color: blue"&gt;public&lt;/span&gt;&lt;span style="font-family: consolas"&gt; &lt;span style="color: blue"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af"&gt;WSFedRequestValidator&lt;/span&gt; : &lt;span style="color: #2b91af"&gt;RequestValidator&lt;/span&gt;
&lt;br&gt;&lt;?xml:namespace prefix = o /&gt;
{&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;
&lt;span style="font-family: consolas"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;protected&lt;/span&gt; &lt;span style="color: blue"&gt;override&lt;/span&gt; &lt;span style="color: blue"&gt;bool&lt;/span&gt; IsValidRequestString(&lt;br&gt;
&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #2b91af"&gt;HttpContext&lt;/span&gt; context, 
&lt;br&gt;
&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;string&lt;/span&gt; value, 
&lt;br&gt;
&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #2b91af"&gt;RequestValidationSource&lt;/span&gt; requestValidationSource, 
&lt;br&gt;
&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;string&lt;/span&gt; collectionKey, 
&lt;br&gt;
&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;out&lt;/span&gt; &lt;span style="color: blue"&gt;int&lt;/span&gt; validationFailureIndex)&lt;br&gt;
&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;br&gt;
&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;validationFailureIndex
= 0;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;
&lt;span style="font-family: consolas"&gt;
&lt;br&gt;
&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;if&lt;/span&gt; (
requestValidationSource == &lt;span style="color: #2b91af"&gt;RequestValidationSource&lt;/span&gt;.Form
&amp;amp;&amp;amp; 
&lt;br&gt;
&lt;span style="mso-spacerun: yes"&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; &lt;/span&gt;collectionKey.Equals( 
&lt;br&gt;
&lt;span style="mso-spacerun: yes"&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; &lt;/span&gt;&lt;span style="color: #2b91af"&gt;WSFederationConstants&lt;/span&gt;.&lt;span style="color: #2b91af"&gt;Parameters&lt;/span&gt;.Result, 
&lt;br&gt;
&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #2b91af"&gt;StringComparison&lt;/span&gt;.Ordinal
) )&lt;br&gt;
&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;br&gt;
&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #2b91af"&gt;SignInResponseMessage&lt;/span&gt; message
= 
&lt;br&gt;
&lt;span style="mso-spacerun: yes"&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; &lt;/span&gt;&lt;span style="color: #2b91af"&gt;WSFederationMessage&lt;/span&gt;.CreateFromFormPost(context.Request) 
&lt;br&gt;
&lt;span style="mso-spacerun: yes"&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; &lt;/span&gt;&lt;span style="color: blue"&gt;as&lt;/span&gt; &lt;span style="color: #2b91af"&gt;SignInResponseMessage&lt;/span&gt;;&lt;br&gt;
&lt;br&gt;
&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;if&lt;/span&gt; (message
!= &lt;span style="color: blue"&gt;null&lt;/span&gt;)&lt;br&gt;
&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;br&gt;
&lt;span style="mso-spacerun: yes"&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; &lt;/span&gt;&lt;span style="color: blue"&gt;return&lt;/span&gt; &lt;span style="color: blue"&gt;true&lt;/span&gt;;&lt;br&gt;
&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;br&gt;
&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;br&gt;
&lt;br&gt;
&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;return&lt;/span&gt; &lt;span style="color: blue"&gt;base&lt;/span&gt;.IsValidRequestString( 
&lt;br&gt;
&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;context, 
&lt;br&gt;
&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;value, 
&lt;br&gt;
&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;requestValidationSource, 
&lt;br&gt;
&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;collectionKey, 
&lt;br&gt;
&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;out&lt;/span&gt; validationFailureIndex
);&lt;br&gt;
&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;br&gt;
}&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
&lt;o:p&gt;Register this validator via web.config:&lt;/o:p&gt;
&lt;/p&gt;
&lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;
&lt;span style="font-family: consolas; color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: consolas; color: #a31515"&gt;httpRuntime&lt;/span&gt;&lt;span style="font-family: consolas; color: blue"&gt; &lt;/span&gt;&lt;span style="font-family: consolas; color: red"&gt;requestValidationType&lt;/span&gt;&lt;span style="font-family: consolas; color: blue"&gt;=&lt;/span&gt;&lt;span style="font-family: consolas"&gt;"&lt;span style="color: blue"&gt;WSFedRequestValidator&lt;/span&gt;"&lt;span style="color: blue"&gt; /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=b5028a25-6e10-40ab-b229-c54b30529ff5" /&gt;</description>
      <category>IdentityModel</category>
    </item>
    <item>
      <trackback:ping>http://www.leastprivilege.com/Trackback.aspx?guid=d2c021ba-c8cc-4e72-b322-66ed222b9c51</trackback:ping>
      <pingback:server>http://www.leastprivilege.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.leastprivilege.com/PermaLink.aspx?guid=d2c021ba-c8cc-4e72-b322-66ed222b9c51</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I just uploaded version 1.2 of StarterSTS. This is simply a conversion of v1.1 to
a web application project. Some people have asked for it so here we go.
</p>
        <p>
This version is still compiled against .NET 3.5 SP1 – but this will the last release.
All upcoming releases will be .NET 4.0.
</p>
        <p>
          <a href="http://startersts.codeplex.com/">Codeplex Site</a>
        </p>
        <img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=d2c021ba-c8cc-4e72-b322-66ed222b9c51" />
      </body>
      <title>StarterSTS v1.2</title>
      <guid isPermaLink="false">http://www.leastprivilege.com/PermaLink.aspx?guid=d2c021ba-c8cc-4e72-b322-66ed222b9c51</guid>
      <link>http://www.leastprivilege.com/StarterSTSV12.aspx</link>
      <pubDate>Thu, 22 Jul 2010 09:23:30 GMT</pubDate>
      <description>&lt;p&gt;
I just uploaded version 1.2 of StarterSTS. This is simply a conversion of v1.1 to
a web application project. Some people have asked for it so here we go.
&lt;/p&gt;
&lt;p&gt;
This version is still compiled against .NET 3.5 SP1 – but this will the last release.
All upcoming releases will be .NET 4.0.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://startersts.codeplex.com/"&gt;Codeplex Site&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=d2c021ba-c8cc-4e72-b322-66ed222b9c51" /&gt;</description>
    </item>
    <item>
      <trackback:ping>http://www.leastprivilege.com/Trackback.aspx?guid=85aac735-9853-4987-bcfc-6685878c6803</trackback:ping>
      <pingback:server>http://www.leastprivilege.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.leastprivilege.com/PermaLink.aspx?guid=85aac735-9853-4987-bcfc-6685878c6803</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
really? when will super duper IIS finally support non-Windows accounts for HTTP authentication?
</p>
        <p>
          <a title="http://blogs.msdn.com/b/astoriateam/archive/2010/07/21/odata-and-authentication-part-6-custom-basic-authentication.aspx" href="http://blogs.msdn.com/b/astoriateam/archive/2010/07/21/odata-and-authentication-part-6-custom-basic-authentication.aspx">http://blogs.msdn.com/b/astoriateam/archive/2010/07/21/odata-and-authentication-part-6-custom-basic-authentication.aspx</a>
        </p>
        <p>
see here for a complete module including IIS management integration:
</p>
        <p>
          <a href="http://custombasicauth.codeplex.com">http://custombasicauth.codeplex.com</a>
        </p>
        <img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=85aac735-9853-4987-bcfc-6685878c6803" />
      </body>
      <title>IIS &amp;amp; RESTful Services #FAIL</title>
      <guid isPermaLink="false">http://www.leastprivilege.com/PermaLink.aspx?guid=85aac735-9853-4987-bcfc-6685878c6803</guid>
      <link>http://www.leastprivilege.com/IISAmpRESTfulServicesFAIL.aspx</link>
      <pubDate>Wed, 21 Jul 2010 20:39:18 GMT</pubDate>
      <description>&lt;p&gt;
really? when will super duper IIS finally support non-Windows accounts for HTTP authentication?
&lt;/p&gt;
&lt;p&gt;
&lt;a title="http://blogs.msdn.com/b/astoriateam/archive/2010/07/21/odata-and-authentication-part-6-custom-basic-authentication.aspx" href="http://blogs.msdn.com/b/astoriateam/archive/2010/07/21/odata-and-authentication-part-6-custom-basic-authentication.aspx"&gt;http://blogs.msdn.com/b/astoriateam/archive/2010/07/21/odata-and-authentication-part-6-custom-basic-authentication.aspx&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
see here for a complete module including IIS management integration:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://custombasicauth.codeplex.com"&gt;http://custombasicauth.codeplex.com&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=85aac735-9853-4987-bcfc-6685878c6803" /&gt;</description>
      <category>IIS</category>
      <category>WCF</category>
    </item>
    <item>
      <trackback:ping>http://www.leastprivilege.com/Trackback.aspx?guid=ec3f63f1-fba9-4aac-aaf8-b02eab78ae6b</trackback:ping>
      <pingback:server>http://www.leastprivilege.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.leastprivilege.com/PermaLink.aspx?guid=ec3f63f1-fba9-4aac-aaf8-b02eab78ae6b</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
As always: thank you Microsoft!
</p>
        <img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=ec3f63f1-fba9-4aac-aaf8-b02eab78ae6b" />
      </body>
      <title>Re-MVP&amp;rsquo;d 2010</title>
      <guid isPermaLink="false">http://www.leastprivilege.com/PermaLink.aspx?guid=ec3f63f1-fba9-4aac-aaf8-b02eab78ae6b</guid>
      <link>http://www.leastprivilege.com/ReMVPrsquod2010.aspx</link>
      <pubDate>Tue, 20 Jul 2010 05:33:43 GMT</pubDate>
      <description>&lt;p&gt;
As always: thank you Microsoft!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=ec3f63f1-fba9-4aac-aaf8-b02eab78ae6b" /&gt;</description>
      <category>Misc</category>
    </item>
    <item>
      <trackback:ping>http://www.leastprivilege.com/Trackback.aspx?guid=6053a2b2-df33-4a95-8858-887e24e2c4d5</trackback:ping>
      <pingback:server>http://www.leastprivilege.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.leastprivilege.com/PermaLink.aspx?guid=6053a2b2-df33-4a95-8858-887e24e2c4d5</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
The SL/WIF integration code that ships with the Identity Training Kit only supports
Windows and UserName credentials to request tokens from an STS. This is fine for simple
single STS scenarios (like a single IdP). But the more common pattern for claims/token
based systems is to split the STS roles into an IdP and a Resource STS (or whatever
you wanna call it). 
</p>
        <p>
In this case, the 2nd leg requires to present the issued token from the 1st leg –
this is not directly supported by the bits. But they can be easily modified to accomplish
this.
</p>
        <p>
          <strong>The Credential</strong>
          <br />
Fist we need a class that represents an issued token credential. Here we store the
RSTR that got returned from the client to IdP request:
</p>
        <pre style="font-family: consolas">
          <span style="color: blue">public</span> <span style="color: blue">class</span> <span style="color: #2b91af">IssuedTokenCredentials</span> : <span style="color: #2b91af">IRequestCredentials</span><br />
{<br />
    <span style="color: blue">public</span> <span style="color: blue">string</span> IssuedToken
{ <span style="color: blue">get</span>; <span style="color: blue">set</span>; }<br />
    <span style="color: blue">public</span> <span style="color: #2b91af">RequestSecurityTokenResponse</span> RSTR
{ <span style="color: blue">get</span>; <span style="color: blue">set</span>; }<br /><br />
    <span style="color: blue">public</span> IssuedTokenCredentials(<span style="color: #2b91af">RequestSecurityTokenResponse</span> rstr)<br />
    {<br />
        RSTR = rstr;<br />
        IssuedToken = rstr.RequestedSecurityToken.RawToken;<br />
    }<br />
}</pre>
        <p>
          <strong>The Binding<br /></strong>Next we need a binding to be used with issued token credential requests.
This assumes you have an STS endpoint for mixed mode security with SecureConversation
turned off.
</p>
        <pre style="font-family: consolas">
          <span style="color: blue">public</span> <span style="color: blue">class</span> <span style="color: #2b91af">WSTrustBindingIssuedTokenMixed</span> : <span style="color: #2b91af">WSTrustBinding</span><br />
{<br />
    <span style="color: blue">public</span> WSTrustBindingIssuedTokenMixed()<br />
    {<br />
        <span style="color: blue">this</span>.Elements.Add( <span style="color: blue">new</span> <span style="color: #2b91af">HttpsTransportBindingElement</span>()
);<br />
    }<br />
}</pre>
        <p>
          <strong>WSTrustClient</strong>
          <br />
The last step is to make some modifications to <em>WSTrustClient</em> to make it issued
token aware. In the constructor you have to check for the credential type, and if
it is an issued token, store it away.
</p>
        <pre style="font-family: consolas">
          <span style="color: blue">private</span> <span style="color: #2b91af">RequestSecurityTokenResponse</span> _rstr;<br /></pre>
        <pre style="font-family: consolas">
          <span style="color: blue">public</span> WSTrustClient( <span style="color: #2b91af">Binding</span> binding, <span style="color: #2b91af">EndpointAddress</span> remoteAddress, 
<br /><span style="color: #2b91af">IRequestCredentials</span> credentials )<br />
    : <span style="color: blue">base</span>( binding, remoteAddress
)<br />
{<br />
    <span style="color: blue">if</span> ( <span style="color: blue">null</span> ==
credentials )<br />
    {<br />
        <span style="color: blue">throw</span> <span style="color: blue">new</span> <span style="color: #2b91af">ArgumentNullException</span>( <span style="color: #a31515">"credentials"</span> );<br />
    }<br /><br />
    <span style="color: blue">if</span> (credentials <span style="color: blue">is</span> <span style="color: #2b91af">UsernameCredentials</span>)<br />
    {<br />
        <span style="color: #2b91af">UsernameCredentials</span> usernname
= credentials <span style="color: blue">as</span> <span style="color: #2b91af">UsernameCredentials</span>;<br />
        <span style="color: blue">base</span>.ChannelFactory.Credentials.UserName.UserName
= usernname.Username;<br />
        <span style="color: blue">base</span>.ChannelFactory.Credentials.UserName.Password
= usernname.Password;<br />
    }<br />
    <span style="color: blue">else</span> <span style="color: blue">if</span> (credentials <span style="color: blue">is</span> <span style="color: #2b91af">IssuedTokenCredentials</span>)<br />
    {<br />
        <span style="color: blue">var</span> issuedToken
= credentials <span style="color: blue">as</span> <span style="color: #2b91af">IssuedTokenCredentials</span>;<br />
        _rstr = issuedToken.RSTR;<br />
    }<br />
    <span style="color: blue">else</span> <span style="color: blue">if</span> (credentials <span style="color: blue">is</span> <span style="color: #2b91af">WindowsCredentials</span>)<br />
    { }<br />
    <span style="color: blue">else</span><br />
    {<br />
        <span style="color: blue">throw</span> <span style="color: blue">new</span> <span style="color: #2b91af">ArgumentOutOfRangeException</span>(<span style="color: #a31515">"credentials"</span>, <span style="color: #a31515">"type
was not expected"</span>);<br />
    }<br />
}</pre>
        <p>
Next – when <em>WSTrustClient</em> constructs the RST message to the STS, the issued
token header must be embedded when needed:
</p>
        <pre style="font-family: consolas">
          <span style="color: blue">private</span> <span style="color: #2b91af">Message</span> BuildRequestAsMessage( <span style="color: #2b91af">RequestSecurityToken</span> request
)<br />
{<br />
    <span style="color: blue">var</span> message = <span style="color: #2b91af">Message</span>.CreateMessage( 
<br /><span style="color: blue">base</span>.Endpoint.Binding.MessageVersion ?? <span style="color: #2b91af">MessageVersion</span>.Default,<br />
      IssueAction,<br />
      (<span style="color: #2b91af">BodyWriter</span>) <span style="color: blue">new</span> <span style="color: #2b91af">WSTrustRequestBodyWriter</span>(
request ) );<br /><br />
    <span style="color: blue">if</span> (_rstr != <span style="color: blue">null</span>)<br />
    {<br />
        message.Headers.Add(<span style="color: blue">new</span> <span style="color: #2b91af">IssuedTokenHeader</span>(_rstr));<br />
    }<br /><br />
    <span style="color: blue">return</span> message;<br />
}</pre>
        <p>
HTH
</p>
        <img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=6053a2b2-df33-4a95-8858-887e24e2c4d5" />
      </body>
      <title>Modifying the SL/WIF Integration Bits to support Issued Token Credentials</title>
      <guid isPermaLink="false">http://www.leastprivilege.com/PermaLink.aspx?guid=6053a2b2-df33-4a95-8858-887e24e2c4d5</guid>
      <link>http://www.leastprivilege.com/ModifyingTheSLWIFIntegrationBitsToSupportIssuedTokenCredentials.aspx</link>
      <pubDate>Tue, 22 Jun 2010 06:45:17 GMT</pubDate>
      <description>&lt;p&gt;
The SL/WIF integration code that ships with the Identity Training Kit only supports
Windows and UserName credentials to request tokens from an STS. This is fine for simple
single STS scenarios (like a single IdP). But the more common pattern for claims/token
based systems is to split the STS roles into an IdP and a Resource STS (or whatever
you wanna call it). 
&lt;/p&gt;
&lt;p&gt;
In this case, the 2nd leg requires to present the issued token from the 1st leg –
this is not directly supported by the bits. But they can be easily modified to accomplish
this.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;The Credential&lt;/strong&gt;
&lt;br&gt;
Fist we need a class that represents an issued token credential. Here we store the
RSTR that got returned from the client to IdP request:
&lt;/p&gt;
&lt;pre style="font-family: consolas"&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue"&gt;class&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af"&gt;IssuedTokenCredentials&lt;/span&gt; : &lt;span style="color: #2b91af"&gt;IRequestCredentials&lt;/span&gt;
&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue"&gt;string&lt;/span&gt; IssuedToken
{ &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;set&lt;/span&gt;; }&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af"&gt;RequestSecurityTokenResponse&lt;/span&gt; RSTR
{ &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;set&lt;/span&gt;; }&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;public&lt;/span&gt; IssuedTokenCredentials(&lt;span style="color: #2b91af"&gt;RequestSecurityTokenResponse&lt;/span&gt; rstr)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; RSTR = rstr;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IssuedToken = rstr.RequestedSecurityToken.RawToken;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;
}&lt;/pre&gt;
&lt;p&gt;
&lt;strong&gt;The Binding&lt;br&gt;
&lt;/strong&gt;Next we need a binding to be used with issued token credential requests.
This assumes you have an STS endpoint for mixed mode security with SecureConversation
turned off.
&lt;/p&gt;
&lt;pre style="font-family: consolas"&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue"&gt;class&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af"&gt;WSTrustBindingIssuedTokenMixed&lt;/span&gt; : &lt;span style="color: #2b91af"&gt;WSTrustBinding&lt;/span&gt;
&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;public&lt;/span&gt; WSTrustBindingIssuedTokenMixed()&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;this&lt;/span&gt;.Elements.Add( &lt;span style="color: blue"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af"&gt;HttpsTransportBindingElement&lt;/span&gt;()
);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;
}&lt;/pre&gt;
&lt;p&gt;
&lt;strong&gt;WSTrustClient&lt;/strong&gt;
&lt;br&gt;
The last step is to make some modifications to &lt;em&gt;WSTrustClient&lt;/em&gt; to make it issued
token aware. In the constructor you have to check for the credential type, and if
it is an issued token, store it away.
&lt;/p&gt;
&lt;pre style="font-family: consolas"&gt;&lt;span style="color: blue"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af"&gt;RequestSecurityTokenResponse&lt;/span&gt; _rstr;&lt;br&gt;
&lt;/pre&gt;
&lt;pre style="font-family: consolas"&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt; WSTrustClient( &lt;span style="color: #2b91af"&gt;Binding&lt;/span&gt; binding, &lt;span style="color: #2b91af"&gt;EndpointAddress&lt;/span&gt; remoteAddress, 
&lt;br&gt;
&lt;span style="color: #2b91af"&gt;IRequestCredentials&lt;/span&gt; credentials )&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; : &lt;span style="color: blue"&gt;base&lt;/span&gt;( binding, remoteAddress
)&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;if&lt;/span&gt; ( &lt;span style="color: blue"&gt;null&lt;/span&gt; ==
credentials )&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;throw&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af"&gt;ArgumentNullException&lt;/span&gt;( &lt;span style="color: #a31515"&gt;"credentials"&lt;/span&gt; );&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;if&lt;/span&gt; (credentials &lt;span style="color: blue"&gt;is&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af"&gt;UsernameCredentials&lt;/span&gt;)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af"&gt;UsernameCredentials&lt;/span&gt; usernname
= credentials &lt;span style="color: blue"&gt;as&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af"&gt;UsernameCredentials&lt;/span&gt;;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;base&lt;/span&gt;.ChannelFactory.Credentials.UserName.UserName
= usernname.Username;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;base&lt;/span&gt;.ChannelFactory.Credentials.UserName.Password
= usernname.Password;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;else&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue"&gt;if&lt;/span&gt; (credentials &lt;span style="color: blue"&gt;is&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af"&gt;IssuedTokenCredentials&lt;/span&gt;)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;var&lt;/span&gt; issuedToken
= credentials &lt;span style="color: blue"&gt;as&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af"&gt;IssuedTokenCredentials&lt;/span&gt;;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _rstr = issuedToken.RSTR;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;else&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue"&gt;if&lt;/span&gt; (credentials &lt;span style="color: blue"&gt;is&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af"&gt;WindowsCredentials&lt;/span&gt;)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; { }&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;else&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;throw&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af"&gt;ArgumentOutOfRangeException&lt;/span&gt;(&lt;span style="color: #a31515"&gt;"credentials"&lt;/span&gt;, &lt;span style="color: #a31515"&gt;"type
was not expected"&lt;/span&gt;);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;
}&lt;/pre&gt;
&lt;p&gt;
Next – when &lt;em&gt;WSTrustClient&lt;/em&gt; constructs the RST message to the STS, the issued
token header must be embedded when needed:
&lt;/p&gt;
&lt;pre style="font-family: consolas"&gt;&lt;span style="color: blue"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af"&gt;Message&lt;/span&gt; BuildRequestAsMessage( &lt;span style="color: #2b91af"&gt;RequestSecurityToken&lt;/span&gt; request
)&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;var&lt;/span&gt; message = &lt;span style="color: #2b91af"&gt;Message&lt;/span&gt;.CreateMessage( 
&lt;br&gt;
&lt;span style="color: blue"&gt;base&lt;/span&gt;.Endpoint.Binding.MessageVersion ?? &lt;span style="color: #2b91af"&gt;MessageVersion&lt;/span&gt;.Default,&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IssueAction,&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (&lt;span style="color: #2b91af"&gt;BodyWriter&lt;/span&gt;) &lt;span style="color: blue"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af"&gt;WSTrustRequestBodyWriter&lt;/span&gt;(
request ) );&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;if&lt;/span&gt; (_rstr != &lt;span style="color: blue"&gt;null&lt;/span&gt;)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; message.Headers.Add(&lt;span style="color: blue"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af"&gt;IssuedTokenHeader&lt;/span&gt;(_rstr));&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;return&lt;/span&gt; message;&lt;br&gt;
}&lt;/pre&gt;
&lt;p&gt;
HTH
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=6053a2b2-df33-4a95-8858-887e24e2c4d5" /&gt;</description>
      <category>IdentityModel</category>
    </item>
    <item>
      <trackback:ping>http://www.leastprivilege.com/Trackback.aspx?guid=ac366b22-e9a9-45f1-82bf-2a049cc7024b</trackback:ping>
      <pingback:server>http://www.leastprivilege.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.leastprivilege.com/PermaLink.aspx?guid=ac366b22-e9a9-45f1-82bf-2a049cc7024b</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Earlier today I uploaded <a href="http://startersts.codeplex.com/releases/view/46943">StarterSTS
1.1</a> and <a href="http://startersts.codeplex.com/releases/view/46942">StarterRP
1.1</a> to codeplex.
</p>
        <p>
I added identity delegation for internal as well as OpenID accounts and also updated
StarterRP to show these features.
</p>
        <p>
I also recorded an updated <a href="http://identity.thinktecture.com/download/starterSTS/v1/StarterSTS_ActAs.wmv">screencast</a> on
delegation since some of the config settings have changed since the CTP.
</p>
        <img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=ac366b22-e9a9-45f1-82bf-2a049cc7024b" />
      </body>
      <title>StarterSTS 1.1</title>
      <guid isPermaLink="false">http://www.leastprivilege.com/PermaLink.aspx?guid=ac366b22-e9a9-45f1-82bf-2a049cc7024b</guid>
      <link>http://www.leastprivilege.com/StarterSTS11.aspx</link>
      <pubDate>Thu, 10 Jun 2010 08:07:49 GMT</pubDate>
      <description>&lt;p&gt;
Earlier today I uploaded &lt;a href="http://startersts.codeplex.com/releases/view/46943"&gt;StarterSTS
1.1&lt;/a&gt; and &lt;a href="http://startersts.codeplex.com/releases/view/46942"&gt;StarterRP
1.1&lt;/a&gt; to codeplex.
&lt;/p&gt;
&lt;p&gt;
I added identity delegation for internal as well as OpenID accounts and also updated
StarterRP to show these features.
&lt;/p&gt;
&lt;p&gt;
I also recorded an updated &lt;a href="http://identity.thinktecture.com/download/starterSTS/v1/StarterSTS_ActAs.wmv"&gt;screencast&lt;/a&gt; on
delegation since some of the config settings have changed since the CTP.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=ac366b22-e9a9-45f1-82bf-2a049cc7024b" /&gt;</description>
      <category>IdentityModel</category>
    </item>
    <item>
      <trackback:ping>http://www.leastprivilege.com/Trackback.aspx?guid=758d7fc1-a196-4a0a-8e07-c0c8cb63f3c1</trackback:ping>
      <pingback:server>http://www.leastprivilege.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.leastprivilege.com/PermaLink.aspx?guid=758d7fc1-a196-4a0a-8e07-c0c8cb63f3c1</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a title="http://www.mefeedia.com/watch/26711228" href="http://www.mefeedia.com/watch/26711228">http://www.mefeedia.com/watch/26711228</a>
        </p>
        <img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=758d7fc1-a196-4a0a-8e07-c0c8cb63f3c1" />
      </body>
      <title>Video of Moxie Marlinspike&amp;rsquo;s &amp;ldquo;More Tricks for Defeating SSL&amp;rdquo; talk</title>
      <guid isPermaLink="false">http://www.leastprivilege.com/PermaLink.aspx?guid=758d7fc1-a196-4a0a-8e07-c0c8cb63f3c1</guid>
      <link>http://www.leastprivilege.com/VideoOfMoxieMarlinspikersquosLdquoMoreTricksForDefeatingSSLrdquoTalk.aspx</link>
      <pubDate>Thu, 27 May 2010 10:59:05 GMT</pubDate>
      <description>&lt;p&gt;
&lt;a title="http://www.mefeedia.com/watch/26711228" href="http://www.mefeedia.com/watch/26711228"&gt;http://www.mefeedia.com/watch/26711228&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=758d7fc1-a196-4a0a-8e07-c0c8cb63f3c1" /&gt;</description>
      <category>Misc</category>
    </item>
    <item>
      <trackback:ping>http://www.leastprivilege.com/Trackback.aspx?guid=9ea5fe43-9dee-4cc0-a068-d8592e61ebec</trackback:ping>
      <pingback:server>http://www.leastprivilege.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.leastprivilege.com/PermaLink.aspx?guid=9ea5fe43-9dee-4cc0-a068-d8592e61ebec</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I recorded a short screencast describing the identity delegation feature in <a href="http://startersts.codeplex.com/releases/view/45813">StarterSTS
1.1</a>. You can watch it <a href="http://identity.thinktecture.com/download/starterSTS/v1/StarterSTS_ActAs.wmv">here</a>.
</p>
        <p>
I also uploaded an updated version of the documentation <a href="https://identity.thinktecture.com/stsce/docs/">here</a>.
</p>
        <img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=9ea5fe43-9dee-4cc0-a068-d8592e61ebec" />
      </body>
      <title>Updated StarterSTS Documentation &amp;amp; Identity Delegation Screencast</title>
      <guid isPermaLink="false">http://www.leastprivilege.com/PermaLink.aspx?guid=9ea5fe43-9dee-4cc0-a068-d8592e61ebec</guid>
      <link>http://www.leastprivilege.com/UpdatedStarterSTSDocumentationAmpIdentityDelegationScreencast.aspx</link>
      <pubDate>Wed, 26 May 2010 07:42:59 GMT</pubDate>
      <description>&lt;p&gt;
I recorded a short screencast describing the identity delegation feature in &lt;a href="http://startersts.codeplex.com/releases/view/45813"&gt;StarterSTS
1.1&lt;/a&gt;. You can watch it &lt;a href="http://identity.thinktecture.com/download/starterSTS/v1/StarterSTS_ActAs.wmv"&gt;here&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
I also uploaded an updated version of the documentation &lt;a href="https://identity.thinktecture.com/stsce/docs/"&gt;here&lt;/a&gt;.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=9ea5fe43-9dee-4cc0-a068-d8592e61ebec" /&gt;</description>
      <category>IdentityModel</category>
    </item>
    <item>
      <trackback:ping>http://www.leastprivilege.com/Trackback.aspx?guid=a055388d-328c-4067-aa67-0df5e1b4fb12</trackback:ping>
      <pingback:server>http://www.leastprivilege.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.leastprivilege.com/PermaLink.aspx?guid=a055388d-328c-4067-aa67-0df5e1b4fb12</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <title>StarterSTS 1.1 CTP &amp;ndash; ActAs Support</title>
      <guid isPermaLink="false">http://www.leastprivilege.com/PermaLink.aspx?guid=a055388d-328c-4067-aa67-0df5e1b4fb12</guid>
      <link>http://www.leastprivilege.com/StarterSTS11CTPNdashActAsSupport.aspx</link>
      <pubDate>Mon, 24 May 2010 12:05:19 GMT</pubDate>
      <description>&lt;p&gt;
Due to popular demand, I added identity delegation (aka ActAs) support to StarterSTS.
&lt;/p&gt;
&lt;p&gt;
To give this feature a try, first &lt;a href="http://startersts.codeplex.com/releases/view/45813"&gt;download&lt;/a&gt; the
new bits and add a &lt;em&gt;enableActAs = true&lt;/em&gt; to &lt;em&gt;startersts.config&lt;/em&gt;. You
then have to configure which user account is allowed to delegate, as well as the target
realm to delegate to. This is done in &lt;em&gt;usermappings.config&lt;/em&gt;, e.g.:
&lt;/p&gt;
&lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;
&lt;span style="font-family: consolas; color: blue; mso-no-proof: yes"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: consolas; color: #a31515; mso-no-proof: yes"&gt;userMappings&lt;/span&gt;&lt;span style="font-family: consolas; color: blue; mso-no-proof: yes"&gt; &lt;/span&gt;&lt;span style="font-family: consolas; color: red; mso-no-proof: yes"&gt;xmlns&lt;/span&gt;&lt;span style="font-family: consolas; color: blue; mso-no-proof: yes"&gt;=&lt;/span&gt;&lt;span style="font-family: consolas; mso-no-proof: yes"&gt;"&lt;span style="color: blue"&gt;http://www.thinktecture.com/configuration/usermappings&lt;/span&gt;"&lt;span style="color: blue"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; color: blue; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: consolas; color: #a31515; mso-no-proof: yes"&gt;user&lt;/span&gt;&lt;span style="font-family: consolas; color: blue; mso-no-proof: yes"&gt; &lt;/span&gt;&lt;span style="font-family: consolas; color: red; mso-no-proof: yes"&gt;name&lt;/span&gt;&lt;span style="font-family: consolas; color: blue; mso-no-proof: yes"&gt;=&lt;/span&gt;&lt;span style="font-family: consolas; mso-no-proof: yes"&gt;"&lt;span style="color: blue"&gt;middletier&lt;/span&gt;"&lt;span style="color: blue"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; color: blue; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: consolas; color: #a31515; mso-no-proof: yes"&gt;mappings&lt;/span&gt;&lt;span style="font-family: consolas; color: blue; mso-no-proof: yes"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; color: blue; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: consolas; color: #a31515; mso-no-proof: yes"&gt;mapping&lt;/span&gt;&lt;span style="font-family: consolas; color: blue; mso-no-proof: yes"&gt; &lt;/span&gt;&lt;span style="font-family: consolas; color: red; mso-no-proof: yes"&gt;type&lt;/span&gt;&lt;span style="font-family: consolas; color: blue; mso-no-proof: yes"&gt;=&lt;/span&gt;&lt;span style="font-family: consolas; mso-no-proof: yes"&gt;"&lt;span style="color: blue"&gt;ActAs&lt;/span&gt;"&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; color: blue; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&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; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; color: red; mso-no-proof: yes"&gt;value&lt;/span&gt;&lt;span style="font-family: consolas; color: blue; mso-no-proof: yes"&gt;=&lt;/span&gt;&lt;span style="font-family: consolas; mso-no-proof: yes"&gt;"&lt;span style="color: blue"&gt;https://server/service.svc&lt;/span&gt;" &lt;span style="color: blue"&gt;/&amp;gt;&lt;br&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; color: blue; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-family: consolas; color: #a31515; mso-no-proof: yes"&gt;mappings&lt;/span&gt;&lt;span style="font-family: consolas; color: blue; mso-no-proof: yes"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; color: blue; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-family: consolas; color: #a31515; mso-no-proof: yes"&gt;user&lt;/span&gt;&lt;span style="font-family: consolas; color: blue; mso-no-proof: yes"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; color: blue; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-family: consolas; color: #a31515; mso-no-proof: yes"&gt;users&lt;/span&gt;&lt;span style="font-family: consolas; color: blue; mso-no-proof: yes"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; color: blue; mso-no-proof: yes"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-family: consolas; color: #a31515; mso-no-proof: yes"&gt;userMappings&lt;/span&gt;&lt;span style="font-family: consolas; color: blue; mso-no-proof: yes"&gt;&lt;?xml:namespace prefix = o /&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
Please use the &lt;a href="http://startersts.codeplex.com/Thread/List.aspx"&gt;forum&lt;/a&gt; for
any feedback. thanks!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=a055388d-328c-4067-aa67-0df5e1b4fb12" /&gt;</description>
      <category>IdentityModel</category>
    </item>
    <item>
      <trackback:ping>http://www.leastprivilege.com/Trackback.aspx?guid=93f268e4-a48f-42e1-afd3-9034b3426968</trackback:ping>
      <pingback:server>http://www.leastprivilege.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.leastprivilege.com/PermaLink.aspx?guid=93f268e4-a48f-42e1-afd3-9034b3426968</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <title>A more elegant way of embedding a SOAP security header in Silverlight 4</title>
      <guid isPermaLink="false">http://www.leastprivilege.com/PermaLink.aspx?guid=93f268e4-a48f-42e1-afd3-9034b3426968</guid>
      <link>http://www.leastprivilege.com/AMoreElegantWayOfEmbeddingASOAPSecurityHeaderInSilverlight4.aspx</link>
      <pubDate>Fri, 14 May 2010 05:01:54 GMT</pubDate>
      <description>&lt;p&gt;
The current situation with Silverlight is, that there is no support for the WCF federation
binding. This means that all security token related interactions have to be done manually.
&lt;/p&gt;
&lt;p&gt;
Requesting the token from an STS is not really the bad part, sending it along with
outgoing SOAP messages is what’s a little annoying. So far you had to wrap all calls
on the channel in an &lt;em&gt;OperationContextScope&lt;/em&gt; wrapping an &lt;em&gt;IContextChannel&lt;/em&gt;.
This “programming model” was a little disruptive (in addition to all the async stuff
that you are forced to do).
&lt;/p&gt;
&lt;p&gt;
It seems that starting with SL4 there is more support for traditional WCF extensibility
points – especially &lt;em&gt;IEndpointBehavior&lt;/em&gt;, &lt;em&gt;IClientMessageInspector&lt;/em&gt;.
I never read somewhere that these are new features in SL4 – but I am pretty sure they
did not exist in SL3.
&lt;/p&gt;
&lt;p&gt;
With the above mentioned interfaces at my disposal, I thought I have another go at
embedding a security header – and yeah – I managed to make the code much prettier
(and much less bizarre). Here’s the code for the behavior/inspector:
&lt;/p&gt;
&lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;
&lt;span style="font-family: consolas; color: blue"&gt;public&lt;/span&gt;&lt;span style="font-family: consolas"&gt; &lt;span style="color: blue"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af"&gt;IssuedTokenHeaderInspector&lt;/span&gt; : &lt;span style="color: #2b91af"&gt;IClientMessageInspector&lt;br&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas"&gt;{&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #2b91af"&gt;RequestSecurityTokenResponse&lt;/span&gt; _rstr;&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas"&gt;&lt;?xml:namespace prefix = o /&gt;
&lt;o:p&gt;&amp;nbsp;&lt;br&gt;
&lt;/o:p&gt;
&lt;/span&gt;&lt;span style="font-family: consolas"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt; IssuedTokenHeaderInspector(&lt;span style="color: #2b91af"&gt;RequestSecurityTokenResponse&lt;/span&gt; rstr)&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;_rstr
= rstr;&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;br&gt;
&lt;/o:p&gt;
&lt;/span&gt;&lt;span style="font-family: consolas"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; AfterReceiveReply(&lt;span style="color: blue"&gt;ref&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Message&lt;/span&gt; reply, &lt;span style="color: blue"&gt;object&lt;/span&gt; correlationState)&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{
}&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;br&gt;
&lt;/o:p&gt;
&lt;/span&gt;&lt;span style="font-family: consolas"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;object&lt;/span&gt; BeforeSendRequest(&lt;span style="color: blue"&gt;ref&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Message&lt;/span&gt; request, &lt;span style="color: #2b91af"&gt;IClientChannel&lt;/span&gt; channel)&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;request.Headers.Add(&lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;IssuedTokenHeader&lt;/span&gt;(_rstr));&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&lt;br&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;return&lt;/span&gt; &lt;span style="color: blue"&gt;null&lt;/span&gt;;&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas"&gt;}&lt;br&gt;
&lt;/span&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;
&lt;span style="font-family: consolas; color: blue"&gt;public&lt;/span&gt;&lt;span style="font-family: consolas"&gt; &lt;span style="color: blue"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af"&gt;IssuedTokenHeaderBehavior&lt;/span&gt; : &lt;span style="color: #2b91af"&gt;IEndpointBehavior&lt;br&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas"&gt;{&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #2b91af"&gt;RequestSecurityTokenResponse&lt;/span&gt; _rstr;&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;br&gt;
&lt;/o:p&gt;
&lt;/span&gt;&lt;span style="font-family: consolas"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt; IssuedTokenHeaderBehavior(&lt;span style="color: #2b91af"&gt;RequestSecurityTokenResponse&lt;/span&gt; rstr)&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;if&lt;/span&gt; (rstr
== &lt;span style="color: blue"&gt;null&lt;/span&gt;)&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;throw&lt;/span&gt; &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;ArgumentNullException&lt;/span&gt;();&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;br&gt;
&lt;/o:p&gt;
&lt;/span&gt;&lt;span style="font-family: consolas"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;_rstr
= rstr;&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;br&gt;
&lt;/o:p&gt;
&lt;/span&gt;&lt;span style="font-family: consolas"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; ApplyClientBehavior(&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af"&gt;ServiceEndpoint&lt;/span&gt; endpoint, &lt;span style="color: #2b91af"&gt;ClientRuntime&lt;/span&gt; clientRuntime)&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;clientRuntime.MessageInspectors.Add(&lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;IssuedTokenHeaderInspector&lt;/span&gt;(_rstr));&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;br&gt;
&lt;/o:p&gt;
&lt;/span&gt;&lt;span style="font-family: consolas"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green"&gt;//
rest omitted&lt;br&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas"&gt;}&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
&lt;o:p&gt;This allows to set up a proxy with an issued token header and you don’t have to worry anymore with embedding the header manually with every call:&lt;/o:p&gt;
&lt;/p&gt;
&lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;
&lt;span style="font-family: consolas; color: blue"&gt;var&lt;/span&gt;&lt;span style="font-family: consolas"&gt; client
= GetWSTrustClient();&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;br&gt;
&lt;/o:p&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; color: blue"&gt;var&lt;/span&gt;&lt;span style="font-family: consolas"&gt; rst
= &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;RequestSecurityToken&lt;/span&gt;(&lt;span style="color: #2b91af"&gt;WSTrust13Constants&lt;/span&gt;.&lt;span style="color: #2b91af"&gt;KeyTypes&lt;/span&gt;.Symmetric)&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas"&gt;{&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;AppliesTo
= &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;EndpointAddress&lt;/span&gt;(&lt;span style="color: #a31515"&gt;"https://rp/"&lt;/span&gt;)&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas"&gt;};&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;br&gt;
&lt;/o:p&gt;
&lt;/span&gt;&lt;span style="font-family: consolas"&gt;client.IssueCompleted += (s, args) =&amp;gt;&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas"&gt;{&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;_proxy
= &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;StarterServiceContractClient&lt;/span&gt;();&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;_proxy.Endpoint.Behaviors.Add(&lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;IssuedTokenHeaderBehavior&lt;/span&gt;(args.Result));&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;br&gt;
&lt;/o:p&gt;
&lt;/span&gt;&lt;span style="font-family: consolas"&gt;};&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;br&gt;
&lt;/o:p&gt;
&lt;/span&gt;&lt;span style="font-family: consolas"&gt;client.IssueAsync(rst);&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
&lt;o:p&gt;Since SL4 also support the &lt;em&gt;IExtension&amp;lt;T&amp;gt;&lt;/em&gt; interface, you can also
combine this with Nicholas Allen’s &lt;a href="http://blogs.msdn.com/drnick/archive/2008/08/22/autoheader-extension.aspx"&gt;AutoHeaderExtension&lt;/a&gt;.&lt;/o:p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=93f268e4-a48f-42e1-afd3-9034b3426968" /&gt;</description>
      <category>IdentityModel</category>
    </item>
    <item>
      <trackback:ping>http://www.leastprivilege.com/Trackback.aspx?guid=d1dbd1e7-8a2e-464e-8162-dedd7564b3a6</trackback:ping>
      <pingback:server>http://www.leastprivilege.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.leastprivilege.com/PermaLink.aspx?guid=d1dbd1e7-8a2e-464e-8162-dedd7564b3a6</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <title>Thinktecture.IdentityModel: WRAP and SWT Support</title>
      <guid isPermaLink="false">http://www.leastprivilege.com/PermaLink.aspx?guid=d1dbd1e7-8a2e-464e-8162-dedd7564b3a6</guid>
      <link>http://www.leastprivilege.com/ThinktectureIdentityModelWRAPAndSWTSupport.aspx</link>
      <pubDate>Sun, 09 May 2010 20:27:46 GMT</pubDate>
      <description>&lt;p&gt;
The latest drop of &lt;a href="http://identitymodel.codeplex.com/"&gt;Thinktecture.IdentityModel&lt;/a&gt; contains
some helpers for the Web Resource Authorization Protocol (WRAP) and Simple Web Tokens
(SWT).
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;WRAP&lt;br&gt;
&lt;/strong&gt;The &lt;em&gt;WrapClient&lt;/em&gt; class is a helper to request SWT tokens via WRAP.
It supports issuer/key, SWT and SAML input credentials, e.g.:
&lt;/p&gt;
&lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;
&lt;span style="font-family: consolas; color: blue; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;var&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt; client
= &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;WrapClient&lt;/span&gt;(wrapEp);&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; color: blue; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;var&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt; swt
= client.Issue(issuerName, issuerKey, scope);&lt;/span&gt;&lt;span style="mso-ansi-language: en-us" lang="EN-US"&gt;&lt;?xml:namespace prefix = o /&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
All &lt;em&gt;Issue&lt;/em&gt; overrides return a &lt;em&gt;SimpleWebToken&lt;/em&gt; type, which brings me
to the next helper class.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;SWT&lt;br&gt;
&lt;/strong&gt;The &lt;em&gt;SimpleWebToken&lt;/em&gt; class wraps a SWT token. It combines a number
of features:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
conversion between string format and CLR type representation&lt;/li&gt;
&lt;li&gt;
creation of SWT tokens&lt;/li&gt;
&lt;li&gt;
validation of SWT token&lt;/li&gt;
&lt;li&gt;
projection of SWT token as &lt;em&gt;IClaimsIdentity&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
helpers to embed SWT token in headers and query strings&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
The following sample code generates a SWT token using the helper class:
&lt;/p&gt;
&lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;
&lt;span style="font-family: consolas; color: blue; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;private&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt; &lt;span style="color: blue"&gt;static&lt;/span&gt; &lt;span style="color: blue"&gt;string&lt;/span&gt; CreateSwtToken()&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;{&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;var&lt;/span&gt; signingKey
= &lt;span style="color: #a31515"&gt;"wA…"&lt;/span&gt;;&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;var&lt;/span&gt; audience
= &lt;span style="color: #a31515"&gt;"http://websample"&lt;/span&gt;;&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;var&lt;/span&gt; issuer
= &lt;span style="color: #a31515"&gt;"http://self"&lt;/span&gt;;&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;br&gt;
&lt;/o:p&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;var&lt;/span&gt; token
= &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;SimpleWebToken&lt;/span&gt;(&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; issuer, audience, &lt;span style="color: #2b91af"&gt;Convert&lt;/span&gt;.FromBase64String(signingKey));&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;token.AddClaim(&lt;span style="color: #2b91af"&gt;ClaimTypes&lt;/span&gt;.Name, &lt;span style="color: #a31515"&gt;"dominick"&lt;/span&gt;);&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;token.AddClaim(&lt;span style="color: #2b91af"&gt;ClaimTypes&lt;/span&gt;.Role, &lt;span style="color: #a31515"&gt;"Users"&lt;/span&gt;);&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;token.AddClaim(&lt;span style="color: #2b91af"&gt;ClaimTypes&lt;/span&gt;.Role, &lt;span style="color: #a31515"&gt;"Administrators"&lt;/span&gt;);&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;token.AddClaim(&lt;span style="color: #a31515"&gt;"simple"&lt;/span&gt;, &lt;span style="color: #a31515"&gt;"test"&lt;/span&gt;);&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;br&gt;
&lt;/o:p&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;return&lt;/span&gt; token.ToString();&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-no-proof: yes"&gt;}&lt;/span&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=d1dbd1e7-8a2e-464e-8162-dedd7564b3a6" /&gt;</description>
      <category>IdentityModel</category>
    </item>
    <item>
      <trackback:ping>http://www.leastprivilege.com/Trackback.aspx?guid=a40f14bd-72a6-45cb-9073-d7514d8a5e32</trackback:ping>
      <pingback:server>http://www.leastprivilege.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.leastprivilege.com/PermaLink.aspx?guid=a40f14bd-72a6-45cb-9073-d7514d8a5e32</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <title>Thinktecture.IdentityModel: Comparing Strings without leaking Timinig Information</title>
      <guid isPermaLink="false">http://www.leastprivilege.com/PermaLink.aspx?guid=a40f14bd-72a6-45cb-9073-d7514d8a5e32</guid>
      <link>http://www.leastprivilege.com/ThinktectureIdentityModelComparingStringsWithoutLeakingTiminigInformation.aspx</link>
      <pubDate>Sat, 08 May 2010 19:51:07 GMT</pubDate>
      <description>&lt;p&gt;
&lt;a href="https://www.isecpartners.com/"&gt;Paul Hill&lt;/a&gt; commented on a recent post where
I was comparing HMACSHA256 signatures. In a nutshell his complaint was that I am leaking
timing information while doing so – or in other words, my code returned faster with
wrong (or partially wrong) signatures than with the correct signature. This can be
potentially used for timing attacks like &lt;a href="http://rdist.root.org/2009/05/28/timing-attack-in-google-keyczar-library/"&gt;this&lt;/a&gt; &lt;a href="http://crypto.stanford.edu/~dabo/papers/ssl-timing.pdf"&gt;one&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
I think he got a point here, especially in the era of cloud computing where you can
potentially run attack code on the same physical machine as your target to do high
resolution timing analysis (see &lt;a href="http://cseweb.ucsd.edu/~hovav/dist/cloudsec.pdf"&gt;here&lt;/a&gt; for
an example).
&lt;/p&gt;
&lt;p&gt;
It turns out that it is not that easy to write a time-constant string comparer due
to all sort of (unexpected) clever optimization mechanisms in the CLR. With the help
and feedback of Paul and Shawn I came up with this:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Structure the code in a way that the CLR will not try to optimize it 
&lt;li&gt;
In addition turn off optimization (just in case a future version will come up with
new optimization methods) 
&lt;li&gt;
Add a random sleep when the comparison fails (using Shawn’s and Stephen’s nice &lt;em&gt;Random&lt;/em&gt; wrapper
for &lt;em&gt;RNGCryptoServiceProvider&lt;/em&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
You can find the full code in the &lt;a href="http://identitymodel.codeplex.com/"&gt;Thinktecture.IdentityModel&lt;/a&gt; download.
&lt;/p&gt;
&lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;
&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;[&lt;span style="color: #2b91af"&gt;MethodImpl&lt;/span&gt;(&lt;span style="color: #2b91af"&gt;MethodImplOptions&lt;/span&gt;.NoOptimization)]&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; color: blue; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;public&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt; &lt;span style="color: blue"&gt;static&lt;/span&gt; &lt;span style="color: blue"&gt;bool&lt;/span&gt; IsEqual(&lt;span style="color: blue"&gt;string&lt;/span&gt; s1, &lt;span style="color: blue"&gt;string&lt;/span&gt; s2)&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;{&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;if&lt;/span&gt; (s1
== &lt;span style="color: blue"&gt;null&lt;/span&gt; &amp;amp;&amp;amp; s2 == &lt;span style="color: blue"&gt;null&lt;/span&gt;)&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;return&lt;/span&gt; &lt;span style="color: blue"&gt;true&lt;/span&gt;;&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;?xml:namespace prefix = o /&gt;
&lt;o:p&gt;&amp;nbsp;&lt;br&gt;
&lt;/o:p&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;if&lt;/span&gt; (s1
== &lt;span style="color: blue"&gt;null&lt;/span&gt; || s2 == &lt;span style="color: blue"&gt;null&lt;/span&gt;)&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;return&lt;/span&gt; &lt;span style="color: blue"&gt;false&lt;/span&gt;;&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;br&gt;
&lt;/o:p&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;if&lt;/span&gt; (s1.Length
!= s2.Length)&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;return&lt;/span&gt; &lt;span style="color: blue"&gt;false&lt;/span&gt;;&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;br&gt;
&lt;/o:p&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;var&lt;/span&gt; s1chars
= s1.ToCharArray();&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;var&lt;/span&gt; s2chars
= s2.ToCharArray();&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;br&gt;
&lt;/o:p&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;int&lt;/span&gt; hits
= 0;&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;for&lt;/span&gt; (&lt;span style="color: blue"&gt;int&lt;/span&gt; i
= 0; i &amp;lt; s1.Length; i++)&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;if&lt;/span&gt; (s1chars[i].Equals(s2chars[i]))&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;hits
+= 2;&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;else&lt;br&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;hits
+= 1;&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;br&gt;
&lt;/o:p&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;bool&lt;/span&gt; same
= (hits == s1.Length * 2);&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;br&gt;
&lt;/o:p&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;if&lt;/span&gt; (!same)&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;var&lt;/span&gt; rnd
= &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;CryptoRandom&lt;/span&gt;();&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Thread&lt;/span&gt;.Sleep(rnd.Next(0,
10));&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;br&gt;
&lt;/o:p&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;return&lt;/span&gt; same;&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-no-proof: yes"&gt;}&lt;/span&gt;
&lt;/p&gt;
&lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;
&lt;span style="font-family: consolas; mso-no-proof: yes"&gt;&lt;/span&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=a40f14bd-72a6-45cb-9073-d7514d8a5e32" /&gt;</description>
      <category>IdentityModel</category>
    </item>
    <item>
      <trackback:ping>http://www.leastprivilege.com/Trackback.aspx?guid=cde066d1-abdf-4e26-b37d-13a2a38c8899</trackback:ping>
      <pingback:server>http://www.leastprivilege.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.leastprivilege.com/PermaLink.aspx?guid=cde066d1-abdf-4e26-b37d-13a2a38c8899</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Finally – the identity story is complete (for now).
</p>
        <p>
          <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=118c3588-9070-426a-b655-6cec0a92c10b&amp;displaylang=en">Download</a> ADFS
2.0.
</p>
        <img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=cde066d1-abdf-4e26-b37d-13a2a38c8899" />
      </body>
      <title>ADFS 2.0 RTW</title>
      <guid isPermaLink="false">http://www.leastprivilege.com/PermaLink.aspx?guid=cde066d1-abdf-4e26-b37d-13a2a38c8899</guid>
      <link>http://www.leastprivilege.com/ADFS20RTW.aspx</link>
      <pubDate>Wed, 05 May 2010 17:40:56 GMT</pubDate>
      <description>&lt;p&gt;
Finally – the identity story is complete (for now).
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=118c3588-9070-426a-b655-6cec0a92c10b&amp;amp;displaylang=en"&gt;Download&lt;/a&gt; ADFS
2.0.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=cde066d1-abdf-4e26-b37d-13a2a38c8899" /&gt;</description>
      <category>Misc</category>
    </item>
    <item>
      <trackback:ping>http://www.leastprivilege.com/Trackback.aspx?guid=a2fb6370-2c92-49a1-818b-d3dc4fb69953</trackback:ping>
      <pingback:server>http://www.leastprivilege.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.leastprivilege.com/PermaLink.aspx?guid=a2fb6370-2c92-49a1-818b-d3dc4fb69953</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <title>Thinktecture.IdentityModel: WIF Support for WCF REST Services and OData</title>
      <guid isPermaLink="false">http://www.leastprivilege.com/PermaLink.aspx?guid=a2fb6370-2c92-49a1-818b-d3dc4fb69953</guid>
      <link>http://www.leastprivilege.com/ThinktectureIdentityModelWIFSupportForWCFRESTServicesAndOData.aspx</link>
      <pubDate>Wed, 05 May 2010 14:54:51 GMT</pubDate>
      <description>&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
The latest drop of &lt;a href="http://identitymodel.codeplex.com/"&gt;Thinktecture.IdentityModel&lt;/a&gt; includes
plumbing and support for WIF, claims and tokens for WCF REST services and Data Services
(aka OData).
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://weblogs.asp.net/cibrax/"&gt;Cibrax&lt;/a&gt; has an alternative &lt;a href="http://weblogs.asp.net/cibrax/archive/2010/04/15/integrating-wif-with-wcf-data-services.aspx"&gt;implementation&lt;/a&gt; that
uses the WCF Rest Starter Kit. His recent post reminded me that I should finally “document”
that part of our library.
&lt;/p&gt;
&lt;p&gt;
Features include:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
generic plumbing for all &lt;em&gt;WebServiceHost&lt;/em&gt; derived WCF services 
&lt;li&gt;
support for SAML and SWT tokens 
&lt;li&gt;
support for &lt;em&gt;ClaimsAuthenticationManager&lt;/em&gt; and &lt;em&gt;ClaimsAuthorizationManager&lt;/em&gt; 
&lt;li&gt;
based solely on native WCF extensibility points (and WIF)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
This post walks you through the setup of an OData / WCF DataServices endpoint with
token authentication and claims support. This sample is also included in the codeplex
download along a similar sample for plain WCF REST services.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Setting up the Data Service&lt;br&gt;
&lt;/strong&gt;To prove the point I have created a simple WCF Data Service that renders
the claims of the current client as an OData set.
&lt;/p&gt;
&lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;
&lt;span style="font-family: consolas; color: blue; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;public&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt; &lt;span style="color: blue"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af"&gt;ClaimsData&lt;br&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;{&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: #2b91af"&gt;IQueryable&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;ViewClaim&lt;/span&gt;&amp;gt;
Claims&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;get&lt;/span&gt; { &lt;span style="color: blue"&gt;return&lt;/span&gt; GetClaims().AsQueryable();
}&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;?xml:namespace prefix = o /&gt;
&lt;o:p&gt;&amp;nbsp;&lt;br&gt;
&lt;/o:p&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;private&lt;/span&gt; &lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;ViewClaim&lt;/span&gt;&amp;gt;
GetClaims()&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;var&lt;/span&gt; claims
= &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;ViewClaim&lt;/span&gt;&amp;gt;();&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;var&lt;/span&gt; identity
= &lt;span style="color: #2b91af"&gt;Thread&lt;/span&gt;.CurrentPrincipal.Identity &lt;span style="color: blue"&gt;as&lt;/span&gt; &lt;span style="color: #2b91af"&gt;IClaimsIdentity&lt;/span&gt;;&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;br&gt;
&lt;/o:p&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;int&lt;/span&gt; id
= 0;&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;identity.Claims.ToList().ForEach(claim
=&amp;gt;&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&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; &lt;/span&gt;claims.Add(&lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;ViewClaim&lt;br&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&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; &lt;/span&gt;{&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&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; &lt;/span&gt;Id
= ++id,&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&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; &lt;/span&gt;ClaimType
= claim.ClaimType,&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&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; &lt;/span&gt;Value
= claim.Value,&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&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; &lt;/span&gt;Issuer
= claim.Issuer&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&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; &lt;/span&gt;});&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;});&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;br&gt;
&lt;/o:p&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;return&lt;/span&gt; claims;&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-no-proof: yes"&gt;}&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-no-proof: yes"&gt;}&lt;/span&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p&gt;
…and hooked that up with a read only data service:
&lt;/p&gt;
&lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;
&lt;span style="font-family: consolas; color: blue; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;public&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt; &lt;span style="color: blue"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af"&gt;ClaimsDataService&lt;/span&gt; : &lt;span style="color: #2b91af"&gt;DataService&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;ClaimsData&lt;/span&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;{&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;static&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; InitializeService(&lt;span style="color: #2b91af"&gt;IDataServiceConfiguration&lt;/span&gt; config)&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-no-proof: yes"&gt;{&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;config.SetEntitySetAccessRule(&lt;span style="color: #a31515"&gt;"*"&lt;/span&gt;, &lt;span style="color: #2b91af"&gt;EntitySetRights&lt;/span&gt;.AllRead);&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-no-proof: yes"&gt;}&lt;/span&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Enabling WIF&lt;br&gt;
&lt;/strong&gt;Before you enable WIF, you should generate your client proxies. Afterwards
the service will only accept requests with an access token – and svcutil does not
support that.
&lt;/p&gt;
&lt;p&gt;
All the WIF magic is done in a special service authorization manager called the &lt;em&gt;FederatedWebServiceAuthorizationManager&lt;/em&gt;.
This code checks incoming calls to see if the Authorization HTTP header (or X-Authorization
for environments where you are not allowed to set the authorization header) contains
a token. This header must either start with &lt;em&gt;SAML access_token=&lt;/em&gt; or &lt;em&gt;WRAP
access_token= &lt;/em&gt;(for SAML or SWT tokens respectively).
&lt;/p&gt;
&lt;p&gt;
For SAML validation, the plumbing uses the normal WIF configuration. For SWT you can
either pass in a &lt;em&gt;SimpleWebTokenRequirement&lt;/em&gt; or the &lt;em&gt;SwtIssuer&lt;/em&gt;, &lt;em&gt;SwtAudience &lt;/em&gt;and &lt;em&gt;SwtSigningKey &lt;/em&gt;app
settings are checked.If the token can be successfully validated, &lt;em&gt;ClaimsAuthenticationManager&lt;/em&gt; and &lt;em&gt;ClaimsAuthorizationManager&lt;/em&gt; are
invoked and the &lt;em&gt;IClaimsPrincipal&lt;/em&gt; gets established.
&lt;/p&gt;
&lt;p&gt;
The service authorization manager gets wired up by the &lt;em&gt;FederatedWebServiceHostFactory&lt;/em&gt;:
&lt;/p&gt;
&lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;
&lt;span style="font-family: consolas; color: blue; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;public&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt; &lt;span style="color: blue"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af"&gt;FederatedWebServiceHostFactory&lt;/span&gt; : &lt;span style="color: #2b91af"&gt;WebServiceHostFactory&lt;br&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;{&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;protected&lt;/span&gt; &lt;span style="color: blue"&gt;override&lt;/span&gt; &lt;span style="color: #2b91af"&gt;ServiceHost&lt;/span&gt; CreateServiceHost(&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af"&gt;Type&lt;/span&gt; serviceType, &lt;span style="color: #2b91af"&gt;Uri&lt;/span&gt;[]
baseAddresses)&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;var&lt;/span&gt; host
= &lt;span style="color: blue"&gt;base&lt;/span&gt;.CreateServiceHost(serviceType, baseAddresses);&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;br&gt;
&lt;/o:p&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;host.Authorization.ServiceAuthorizationManager
= 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;FederatedWebServiceAuthorizationManager&lt;/span&gt;();&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;host.Authorization.PrincipalPermissionMode
= &lt;span style="color: #2b91af"&gt;PrincipalPermissionMode&lt;/span&gt;.Custom;&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;br&gt;
&lt;/o:p&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; color: blue; mso-no-proof: yes"&gt;return&lt;/span&gt;&lt;span style="font-family: consolas; mso-no-proof: yes"&gt; host;&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-no-proof: yes"&gt;}&lt;/span&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p&gt;
The last step is to set up the .svc file to use the service host factory (see the
sample download).
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Calling the Service&lt;br&gt;
&lt;/strong&gt;To call the service you need to somehow get a token. This is up to you. You
can either use &lt;em&gt;WSTrustChannelFactory&lt;/em&gt; (for the full CLR), &lt;em&gt;WSTrustClient &lt;/em&gt;(Silverlight)
or some other way to obtain a token. The sample also includes code to generate SWT
tokens for testing – but the whole WRAP/SWT support will be subject of a separate
post.
&lt;/p&gt;
&lt;p&gt;
I created some extensions methods for the most common web clients (&lt;em&gt;WebClient&lt;/em&gt;, &lt;em&gt;HttpWebRequest&lt;/em&gt;, &lt;em&gt;DataServiceContext&lt;/em&gt;)
that allow easy setting of the token, e.g.:
&lt;/p&gt;
&lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;
&lt;span style="font-family: consolas; color: blue; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;public&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt; &lt;span style="color: blue"&gt;static&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; SetAccessToken(&lt;span style="color: blue"&gt;this&lt;/span&gt; &lt;span style="color: #2b91af"&gt;DataServiceContext&lt;/span&gt; context, 
&lt;br&gt;
&amp;nbsp; &lt;span style="color: blue"&gt;string&lt;/span&gt; token, &lt;span style="color: blue"&gt;string&lt;/span&gt; type, &lt;span style="color: blue"&gt;string&lt;/span&gt; headerName)&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;{&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;context.SendingRequest
+= (s, e) =&amp;gt;&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;e.RequestHeaders[headerName]
= GetHeader(token, type);&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-no-proof: yes"&gt;};&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-no-proof: yes"&gt;}&lt;/span&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p&gt;
Making a query against the Data Service could look like this:
&lt;/p&gt;
&lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;
&lt;span style="font-family: consolas; color: blue; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;static&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; CallService(&lt;span style="color: blue"&gt;string&lt;/span&gt; token, &lt;span style="color: blue"&gt;string&lt;/span&gt; type)&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;{&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;var&lt;/span&gt; data
= &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;ClaimsData&lt;/span&gt;(&lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Uri&lt;/span&gt;(&lt;span style="color: #a31515"&gt;"https://server/odata.svc/"&lt;/span&gt;));&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;data.SetAccessToken(token,
type);&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;br&gt;
&lt;/o:p&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;data.Claims.ToList().ForEach(c
=&amp;gt;&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: #a31515"&gt;"{0}\n
{1}\n ({2})\n"&lt;/span&gt;, c.ClaimType, c.Value, c.Issuer));&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-no-proof: yes"&gt;}&lt;/span&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p&gt;
HTH
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=a2fb6370-2c92-49a1-818b-d3dc4fb69953" /&gt;</description>
      <category>IdentityModel</category>
    </item>
    <item>
      <trackback:ping>http://www.leastprivilege.com/Trackback.aspx?guid=59b221ce-482b-438f-9483-0d9e195b8078</trackback:ping>
      <pingback:server>http://www.leastprivilege.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.leastprivilege.com/PermaLink.aspx?guid=59b221ce-482b-438f-9483-0d9e195b8078</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
In the latest drop of <a href="http://identitymodel.codeplex.com/">Thinktecture.IdentityModel</a> you
can find a debugger visualizer for <em>IClaimsIdentity</em> and <em>IClaimsPrincipal</em>. 
</p>
        <p>
          <img src="http://www.leastprivilege.com/content/binary/ClaimsVisualizer.png" />
        </p>
        <p>
Have fun ;)
</p>
        <p>
PS. Thanks to Mr. <a href="http://headwriteline.blogspot.com">UI</a>.
</p>
        <img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=59b221ce-482b-438f-9483-0d9e195b8078" />
      </body>
      <title>Thinktecture.IdentityModel: Claims Debugger Visualizer</title>
      <guid isPermaLink="false">http://www.leastprivilege.com/PermaLink.aspx?guid=59b221ce-482b-438f-9483-0d9e195b8078</guid>
      <link>http://www.leastprivilege.com/ThinktectureIdentityModelClaimsDebuggerVisualizer.aspx</link>
      <pubDate>Wed, 05 May 2010 12:47:42 GMT</pubDate>
      <description>&lt;p&gt;
In the latest drop of &lt;a href="http://identitymodel.codeplex.com/"&gt;Thinktecture.IdentityModel&lt;/a&gt; you
can find a debugger visualizer for &lt;em&gt;IClaimsIdentity&lt;/em&gt; and &lt;em&gt;IClaimsPrincipal&lt;/em&gt;. 
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.leastprivilege.com/content/binary/ClaimsVisualizer.png"&gt; 
&lt;/p&gt;
&lt;p&gt;
Have fun ;)
&lt;/p&gt;
&lt;p&gt;
PS. Thanks to Mr. &lt;a href="http://headwriteline.blogspot.com"&gt;UI&lt;/a&gt;.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=59b221ce-482b-438f-9483-0d9e195b8078" /&gt;</description>
      <category>IdentityModel</category>
    </item>
    <item>
      <trackback:ping>http://www.leastprivilege.com/Trackback.aspx?guid=05189a91-e702-4e2d-aa3f-5ba73b7fe3d8</trackback:ping>
      <pingback:server>http://www.leastprivilege.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.leastprivilege.com/PermaLink.aspx?guid=05189a91-e702-4e2d-aa3f-5ba73b7fe3d8</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://www.sturmnet.org/blog/">Oliver</a> and <a href="http://community.devexpress.com/blogs/garyshort/">Gary</a> fortunately
decided to continue with their “Sod This” podcast show. That’s good – because I always
found this very entertaining.
</p>
        <p>
The “comeback” <a href="http://www.sodthis.com/podcast/2010/04/27/sod-this-8-the-secure-show">show</a> is
about security and identity – awesome ;)
</p>
        <img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=05189a91-e702-4e2d-aa3f-5ba73b7fe3d8" />
      </body>
      <title>Sod This! &amp;ndash; reloaded</title>
      <guid isPermaLink="false">http://www.leastprivilege.com/PermaLink.aspx?guid=05189a91-e702-4e2d-aa3f-5ba73b7fe3d8</guid>
      <link>http://www.leastprivilege.com/SodThisNdashReloaded.aspx</link>
      <pubDate>Tue, 27 Apr 2010 10:53:55 GMT</pubDate>
      <description>&lt;p&gt;
&lt;a href="http://www.sturmnet.org/blog/"&gt;Oliver&lt;/a&gt; and &lt;a href="http://community.devexpress.com/blogs/garyshort/"&gt;Gary&lt;/a&gt; fortunately
decided to continue with their “Sod This” podcast show. That’s good – because I always
found this very entertaining.
&lt;/p&gt;
&lt;p&gt;
The “comeback” &lt;a href="http://www.sodthis.com/podcast/2010/04/27/sod-this-8-the-secure-show"&gt;show&lt;/a&gt; is
about security and identity – awesome ;)
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=05189a91-e702-4e2d-aa3f-5ba73b7fe3d8" /&gt;</description>
    </item>
    <item>
      <trackback:ping>http://www.leastprivilege.com/Trackback.aspx?guid=1fd35914-7f4d-42ed-b855-bb535095bdd5</trackback:ping>
      <pingback:server>http://www.leastprivilege.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.leastprivilege.com/PermaLink.aspx?guid=1fd35914-7f4d-42ed-b855-bb535095bdd5</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <title>Using an Active Endpoint to sign into a Web Application</title>
      <guid isPermaLink="false">http://www.leastprivilege.com/PermaLink.aspx?guid=1fd35914-7f4d-42ed-b855-bb535095bdd5</guid>
      <link>http://www.leastprivilege.com/UsingAnActiveEndpointToSignIntoAWebApplication.aspx</link>
      <pubDate>Wed, 14 Apr 2010 12:51:50 GMT</pubDate>
      <description>&lt;p&gt;
This question comes up from time to time, so I thought I’ll document it here.
&lt;/p&gt;
&lt;p&gt;
The scenario is, that you don’t want to do a passive redirect in a web app – but directly
talk to an active STS endpoint to authenticate and request a token. The reasons for
that could be that you need a local sign-in page in the web app – or that the token
service is not publicly reachable.
&lt;/p&gt;
&lt;p&gt;
The following code can be used on a login page: 
&lt;/p&gt;
&lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;
&lt;span style="font-family: consolas; color: blue; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;protected&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; _btnLogin_Click(&lt;span style="color: blue"&gt;object&lt;/span&gt; sender, &lt;span style="color: #2b91af"&gt;EventArgs&lt;/span&gt; e)&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;{&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green"&gt;//
authenticate with WS-Trust endpoint&lt;br&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;var&lt;/span&gt; factory
= &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;WSTrustChannelFactory&lt;/span&gt;(&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;UserNameWSTrustBinding&lt;/span&gt;(&lt;span style="color: #2b91af"&gt;SecurityMode&lt;/span&gt;.TransportWithMessageCredential),&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;EndpointAddress&lt;/span&gt;(&lt;span style="color: #a31515"&gt;"https://sts/endpoint"&lt;/span&gt;));&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;factory.Credentials.UserName.UserName = _txtUserName.Text;&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;factory.Credentials.UserName.Password
= _txtPassword.Text;&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;?xml:namespace prefix = o /&gt;
&lt;o:p&gt;&amp;nbsp;&lt;br&gt;
&lt;/o:p&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;var&lt;/span&gt; channel
= factory.CreateChannel();&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;br&gt;
&lt;/o:p&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;var&lt;/span&gt; rst
= &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;RequestSecurityToken&lt;br&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;RequestType
= &lt;span style="color: #2b91af"&gt;RequestTypes&lt;/span&gt;.Issue,&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;AppliesTo
= &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;EndpointAddress&lt;/span&gt;(&lt;span style="color: #a31515"&gt;"https://rp/"&lt;/span&gt;),&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;KeyType
= &lt;span style="color: #2b91af"&gt;KeyTypes&lt;/span&gt;.Bearer&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;};&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;br&gt;
&lt;/o:p&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;var&lt;/span&gt; genericToken
= channel.Issue(rst) &lt;span style="color: blue"&gt;as&lt;/span&gt; &lt;span style="color: #2b91af"&gt;GenericXmlSecurityToken&lt;/span&gt;;&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;br&gt;
&lt;/o:p&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green"&gt;//
parse token&lt;br&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;var&lt;/span&gt; handlers
= &lt;span style="color: #2b91af"&gt;FederatedAuthentication&lt;/span&gt;.ServiceConfiguration.SecurityTokenHandlers;&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;var&lt;/span&gt; token
= handlers.ReadToken(&lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;XmlTextReader&lt;/span&gt;(&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;StringReader&lt;/span&gt;(genericToken.TokenXml.OuterXml)));&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;var&lt;/span&gt; identity
= handlers.ValidateToken(token).First();&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green"&gt;// create session token&lt;br&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;var&lt;/span&gt; sessionToken
= &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;SessionSecurityToken&lt;/span&gt;(&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af"&gt;ClaimsPrincipal&lt;/span&gt;.CreateFromIdentity(identity));&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #2b91af"&gt;FederatedAuthentication&lt;/span&gt;.SessionAuthenticationModule.WriteSessionTokenToCookie(sessionToken);&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;br&gt;
&lt;/o:p&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Response.Redirect(&lt;span style="color: #a31515"&gt;"~/users/default.aspx"&lt;/span&gt;);&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-no-proof: yes"&gt;}&lt;/span&gt;
&lt;/p&gt;
&lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;
&lt;span style="font-family: consolas; mso-no-proof: yes"&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=1fd35914-7f4d-42ed-b855-bb535095bdd5" /&gt;</description>
      <category>IdentityModel</category>
    </item>
    <item>
      <trackback:ping>http://www.leastprivilege.com/Trackback.aspx?guid=c38dae76-6f30-4ad0-a81b-4b54a79c1cc0</trackback:ping>
      <pingback:server>http://www.leastprivilege.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.leastprivilege.com/PermaLink.aspx?guid=c38dae76-6f30-4ad0-a81b-4b54a79c1cc0</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Any more dodgy <a href="http://weblogs.thinktecture.com/cweyer/2010/04/a-storm-blowing-through-net-land-oliver-sturm-joins-thinktecture.html">puns</a>?
</p>
        <p>
I am happy to announce that my good friend <a href="http://www.sturmnet.org/blog/">Oliver</a><a href="http://www.thinktecture.com/staff/oliver">Sturm</a> has
joined thinktecture.
</p>
        <p>
Oliver is a brilliant computer geek in general and a language wonk in particular –
good company to hang out in bars – and just generally a nice guy. Looking forward
working with you!
</p>
        <img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=c38dae76-6f30-4ad0-a81b-4b54a79c1cc0" />
      </body>
      <title>Taken by Storm</title>
      <guid isPermaLink="false">http://www.leastprivilege.com/PermaLink.aspx?guid=c38dae76-6f30-4ad0-a81b-4b54a79c1cc0</guid>
      <link>http://www.leastprivilege.com/TakenByStorm.aspx</link>
      <pubDate>Tue, 06 Apr 2010 10:18:00 GMT</pubDate>
      <description>&lt;p&gt;
Any more dodgy &lt;a href="http://weblogs.thinktecture.com/cweyer/2010/04/a-storm-blowing-through-net-land-oliver-sturm-joins-thinktecture.html"&gt;puns&lt;/a&gt;?
&lt;/p&gt;
&lt;p&gt;
I am happy to announce that my good friend &lt;a href="http://www.sturmnet.org/blog/"&gt;Oliver&lt;/a&gt; &lt;a href="http://www.thinktecture.com/staff/oliver"&gt;Sturm&lt;/a&gt; has
joined thinktecture.
&lt;/p&gt;
&lt;p&gt;
Oliver is a brilliant computer geek in general and a language wonk in particular –
good company to hang out in bars – and just generally a nice guy. Looking forward
working with you!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=c38dae76-6f30-4ad0-a81b-4b54a79c1cc0" /&gt;</description>
      <category>Misc</category>
    </item>
    <item>
      <trackback:ping>http://www.leastprivilege.com/Trackback.aspx?guid=45baa120-96dd-48dc-a067-9a3c9ac0d3dd</trackback:ping>
      <pingback:server>http://www.leastprivilege.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.leastprivilege.com/PermaLink.aspx?guid=45baa120-96dd-48dc-a067-9a3c9ac0d3dd</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Wow – I can’t tell you how happy and relieved I am to write this post ;)
</p>
        <p>
I started to work with what’s now called WIF approximately two years ago – and built
various security token services for customers, demos and internal use. The idea behind
StarterSTS was to have a non-trivial security token service sample that demonstrates
the typical tasks of an STS (where it turns out that issuing tokens is by far the
smallest part) and at the same time is real world enough to be directly used in specialized
situations like development STSes.
</p>
        <p>
I checked-in the first public version of StarterSTS at 25th May 2009 and had 1861
download so far. Today I am announcing StarterSTS 1.0 which is feature complete (and
hopefully reasonably bug-free) and finally includes documentation as well as nine
new screencasts on the various feature areas.
</p>
        <p>
I want to thank all beta-testers and early adopters that gave feedback along the way!
Now that 1.0 is done we can think about ways to extend the STS in the future.
</p>
        <p>
          <strong>Codeplex Site</strong>
          <br />
          <a href="http://startersts.codeplex.com">http://startersts.codeplex.com</a> (main)<br /><a title="http://startersts.codeplex.com/releases/view/43054#DownloadId=115213" href="http://startersts.codeplex.com/releases/view/43054#DownloadId=115213">http://startersts.codeplex.com/releases/view/43054#DownloadId=115213</a> (direct)<br /><a href="http://startersts.codeplex.com/thread/list.aspx">http://startersts.codeplex.com/thread/list.aspx</a> (forum)
</p>
        <p>
          <strong>Documentation</strong>
          <br />
          <a href="http://identity.thinktecture.com/stsce/docs/">http://identity.thinktecture.com/stsce/docs/</a>
        </p>
        <p>
          <strong>Screencasts<br /></strong>
          <a href="https://identity.thinktecture.com/download/startersts/v1/StarterSTS_InitialSetup.wmv">Initial
setup &amp; configuration</a>
          <br />
          <a href="http://identity.thinktecture.com/download/starterSTS/v1/StarterSTS_FederatingWebApps.wmv">Federating
your first web application</a>
          <br />
          <a href="http://identity.thinktecture.com/download/starterSTS/v1/StarterSTS_FederatingWebServices.wmv">Federating
with web services</a>
          <br />
          <a href="https://identity.thinktecture.com/download/startersts/v1/StarterSTS_SSO.wmv">Single-Sign-On
&amp; Confirmation screen</a>
          <br />
          <a href="http://identity.thinktecture.com/download/starterSTS/v1/StarterSTS_REST.wmv">Using
the REST endpoint</a>
          <br />
          <a href="http://identity.thinktecture.com/download/starterSTS/v1/StarterSTS_OpenId.wmv">Using
the OpenId bridge</a>
          <br />
          <a href="http://identity.thinktecture.com/download/starterSTS/v1/StarterSTS_Tracing.wmv">Tracing</a>
          <br />
          <a href="http://identity.thinktecture.com/download/starterSTS/v1/StarterSTS_ClientCertificates.wmv">Using
client certificates</a>
          <br />
          <a href="http://identity.thinktecture.com/download/starterSTS/v1/StarterSTS_InfoCards.wmv">Using
Information Cards</a>
        </p>
        <img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=45baa120-96dd-48dc-a067-9a3c9ac0d3dd" />
      </body>
      <title>Thinktecture StarterSTS 1.0 RTW</title>
      <guid isPermaLink="false">http://www.leastprivilege.com/PermaLink.aspx?guid=45baa120-96dd-48dc-a067-9a3c9ac0d3dd</guid>
      <link>http://www.leastprivilege.com/ThinktectureStarterSTS10RTW.aspx</link>
      <pubDate>Sun, 04 Apr 2010 06:33:42 GMT</pubDate>
      <description>&lt;p&gt;
Wow – I can’t tell you how happy and relieved I am to write this post ;)
&lt;/p&gt;
&lt;p&gt;
I started to work with what’s now called WIF approximately two years ago – and built
various security token services for customers, demos and internal use. The idea behind
StarterSTS was to have a non-trivial security token service sample that demonstrates
the typical tasks of an STS (where it turns out that issuing tokens is by far the
smallest part) and at the same time is real world enough to be directly used in specialized
situations like development STSes.
&lt;/p&gt;
&lt;p&gt;
I checked-in the first public version of StarterSTS at 25th May 2009 and had 1861
download so far. Today I am announcing StarterSTS 1.0 which is feature complete (and
hopefully reasonably bug-free) and finally includes documentation as well as nine
new screencasts on the various feature areas.
&lt;/p&gt;
&lt;p&gt;
I want to thank all beta-testers and early adopters that gave feedback along the way!
Now that 1.0 is done we can think about ways to extend the STS in the future.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Codeplex Site&lt;/strong&gt;
&lt;br&gt;
&lt;a href="http://startersts.codeplex.com"&gt;http://startersts.codeplex.com&lt;/a&gt; (main)&lt;br&gt;
&lt;a title="http://startersts.codeplex.com/releases/view/43054#DownloadId=115213" href="http://startersts.codeplex.com/releases/view/43054#DownloadId=115213"&gt;http://startersts.codeplex.com/releases/view/43054#DownloadId=115213&lt;/a&gt; (direct)&lt;br&gt;
&lt;a href="http://startersts.codeplex.com/thread/list.aspx"&gt;http://startersts.codeplex.com/thread/list.aspx&lt;/a&gt; (forum)
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Documentation&lt;/strong&gt;
&lt;br&gt;
&lt;a href="http://identity.thinktecture.com/stsce/docs/"&gt;http://identity.thinktecture.com/stsce/docs/&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Screencasts&lt;br&gt;
&lt;/strong&gt;&lt;a href="https://identity.thinktecture.com/download/startersts/v1/StarterSTS_InitialSetup.wmv"&gt;Initial
setup &amp;amp; configuration&lt;/a&gt; 
&lt;br&gt;
&lt;a href="http://identity.thinktecture.com/download/starterSTS/v1/StarterSTS_FederatingWebApps.wmv"&gt;Federating
your first web application&lt;/a&gt; 
&lt;br&gt;
&lt;a href="http://identity.thinktecture.com/download/starterSTS/v1/StarterSTS_FederatingWebServices.wmv"&gt;Federating
with web services&lt;/a&gt; 
&lt;br&gt;
&lt;a href="https://identity.thinktecture.com/download/startersts/v1/StarterSTS_SSO.wmv"&gt;Single-Sign-On
&amp;amp; Confirmation screen&lt;/a&gt; 
&lt;br&gt;
&lt;a href="http://identity.thinktecture.com/download/starterSTS/v1/StarterSTS_REST.wmv"&gt;Using
the REST endpoint&lt;/a&gt; 
&lt;br&gt;
&lt;a href="http://identity.thinktecture.com/download/starterSTS/v1/StarterSTS_OpenId.wmv"&gt;Using
the OpenId bridge&lt;/a&gt; 
&lt;br&gt;
&lt;a href="http://identity.thinktecture.com/download/starterSTS/v1/StarterSTS_Tracing.wmv"&gt;Tracing&lt;/a&gt; 
&lt;br&gt;
&lt;a href="http://identity.thinktecture.com/download/starterSTS/v1/StarterSTS_ClientCertificates.wmv"&gt;Using
client certificates&lt;/a&gt; 
&lt;br&gt;
&lt;a href="http://identity.thinktecture.com/download/starterSTS/v1/StarterSTS_InfoCards.wmv"&gt;Using
Information Cards&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=45baa120-96dd-48dc-a067-9a3c9ac0d3dd" /&gt;</description>
      <category>IdentityModel</category>
    </item>
    <item>
      <trackback:ping>http://www.leastprivilege.com/Trackback.aspx?guid=77132bde-77f6-49a8-a858-eb39e82bf56e</trackback:ping>
      <pingback:server>http://www.leastprivilege.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.leastprivilege.com/PermaLink.aspx?guid=77132bde-77f6-49a8-a858-eb39e82bf56e</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <title>Using Silverlight to Access WIF secured WCF Services (Part 3)</title>
      <guid isPermaLink="false">http://www.leastprivilege.com/PermaLink.aspx?guid=77132bde-77f6-49a8-a858-eb39e82bf56e</guid>
      <link>http://www.leastprivilege.com/UsingSilverlightToAccessWIFSecuredWCFServicesPart3.aspx</link>
      <pubDate>Tue, 30 Mar 2010 08:18:07 GMT</pubDate>
      <description>&lt;p&gt;
In this last part of the series (see &lt;a href="http://www.leastprivilege.com/UsingSilverlightToAccessWIFSecuredWCFServices.aspx"&gt;here&lt;/a&gt; and &lt;a href="http://www.leastprivilege.com/UsingSilverlightToAccessWIFSecuredWCFServicesPart2.aspx"&gt;here&lt;/a&gt;)
I want to show you how to use the WIF/SL integration &lt;em&gt;ClaimsIdentitySessionManager&lt;/em&gt; to
request tokens and talk to WIF secured services.
&lt;/p&gt;
&lt;p&gt;
The &lt;em&gt;ClaimsIdentityManager&lt;/em&gt; registers as an &lt;em&gt;ApplicationService&lt;/em&gt; in
SL. Once registered, it can encapsulate the process of requesting a token for a relying
party, caching that token as well as setting the SOAP security header for outgoing
service requests.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Registration&lt;/strong&gt;
&lt;br&gt;
&lt;em&gt;ClaimsIdentitySessionManager&lt;/em&gt; gets registered in app.xaml. Here you can specify
the endpoint address of the WS-Trust token services as well as the credential type.
In this sample I am using the ADFS2 Windows/Transport endpoint from my last post.
&lt;/p&gt;
&lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;
&lt;span style="font-family: consolas; color: blue; mso-ansi-language: en-us" lang="EN-US"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: consolas; color: #a31515; mso-ansi-language: en-us" lang="EN-US"&gt;Application.ApplicationLifetimeObjects&lt;/span&gt;&lt;span style="font-family: consolas; color: blue; mso-ansi-language: en-us" lang="EN-US"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; color: #a31515; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; color: blue; mso-ansi-language: en-us" lang="EN-US"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: consolas; color: #a31515; mso-ansi-language: en-us" lang="EN-US"&gt;id&lt;/span&gt;&lt;span style="font-family: consolas; color: blue; mso-ansi-language: en-us" lang="EN-US"&gt;:&lt;/span&gt;&lt;span style="font-family: consolas; color: #a31515; mso-ansi-language: en-us" lang="EN-US"&gt;ClaimsIdentitySessionManager&lt;/span&gt;&lt;span style="font-family: consolas; color: blue; mso-ansi-language: en-us" lang="EN-US"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; color: #a31515; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; color: blue; mso-ansi-language: en-us" lang="EN-US"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: consolas; color: #a31515; mso-ansi-language: en-us" lang="EN-US"&gt;id&lt;/span&gt;&lt;span style="font-family: consolas; color: blue; mso-ansi-language: en-us" lang="EN-US"&gt;:&lt;/span&gt;&lt;span style="font-family: consolas; color: #a31515; mso-ansi-language: en-us" lang="EN-US"&gt;ClaimsIdentitySessionManager.IdentityProvider&lt;/span&gt;&lt;span style="font-family: consolas; color: blue; mso-ansi-language: en-us" lang="EN-US"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; color: #a31515; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; color: blue; mso-ansi-language: en-us" lang="EN-US"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: consolas; color: #a31515; mso-ansi-language: en-us" lang="EN-US"&gt;id&lt;/span&gt;&lt;span style="font-family: consolas; color: blue; mso-ansi-language: en-us" lang="EN-US"&gt;:&lt;/span&gt;&lt;span style="font-family: consolas; color: #a31515; mso-ansi-language: en-us" lang="EN-US"&gt;WSTrustSecurityTokenService&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; color: red; mso-ansi-language: en-us" lang="EN-US"&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;
Endpoint&lt;/span&gt;&lt;span style="font-family: consolas; color: blue; mso-ansi-language: en-us" lang="EN-US"&gt;="https://server/services/trust/13/windowstransport"&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us" lang="EN-US"&gt;&amp;nbsp;&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&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; &lt;/span&gt;&lt;span style="color: red"&gt;CredentialType&lt;/span&gt;&lt;span style="color: blue"&gt;="DefaultCredential"
/&amp;gt;&lt;br&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; color: #a31515; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; color: blue; mso-ansi-language: en-us" lang="EN-US"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-family: consolas; color: #a31515; mso-ansi-language: en-us" lang="EN-US"&gt;id&lt;/span&gt;&lt;span style="font-family: consolas; color: blue; mso-ansi-language: en-us" lang="EN-US"&gt;:&lt;/span&gt;&lt;span style="font-family: consolas; color: #a31515; mso-ansi-language: en-us" lang="EN-US"&gt;ClaimsIdentitySessionManager.IdentityProvider&lt;/span&gt;&lt;span style="font-family: consolas; color: blue; mso-ansi-language: en-us" lang="EN-US"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; color: #a31515; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-family: consolas; color: #a31515"&gt;id&lt;/span&gt;&lt;span style="font-family: consolas; color: blue"&gt;:&lt;/span&gt;&lt;span style="font-family: consolas; color: #a31515"&gt;ClaimsIdentitySessionManager&lt;/span&gt;&lt;span style="font-family: consolas; color: blue"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-family: consolas; color: #a31515"&gt;Application.ApplicationLifetimeObjects&lt;/span&gt;&lt;span style="font-family: consolas; color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family: consolas"&gt;&lt;?xml:namespace prefix = o /&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Calling the Service&lt;/strong&gt;
&lt;br&gt;
All the service interaction is abstracted by the &lt;em&gt;ClaimsIdentitySessionManager&lt;/em&gt;.
The call to &lt;em&gt;InvokeAsync&lt;/em&gt; does a few things:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
checks if a token has already been obtained for the service endpoint&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;
if not, requests the token and caches it&lt;/li&gt;
&lt;li&gt;
if a password is required, invokes a callback to the UI&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;
sets the SOAP security header using the requested token&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;
&lt;span style="font-family: consolas; color: blue; mso-ansi-language: en-us" lang="EN-US"&gt;private&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us" lang="EN-US"&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; CallService()&lt;br&gt;
{&lt;br&gt;
&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;var&lt;/span&gt; factory
= &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;ChannelFactory&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;StarterServiceContract&lt;/span&gt;&amp;gt;(&lt;span style="color: #a31515"&gt;"symmetric"&lt;/span&gt;);&lt;br&gt;
&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;var&lt;/span&gt; proxy
= factory.CreateChannel();&lt;br&gt;
&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;var&lt;/span&gt; channel
= proxy &lt;span style="color: blue"&gt;as&lt;/span&gt; &lt;span style="color: #2b91af"&gt;IClientChannel&lt;/span&gt;;&lt;br&gt;
&lt;br&gt;
&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #2b91af"&gt;ClaimsIdentitySessionManager&lt;/span&gt;.Current.InvokeAsync(()
=&amp;gt;&lt;br&gt;
&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;br&gt;
&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;proxy.BeginGetClaims(result
=&amp;gt; ShowClaims(proxy, result), &lt;span style="color: blue"&gt;null&lt;/span&gt;);&lt;br&gt;
&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;},
channel);&lt;br&gt;
}&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=77132bde-77f6-49a8-a858-eb39e82bf56e" /&gt;</description>
      <category>IdentityModel</category>
    </item>
    <item>
      <trackback:ping>http://www.leastprivilege.com/Trackback.aspx?guid=f7eb2e1a-14e6-4910-9ffa-a3947048598c</trackback:ping>
      <pingback:server>http://www.leastprivilege.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.leastprivilege.com/PermaLink.aspx?guid=f7eb2e1a-14e6-4910-9ffa-a3947048598c</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
With SL4’s support for NTLM and the WIF integration bits, you can now easily request
tokens from ADFS2 (or any other token service that supports Windows authentication)
in single-sign-on style. Here’s the quick walk-through…
</p>
        <p>
          <strong>Enable the right endpoint in ADFS2</strong>
          <br />
You need a WS-Trust endpoint for version 1.3 that supports transport security and
Windows authentication. This endpoint needs to be enabled in the ADFS2 MMC (/trust/13/windowstransport).
</p>
        <p>
          <strong>Configure WSTrustClient and request the Token</strong>
          <br />
Next you have to configure WSTrustClient to use this endpoint, using the Windows binding
and Windows credential type:
</p>
        <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal">
          <span style="font-family: consolas; color: blue; mso-ansi-language: en-us" lang="EN-US">var</span>
          <span style="font-family: consolas; mso-ansi-language: en-us" lang="EN-US"> client
= <span style="color: blue">new</span><span style="color: #2b91af">WSTrustClient</span>(<br /></span>
          <span style="font-family: consolas; mso-ansi-language: en-us" lang="EN-US">
            <span style="mso-spacerun: yes">    </span>
            <span style="color: blue">new</span>
            <span style="color: #2b91af">WSTrustBindingWindows</span>(),<br /></span>
          <span style="font-family: consolas; mso-ansi-language: en-us" lang="EN-US">
            <span style="mso-spacerun: yes">    </span>
            <span style="color: blue">new</span>
            <span style="color: #2b91af">EndpointAddress</span>(<span style="color: #a31515">"https://server/adfs/services/trust/13/windowstransport"</span>),<br /></span>
          <span style="font-family: consolas; mso-ansi-language: en-us" lang="EN-US">
            <span style="mso-spacerun: yes">    </span>
          </span>
          <span style="font-family: consolas; color: blue">new</span>
          <span style="font-family: consolas">
            <span style="color: #2b91af">WindowsCredentials</span>());</span>
        </p>
        <p>
From there on you can include the token to auth against other services.
</p>
        <img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=f7eb2e1a-14e6-4910-9ffa-a3947048598c" />
      </body>
      <title>Requesting Tokens from ADFS2 using Silverlight and Windows Authentication</title>
      <guid isPermaLink="false">http://www.leastprivilege.com/PermaLink.aspx?guid=f7eb2e1a-14e6-4910-9ffa-a3947048598c</guid>
      <link>http://www.leastprivilege.com/RequestingTokensFromADFS2UsingSilverlightAndWindowsAuthentication.aspx</link>
      <pubDate>Sun, 28 Mar 2010 15:37:27 GMT</pubDate>
      <description>&lt;p&gt;
With SL4’s support for NTLM and the WIF integration bits, you can now easily request
tokens from ADFS2 (or any other token service that supports Windows authentication)
in single-sign-on style. Here’s the quick walk-through…
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Enable the right endpoint in ADFS2&lt;/strong&gt;
&lt;br&gt;
You need a WS-Trust endpoint for version 1.3 that supports transport security and
Windows authentication. This endpoint needs to be enabled in the ADFS2 MMC (/trust/13/windowstransport).
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Configure WSTrustClient and request the Token&lt;/strong&gt;
&lt;br&gt;
Next you have to configure WSTrustClient to use this endpoint, using the Windows binding
and Windows credential type:
&lt;/p&gt;
&lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;
&lt;span style="font-family: consolas; color: blue; mso-ansi-language: en-us" lang="EN-US"&gt;var&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us" lang="EN-US"&gt; client
= &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;WSTrustClient&lt;/span&gt;(&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;WSTrustBindingWindows&lt;/span&gt;(),&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;EndpointAddress&lt;/span&gt;(&lt;span style="color: #a31515"&gt;"https://server/adfs/services/trust/13/windowstransport"&lt;/span&gt;),&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; color: blue"&gt;new&lt;/span&gt;&lt;span style="font-family: consolas"&gt; &lt;span style="color: #2b91af"&gt;WindowsCredentials&lt;/span&gt;());&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
From there on you can include the token to auth against other services.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=f7eb2e1a-14e6-4910-9ffa-a3947048598c" /&gt;</description>
      <category>IdentityModel</category>
    </item>
    <item>
      <trackback:ping>http://www.leastprivilege.com/Trackback.aspx?guid=05de822e-e823-4e82-a319-9864d358019d</trackback:ping>
      <pingback:server>http://www.leastprivilege.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.leastprivilege.com/PermaLink.aspx?guid=05de822e-e823-4e82-a319-9864d358019d</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <title>Using Silverlight to Access WIF secured WCF Services (Part 2)</title>
      <guid isPermaLink="false">http://www.leastprivilege.com/PermaLink.aspx?guid=05de822e-e823-4e82-a319-9864d358019d</guid>
      <link>http://www.leastprivilege.com/UsingSilverlightToAccessWIFSecuredWCFServicesPart2.aspx</link>
      <pubDate>Sun, 21 Mar 2010 20:52:58 GMT</pubDate>
      <description>&lt;p&gt;
&lt;a href="http://www.leastprivilege.com/UsingSilverlightToAccessWIFSecuredWCFServices.aspx"&gt;This&lt;/a&gt; was
one of my most popular blog post in the recent time (please read it first to get the
necessary background information). I thought I give this another shot with the new
SL/WIF &lt;a href="http://www.leastprivilege.com/AFirstLookAtSilverlightAndWIFIntegration.aspx"&gt;integration&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
There are other ways to accomplish the below things, e.g. using the SL application
service or passive identity providers. I am focusing here purely on the SL initiated
active STS/RP communication scenario and the raw APIs.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Requesting Tokens from within Silverlight&lt;br&gt;
&lt;/strong&gt;In my old post I had to use a custom REST endpoint in &lt;a href="http://startersts.codeplex.com/"&gt;StarterSTS&lt;/a&gt; to
request a bearer token. With the new &lt;em&gt;WSTrustChannel&lt;/em&gt;, it is now possible to
talk to a standard WS-Trust 1.3 endpoint (like the one in StarterSTS or ADFS2). 
&lt;/p&gt;
&lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;
&lt;span style="font-family: consolas; color: blue; mso-ansi-language: en-us" lang="EN-US"&gt;var&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us" lang="EN-US"&gt; client
= &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;WSTrustClient&lt;/span&gt;(&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;WSTrustBindingUsernameMixed&lt;/span&gt;(),&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;EndpointAddress&lt;/span&gt;(&lt;span style="color: #a31515"&gt;"https://.../issue.svc/mixed/username"&lt;/span&gt;),&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; color: blue"&gt;new&lt;/span&gt;&lt;span style="font-family: consolas"&gt; &lt;span style="color: #2b91af"&gt;UsernameCredentials&lt;/span&gt;(&lt;span style="color: #a31515"&gt;"username"&lt;/span&gt;, &lt;span style="color: #a31515"&gt;"password"&lt;/span&gt;&lt;?xml:namespace prefix = o /&gt;));&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
You then have to construct an RST. Basically you specify the key type (bearer or symmetric)
and appliesTo value.
&lt;/p&gt;
&lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;
&lt;span style="font-family: consolas; color: blue; mso-ansi-language: en-us" lang="EN-US"&gt;var&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us" lang="EN-US"&gt; rst
= &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;RequestSecurityToken&lt;/span&gt;(&lt;span style="color: #2b91af"&gt;WSTrust13Constants&lt;/span&gt;.&lt;span style="color: #2b91af"&gt;KeyTypes&lt;/span&gt;.Symmetric)&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us" lang="EN-US"&gt;{&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;AppliesTo
= &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;EndpointAddress&lt;/span&gt;(&lt;span style="color: #a31515"&gt;"https://roadie/StarterRP/"&lt;/span&gt;)&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas"&gt;};&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
The call to &lt;em&gt;WSTrustClient.Issue&lt;/em&gt; returns an RSTR – which in turn contains
the requested token and further key material. The identity kit also contains a token
cache called &lt;em&gt;TokenCache&lt;/em&gt;. You could use this class if you want to to store
that token for further use.
&lt;/p&gt;
&lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;
&lt;span style="font-family: consolas; mso-ansi-language: en-us" lang="EN-US"&gt;client.IssueCompleted
+= (s, args) =&amp;gt;&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us" lang="EN-US"&gt;{&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;_cache.AddTokenToCache(&lt;span style="color: #a31515"&gt;"myRP"&lt;/span&gt;,
args.Result);&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas"&gt;};&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;br&gt;
&lt;/o:p&gt;
&lt;/span&gt;&lt;span style="font-family: consolas"&gt;client.IssueAsync(rst);&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Using a Token to authenticate with a WCF Relying Party&lt;br&gt;
&lt;/strong&gt;Since Silverlight does not support issued token credentials, we must handcraft
the SOAP security header. The identity kit includes the &lt;em&gt;IssuedTokenHeader&lt;/em&gt; class
for this purpose. The nice thing is, that this class supports symmetric proof keys
as well as bearer tokens. But you still have to set this header manually on every
call.
&lt;/p&gt;
&lt;p&gt;
The identity kit includes its own wrapper to abstract away the header generation.
I am using my own little helper here to make this process less disruptive.
&lt;/p&gt;
&lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;
&lt;span style="font-family: consolas; color: blue; mso-ansi-language: en-us" lang="EN-US"&gt;public&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us" lang="EN-US"&gt; &lt;span style="color: blue"&gt;static&lt;/span&gt; &lt;span style="color: blue"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af"&gt;IssuedTokenHeaderExtensions&lt;br&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us" lang="EN-US"&gt;{&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;static&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; SendWithIssuedToken(&lt;span style="color: blue"&gt;this&lt;/span&gt; &lt;span style="color: #2b91af"&gt;IContextChannel&lt;/span&gt; channel, &lt;span style="color: #2b91af"&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; RequestSecurityTokenResponse&lt;/span&gt; rstr, &lt;span style="color: #2b91af"&gt;Action&lt;/span&gt; action)&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;using&lt;/span&gt; (&lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;OperationContextScope&lt;/span&gt;(channel))&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #2b91af"&gt;OperationContext&lt;/span&gt;.Current.OutgoingMessageHeaders.Add(&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; &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;IssuedTokenHeader&lt;/span&gt;(rstr));&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;
&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; &lt;/span&gt;action();&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas"&gt;}&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
This allows calling a WCF service like this:
&lt;/p&gt;
&lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;
&lt;span style="font-family: consolas; color: blue; mso-ansi-language: en-us" lang="EN-US"&gt;private&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us" lang="EN-US"&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; CallService()&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us" lang="EN-US"&gt;{&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;var&lt;/span&gt; factory
= &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;ChannelFactory&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;StarterServiceContract&lt;/span&gt;&amp;gt;(&lt;span style="color: #a31515"&gt;"myRP"&lt;/span&gt;);&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;var&lt;/span&gt; proxy
= factory.CreateChannel();&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;var&lt;/span&gt; channel
= proxy &lt;span style="color: blue"&gt;as&lt;/span&gt; &lt;span style="color: #2b91af"&gt;IContextChannel&lt;/span&gt;;&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us" lang="EN-US"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;br&gt;
&lt;/o:p&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;channel.SendWithIssuedToken(_cache.GetTokenFromCache(&lt;span style="color: #a31515"&gt;"myRP"&lt;/span&gt;),
() =&amp;gt;&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;proxy.BeginGetClaims(result
=&amp;gt; ShowClaims(proxy, result), &lt;span style="color: blue"&gt;null&lt;/span&gt;);&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas"&gt;});&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas"&gt;}&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
The trick here again is, that the client stack is configured for no security at all,
whereas the WCF service uses a federation binding (with SecureConversation turned
off).
&lt;/p&gt;
&lt;p&gt;
I think this is pretty cool and solves some of the problems I had in the past. If
Silverlight would only support client certificate credentials….
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=05de822e-e823-4e82-a319-9864d358019d" /&gt;</description>
      <category>IdentityModel</category>
    </item>
    <item>
      <trackback:ping>http://www.leastprivilege.com/Trackback.aspx?guid=43fda733-cdd8-4ef7-a93b-0f07422150ec</trackback:ping>
      <pingback:server>http://www.leastprivilege.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.leastprivilege.com/PermaLink.aspx?guid=43fda733-cdd8-4ef7-a93b-0f07422150ec</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
At MIX, Caleb did a <a href="http://live.visitmix.com/MIX10/Sessions/SVC01">talk</a> about
the new Silverlight/WIF integration classes that “ship” with the latest identity training <a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;FamilyID=c3e315fa-94e2-4028-99cb-904369f177c0">kit</a>.
Since this is a topic that comes up really frequently – I had a first look.
</p>
        <p>
The integration code consists of two projects (client &amp; server side plumbing)
and can be divided into several feature areas. I will post more information on the
corresponding areas when I have written more code against them.
</p>
        <p>
          <strong>Same claims programming model as in WIF<br /></strong>The integration code includes <em>(I)ClaimsPrincipal, (I)ClaimsIdentity,
Claim, ClaimCollection</em> as well as the standard claim types.
</p>
        <p>
          <strong>WS-Trust and WS-Security support</strong>
          <br />
This is my favourite feature! The <em>WSTrustClient</em> class allows requesting tokens
from WS-Trust 1.3 endpoints. It supports Username/Password and Windows credentials
as well as bearer and symmetric token types. The <em>IssuedTokenHeader</em> class
makes it easier to embed the requested token in calls to backend services. The <em>TokenCache</em> class
allows caching RSTRs to be used with the issued token header.
</p>
        <p>
          <strong>Bringing claims to a Silverlight UI</strong>
          <br />
Another feature area deals with bringing claims into the SL UI for personalization
and authorization purposes. This needs some server side plumbing (the <em>AuthenticationService</em>)
and seems to focus on passive scenarios. The current implementation simply mirrors
the user claims that are visible in the app/service backend back to the UI.
</p>
        <p>
          <strong>Silverlight integration<br /></strong>This part of the integration code makes logons and claims access more SLish
by providing an SL appplication service and thus data binding access to claims.
</p>
        <p>
HTH
</p>
        <img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=43fda733-cdd8-4ef7-a93b-0f07422150ec" />
      </body>
      <title>A first Look at Silverlight and WIF Integration</title>
      <guid isPermaLink="false">http://www.leastprivilege.com/PermaLink.aspx?guid=43fda733-cdd8-4ef7-a93b-0f07422150ec</guid>
      <link>http://www.leastprivilege.com/AFirstLookAtSilverlightAndWIFIntegration.aspx</link>
      <pubDate>Sun, 21 Mar 2010 10:23:59 GMT</pubDate>
      <description>&lt;p&gt;
At MIX, Caleb did a &lt;a href="http://live.visitmix.com/MIX10/Sessions/SVC01"&gt;talk&lt;/a&gt; about
the new Silverlight/WIF integration classes that “ship” with the latest identity training &lt;a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=c3e315fa-94e2-4028-99cb-904369f177c0"&gt;kit&lt;/a&gt;.
Since this is a topic that comes up really frequently – I had a first look.
&lt;/p&gt;
&lt;p&gt;
The integration code consists of two projects (client &amp;amp; server side plumbing)
and can be divided into several feature areas. I will post more information on the
corresponding areas when I have written more code against them.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Same claims programming model as in WIF&lt;br&gt;
&lt;/strong&gt;The integration code includes &lt;em&gt;(I)ClaimsPrincipal, (I)ClaimsIdentity,
Claim, ClaimCollection&lt;/em&gt; as well as the standard claim types.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;WS-Trust and WS-Security support&lt;/strong&gt;
&lt;br&gt;
This is my favourite feature! The &lt;em&gt;WSTrustClient&lt;/em&gt; class allows requesting tokens
from WS-Trust 1.3 endpoints. It supports Username/Password and Windows credentials
as well as bearer and symmetric token types. The &lt;em&gt;IssuedTokenHeader&lt;/em&gt; class
makes it easier to embed the requested token in calls to backend services. The &lt;em&gt;TokenCache&lt;/em&gt; class
allows caching RSTRs to be used with the issued token header.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Bringing claims to a Silverlight UI&lt;/strong&gt;
&lt;br&gt;
Another feature area deals with bringing claims into the SL UI for personalization
and authorization purposes. This needs some server side plumbing (the &lt;em&gt;AuthenticationService&lt;/em&gt;)
and seems to focus on passive scenarios. The current implementation simply mirrors
the user claims that are visible in the app/service backend back to the UI.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Silverlight integration&lt;br&gt;
&lt;/strong&gt;This part of the integration code makes logons and claims access more SLish
by providing an SL appplication service and thus data binding access to claims.
&lt;/p&gt;
&lt;p&gt;
HTH
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=43fda733-cdd8-4ef7-a93b-0f07422150ec" /&gt;</description>
      <category>IdentityModel</category>
    </item>
    <item>
      <trackback:ping>http://www.leastprivilege.com/Trackback.aspx?guid=367023a1-2891-4858-8e00-e251dec0853f</trackback:ping>
      <pingback:server>http://www.leastprivilege.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.leastprivilege.com/PermaLink.aspx?guid=367023a1-2891-4858-8e00-e251dec0853f</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Our very own <a href="http://www.thinktecture.com/staff/joerg">Jörg</a><a href="http://headwriteline.blogspot.com/">Neumann</a> had
this cooking for quite a while. tt.DOM is a library that lets you add features like
change tracking, undo, redo, views, transactions and n-tier support to arbitrary types
(or lists of types). This makes typical data scenarios in 3-tier applications *much*
easier to handle.
</p>
        <p>
Expect more information and documentation soon (of course ;).
</p>
        <p>
In the meanwhile feel free to play around with it and give us feedback via the codeplex
forum!
</p>
        <p>
          <a href="http://dataobjectmodel.codeplex.com">http://dataobjectmodel.codeplex.com</a>
        </p>
        <img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=367023a1-2891-4858-8e00-e251dec0853f" />
      </body>
      <title>Thinktecture.DataObjectModel</title>
      <guid isPermaLink="false">http://www.leastprivilege.com/PermaLink.aspx?guid=367023a1-2891-4858-8e00-e251dec0853f</guid>
      <link>http://www.leastprivilege.com/ThinktectureDataObjectModel.aspx</link>
      <pubDate>Tue, 09 Mar 2010 09:45:21 GMT</pubDate>
      <description>&lt;p&gt;
Our very own &lt;a href="http://www.thinktecture.com/staff/joerg"&gt;Jörg&lt;/a&gt; &lt;a href="http://headwriteline.blogspot.com/"&gt;Neumann&lt;/a&gt; had
this cooking for quite a while. tt.DOM is a library that lets you add features like
change tracking, undo, redo, views, transactions and n-tier support to arbitrary types
(or lists of types). This makes typical data scenarios in 3-tier applications *much*
easier to handle.
&lt;/p&gt;
&lt;p&gt;
Expect more information and documentation soon (of course ;).
&lt;/p&gt;
&lt;p&gt;
In the meanwhile feel free to play around with it and give us feedback via the codeplex
forum!
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://dataobjectmodel.codeplex.com"&gt;http://dataobjectmodel.codeplex.com&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=367023a1-2891-4858-8e00-e251dec0853f" /&gt;</description>
      <category>Tools for Thinktecture</category>
    </item>
    <item>
      <trackback:ping>http://www.leastprivilege.com/Trackback.aspx?guid=ad944967-53fd-4fe1-9ff5-7c5f173de8a9</trackback:ping>
      <pingback:server>http://www.leastprivilege.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.leastprivilege.com/PermaLink.aspx?guid=ad944967-53fd-4fe1-9ff5-7c5f173de8a9</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Looking forward to this week’s nice little security <a href="http://www.troopers.de/">conference</a> organized
by my old friends at <a href="http://www.ernw.de">ERNW</a>.
</p>
        <p>
          <strong>Federated Identity - Opportunities and Risks</strong>
          <br />
The world is moving towards a federated identity model. Public facing websites like
Google or Facebook utilize technologies like OpenID, OAuth and WRAP to provide single-sign-on
capabilities. Enterprises and ISVs start deploying WS-Federation, WS-Trust and SAML
to federate with customers, partners and even internally. The goals are always the
same: provide a more meaningful representation of "identity" for authentication, authorization
and personalization. This talks sheds light on all these technologies, how they work
and how to secure them.
</p>
        <img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=ad944967-53fd-4fe1-9ff5-7c5f173de8a9" />
      </body>
      <title>This week: Trooper Heidelberg</title>
      <guid isPermaLink="false">http://www.leastprivilege.com/PermaLink.aspx?guid=ad944967-53fd-4fe1-9ff5-7c5f173de8a9</guid>
      <link>http://www.leastprivilege.com/ThisWeekTrooperHeidelberg.aspx</link>
      <pubDate>Sun, 07 Mar 2010 17:45:39 GMT</pubDate>
      <description>&lt;p&gt;
Looking forward to this week’s nice little security &lt;a href="http://www.troopers.de/"&gt;conference&lt;/a&gt; organized
by my old friends at &lt;a href="http://www.ernw.de"&gt;ERNW&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Federated Identity - Opportunities and Risks&lt;/strong&gt;
&lt;br&gt;
The world is moving towards a federated identity model. Public facing websites like
Google or Facebook utilize technologies like OpenID, OAuth and WRAP to provide single-sign-on
capabilities. Enterprises and ISVs start deploying WS-Federation, WS-Trust and SAML
to federate with customers, partners and even internally. The goals are always the
same: provide a more meaningful representation of "identity" for authentication, authorization
and personalization. This talks sheds light on all these technologies, how they work
and how to secure them.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=ad944967-53fd-4fe1-9ff5-7c5f173de8a9" /&gt;</description>
      <category>Conferences</category>
    </item>
    <item>
      <trackback:ping>http://www.leastprivilege.com/Trackback.aspx?guid=b530dfcd-3389-453d-9164-5934b588bedb</trackback:ping>
      <pingback:server>http://www.leastprivilege.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.leastprivilege.com/PermaLink.aspx?guid=b530dfcd-3389-453d-9164-5934b588bedb</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
RTM finally ;)
</p>
        <p>
          <img src="http://weblogs.thinktecture.com/.a/6a012876b389bb970c01310f589418970c-pi" />
        </p>
        <p>
Book <a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;FamilyID=4c09ffe4-43dd-4fcc-be35-c897c9bc4386">here</a>.<br />
Code <a href="http://www.microsoft.com/downloads/details.aspx?familyid=33829BCF-F5EA-4650-B807-57C63A753753&amp;displaylang=en">here</a>.<br />
More info <a href="mailto:dominick.baier(_at_)thinktecture.com">here</a>.
</p>
        <p>
Enjoy!!!
</p>
        <img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=b530dfcd-3389-453d-9164-5934b588bedb" />
      </body>
      <title>Guide to Claims-based Identity and Access Control</title>
      <guid isPermaLink="false">http://www.leastprivilege.com/PermaLink.aspx?guid=b530dfcd-3389-453d-9164-5934b588bedb</guid>
      <link>http://www.leastprivilege.com/GuideToClaimsbasedIdentityAndAccessControl.aspx</link>
      <pubDate>Fri, 05 Mar 2010 12:36:46 GMT</pubDate>
      <description>&lt;p&gt;
RTM finally ;)
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://weblogs.thinktecture.com/.a/6a012876b389bb970c01310f589418970c-pi"&gt;
&lt;/p&gt;
&lt;p&gt;
Book &lt;a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=4c09ffe4-43dd-4fcc-be35-c897c9bc4386"&gt;here&lt;/a&gt;.&lt;br&gt;
Code &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=33829BCF-F5EA-4650-B807-57C63A753753&amp;amp;displaylang=en"&gt;here&lt;/a&gt;.&lt;br&gt;
More info &lt;a href="mailto:dominick.baier(_at_)thinktecture.com"&gt;here&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Enjoy!!!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=b530dfcd-3389-453d-9164-5934b588bedb" /&gt;</description>
      <category>IdentityModel</category>
    </item>
    <item>
      <trackback:ping>http://www.leastprivilege.com/Trackback.aspx?guid=54bb6d22-766a-40c4-9ecc-e084656a035f</trackback:ping>
      <pingback:server>http://www.leastprivilege.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.leastprivilege.com/PermaLink.aspx?guid=54bb6d22-766a-40c4-9ecc-e084656a035f</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Mein geschätzter Kollege <a href="http://blogs.msdn.com/vbertocci">Vittorio</a> Bertocci
führt einen 2-Tägigen <a href="http://blogs.msdn.com/dparys/archive/2010/03/05/interesse-an-windows-identity-foundation.aspx">Workshop</a> zum
Thema Windows Identity Foundation in München durch. Das ist bestimmt eine gute Gelegenheit
sich mal abseits vom Projektalltag mit dem Thema genauer zu beschäftigen.
</p>
        <p>
Wenn danach alle (un)Klarheiten beseitigt sind, und Sie weiterführenden Informationen
oder Unterstützung zur Implementierung von Claims in der Praxis benötigen – einfach
Email an mich (dominick.baier (_at_) thinktecture.com). Ich helfe gerne weiter. Viel
Spaß!
</p>
        <img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=54bb6d22-766a-40c4-9ecc-e084656a035f" />
      </body>
      <title>WIF Workshop</title>
      <guid isPermaLink="false">http://www.leastprivilege.com/PermaLink.aspx?guid=54bb6d22-766a-40c4-9ecc-e084656a035f</guid>
      <link>http://www.leastprivilege.com/WIFWorkshop.aspx</link>
      <pubDate>Fri, 05 Mar 2010 12:28:46 GMT</pubDate>
      <description>&lt;p&gt;
Mein geschätzter Kollege &lt;a href="http://blogs.msdn.com/vbertocci"&gt;Vittorio&lt;/a&gt; Bertocci
führt einen 2-Tägigen &lt;a href="http://blogs.msdn.com/dparys/archive/2010/03/05/interesse-an-windows-identity-foundation.aspx"&gt;Workshop&lt;/a&gt; zum
Thema Windows Identity Foundation in München durch. Das ist bestimmt eine gute Gelegenheit
sich mal abseits vom Projektalltag mit dem Thema genauer zu beschäftigen.
&lt;/p&gt;
&lt;p&gt;
Wenn danach alle (un)Klarheiten beseitigt sind, und Sie weiterführenden Informationen
oder Unterstützung zur Implementierung von Claims in der Praxis benötigen – einfach
Email an mich (dominick.baier (_at_) thinktecture.com). Ich helfe gerne weiter. Viel
Spaß!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=54bb6d22-766a-40c4-9ecc-e084656a035f" /&gt;</description>
      <category>IdentityModel</category>
    </item>
    <item>
      <trackback:ping>http://www.leastprivilege.com/Trackback.aspx?guid=fbf249d1-5e49-4a79-8508-b268bdbbe2ba</trackback:ping>
      <pingback:server>http://www.leastprivilege.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.leastprivilege.com/PermaLink.aspx?guid=fbf249d1-5e49-4a79-8508-b268bdbbe2ba</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
So – zurück und (wichtiger) erholt von der BASTA. Muss sagen – es war mal wieder sehr
nett – großes Lob an Veranstalter und Teilnehmer. Hat Spaß gemacht!
</p>
        <p>
Am meisten war ich über das große Interesse an WIF überrascht. Ein voller Raum für
nen Security Talk – und das direkt nach dem Essen ;)
</p>
        <p>
          <a href="http://www.aspnetzone.de/blogs/juergengutsch/archive/2010/02/24/basta-tag-3-windows-identity-foundation.aspx">Hier</a> habe
ich eine sehr gute Zusammenfassung des Talks gefunden – die Punkte, die mir am Herzen
lagen, scheinen angekommen zu sein! Das freut mich!
</p>
        <p>
Ich habe es schon während des Vortrags erwähnt – WIF ist sowohl ein neuer API als
auch ein neues Paradigma. Dafür reichen 75min einfach nicht aus. Wer Fragen dazu hat,
oder Unterstützung braucht – einfach Mail an mich.
</p>
        <p>
Bis zum nächsten Mal!
</p>
        <img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=fbf249d1-5e49-4a79-8508-b268bdbbe2ba" />
      </body>
      <title>Zur&amp;uuml;ck von der BASTA</title>
      <guid isPermaLink="false">http://www.leastprivilege.com/PermaLink.aspx?guid=fbf249d1-5e49-4a79-8508-b268bdbbe2ba</guid>
      <link>http://www.leastprivilege.com/ZuruumlckVonDerBASTA.aspx</link>
      <pubDate>Mon, 01 Mar 2010 08:06:39 GMT</pubDate>
      <description>&lt;p&gt;
So – zurück und (wichtiger) erholt von der BASTA. Muss sagen – es war mal wieder sehr
nett – großes Lob an Veranstalter und Teilnehmer. Hat Spaß gemacht!
&lt;/p&gt;
&lt;p&gt;
Am meisten war ich über das große Interesse an WIF überrascht. Ein voller Raum für
nen Security Talk – und das direkt nach dem Essen ;)
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.aspnetzone.de/blogs/juergengutsch/archive/2010/02/24/basta-tag-3-windows-identity-foundation.aspx"&gt;Hier&lt;/a&gt; habe
ich eine sehr gute Zusammenfassung des Talks gefunden – die Punkte, die mir am Herzen
lagen, scheinen angekommen zu sein! Das freut mich!
&lt;/p&gt;
&lt;p&gt;
Ich habe es schon während des Vortrags erwähnt – WIF ist sowohl ein neuer API als
auch ein neues Paradigma. Dafür reichen 75min einfach nicht aus. Wer Fragen dazu hat,
oder Unterstützung braucht – einfach Mail an mich.
&lt;/p&gt;
&lt;p&gt;
Bis zum nächsten Mal!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=fbf249d1-5e49-4a79-8508-b268bdbbe2ba" /&gt;</description>
      <category>Conferences</category>
    </item>
    <item>
      <trackback:ping>http://www.leastprivilege.com/Trackback.aspx?guid=508c317c-4896-486f-9b52-4680bc121dce</trackback:ping>
      <pingback:server>http://www.leastprivilege.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.leastprivilege.com/PermaLink.aspx?guid=508c317c-4896-486f-9b52-4680bc121dce</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
The v1 beta of <a href="http://startersts.codeplex.com/">StarterSTS</a> has an updated
relying party configuration section. This allows to “plugin” the STS into ADFS2 or
Sharepoint as a claims provider.
</p>
        <p>
Here’s a quick walkthrough for ADFS2:
</p>
        <p>
          <strong>Register StarterSTS as claims provider in ADFS</strong>
          <br />
This is really easy. Simply go to the ADFS2 configuration console and add a new claims
provider. Then point the wizard to the StarterSTS WS-Federation metadata file (either
by URL or using a file path). Afterwards you have to add some claim rules – to get
started you could add a pass-through rule for the name claim.
</p>
        <p>
You will also need to export the ADFS2 certificate that is used for token decryption.
</p>
        <p>
          <strong>Registering ADFS2 as a relying party in StarterSTS</strong>
          <br />
The next step is to register ADFS2 in StarterSTS. This is done by modifying the <em>relyingParty.config</em> file
(in the configuration sub folder). You need three things for that – the ADFS issuer
URI, the physical address of the ADFS2 sign-in page and the ADFS2 token encryption
certificate. The certificate could be either imported into the certificate store or
you copy it to ~/App_Data/certificates.
</p>
        <p>
The config entry looks similar to this:
</p>
        <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal">
          <span style="font-family: consolas; color: blue; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US">&lt;</span>
          <span style="font-family: consolas; color: #a31515; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US">add</span>
          <span style="font-family: consolas; color: blue; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US">
          </span>
          <span style="font-family: consolas; color: red; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US">realm</span>
          <span style="font-family: consolas; color: blue; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US">=</span>
          <span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US">"<span style="color: blue">http://&lt;adfsname&gt;/adfs/services/trust</span>"<br /></span>
          <span style="font-family: consolas; color: blue; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US">
            <span style="mso-spacerun: yes">     </span>
          </span>
          <span style="font-family: consolas; color: red; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US">replyTo</span>
          <span style="font-family: consolas; color: blue; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US">=</span>
          <span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US">"<span style="color: blue">https://&lt;adfsname&gt;/adfs/ls/</span>"<span style="color: blue">&gt;<br /></span></span>
          <span style="font-family: consolas; color: blue; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US">
            <span style="mso-spacerun: yes">  </span>&lt;</span>
          <span style="font-family: consolas; color: #a31515; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US">certificate</span>
          <span style="font-family: consolas; color: blue; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US">
          </span>
          <span style="font-family: consolas; color: red; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US">filename</span>
          <span style="font-family: consolas; color: blue; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US">=</span>
          <span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US">"<span style="color: blue">tokendecryption.cer</span>"<span style="color: blue"> /&gt;<br /></span></span>
          <span style="font-family: consolas; color: blue; mso-no-proof: yes">&lt;/</span>
          <span style="font-family: consolas; color: #a31515; mso-no-proof: yes">add</span>
          <span style="font-family: consolas; color: blue; mso-no-proof: yes">&gt;</span>
        </p>
        <p>
HTH
</p>
        <img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=508c317c-4896-486f-9b52-4680bc121dce" />
      </body>
      <title>Adding StarterSTS as a Claims Provider for ADFS2</title>
      <guid isPermaLink="false">http://www.leastprivilege.com/PermaLink.aspx?guid=508c317c-4896-486f-9b52-4680bc121dce</guid>
      <link>http://www.leastprivilege.com/AddingStarterSTSAsAClaimsProviderForADFS2.aspx</link>
      <pubDate>Mon, 01 Mar 2010 07:30:14 GMT</pubDate>
      <description>&lt;p&gt;
The v1 beta of &lt;a href="http://startersts.codeplex.com/"&gt;StarterSTS&lt;/a&gt; has an updated
relying party configuration section. This allows to “plugin” the STS into ADFS2 or
Sharepoint as a claims provider.
&lt;/p&gt;
&lt;p&gt;
Here’s a quick walkthrough for ADFS2:
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Register StarterSTS as claims provider in ADFS&lt;/strong&gt;
&lt;br&gt;
This is really easy. Simply go to the ADFS2 configuration console and add a new claims
provider. Then point the wizard to the StarterSTS WS-Federation metadata file (either
by URL or using a file path). Afterwards you have to add some claim rules – to get
started you could add a pass-through rule for the name claim.
&lt;/p&gt;
&lt;p&gt;
You will also need to export the ADFS2 certificate that is used for token decryption.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Registering ADFS2 as a relying party in StarterSTS&lt;/strong&gt;
&lt;br&gt;
The next step is to register ADFS2 in StarterSTS. This is done by modifying the &lt;em&gt;relyingParty.config&lt;/em&gt; file
(in the configuration sub folder). You need three things for that – the ADFS issuer
URI, the physical address of the ADFS2 sign-in page and the ADFS2 token encryption
certificate. The certificate could be either imported into the certificate store or
you copy it to ~/App_Data/certificates.
&lt;/p&gt;
&lt;p&gt;
The config entry looks similar to this:
&lt;/p&gt;
&lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;
&lt;span style="font-family: consolas; color: blue; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: consolas; color: #a31515; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;add&lt;/span&gt;&lt;span style="font-family: consolas; color: blue; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt; &lt;/span&gt;&lt;span style="font-family: consolas; color: red; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;realm&lt;/span&gt;&lt;span style="font-family: consolas; color: blue; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;=&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;"&lt;span style="color: blue"&gt;http://&amp;lt;adfsname&amp;gt;/adfs/services/trust&lt;/span&gt;"&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; color: blue; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; color: red; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;replyTo&lt;/span&gt;&lt;span style="font-family: consolas; color: blue; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;=&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;"&lt;span style="color: blue"&gt;https://&amp;lt;adfsname&amp;gt;/adfs/ls/&lt;/span&gt;"&lt;span style="color: blue"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; color: blue; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: consolas; color: #a31515; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;certificate&lt;/span&gt;&lt;span style="font-family: consolas; color: blue; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt; &lt;/span&gt;&lt;span style="font-family: consolas; color: red; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;filename&lt;/span&gt;&lt;span style="font-family: consolas; color: blue; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;=&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;"&lt;span style="color: blue"&gt;tokendecryption.cer&lt;/span&gt;"&lt;span style="color: blue"&gt; /&amp;gt;&lt;br&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; color: blue; mso-no-proof: yes"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-family: consolas; color: #a31515; mso-no-proof: yes"&gt;add&lt;/span&gt;&lt;span style="font-family: consolas; color: blue; mso-no-proof: yes"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
HTH
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=508c317c-4896-486f-9b52-4680bc121dce" /&gt;</description>
      <category>IdentityModel</category>
    </item>
    <item>
      <trackback:ping>http://www.leastprivilege.com/Trackback.aspx?guid=fb85fdf8-59ed-4feb-a289-cc3aea31b2d5</trackback:ping>
      <pingback:server>http://www.leastprivilege.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.leastprivilege.com/PermaLink.aspx?guid=fb85fdf8-59ed-4feb-a289-cc3aea31b2d5</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <title>WCF, WIF and Load Balancing (and a bit of Azure)</title>
      <guid isPermaLink="false">http://www.leastprivilege.com/PermaLink.aspx?guid=fb85fdf8-59ed-4feb-a289-cc3aea31b2d5</guid>
      <link>http://www.leastprivilege.com/WCFWIFAndLoadBalancingAndABitOfAzure.aspx</link>
      <pubDate>Fri, 19 Feb 2010 07:36:26 GMT</pubDate>
      <description>&lt;p&gt;
Pablo wrote a &lt;a href="http://weblogs.asp.net/cibrax/archive/2010/02/17/the-system-cannot-find-the-file-specified-error-in-the-wif-fam-module.aspx"&gt;post&lt;/a&gt; yesterday
giving some background information on how session tokens are protected in WIF – here
some additional info for WCF:
&lt;/p&gt;
&lt;p&gt;
The ws* bindings in WCF establish a security session by default (via WS-SecureConversation).
This has some implications, e.g.
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
You end up with a stateful service – or more important – with a stateful programming
model. You have all the typical session “problems” like faulted sessions, timeout,
retries etc… 
&lt;li&gt;
By default SecureConversation only transmits a session identifier (like a ASP.NET
session cookie) – the actual session is stored in-memory at the server. Not good for
load balancing.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
When you want to use WCF in a load balanced environment (e.g Azure) – you have to
change the default behavior – you basically have two options:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Turn off SecureConversation all together. This has the advantage of being stateless
(at least in that part of the communication). But this also means, that the bootstrap
(SAML) token will get parsed on every request – this includes invoking the &lt;em&gt;ClaimsAuthenticationManager&lt;/em&gt;.
This might have performance implications – but depends on your scenario. 
&lt;li&gt;
Force WCF into “cookie mode”. This means that the complete &lt;em&gt;IClaimsPrincipal&lt;/em&gt; (after &lt;em&gt;ClaimsAuthenticationManager&lt;/em&gt; has
run) gets serialized and round-tripped in the SOAP header.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;strong&gt;Turning off SecureConversation&lt;/strong&gt;
&lt;br&gt;
Unfortunately WCF 3.5 does not directly allow that on the standard federation bindings.
You would need to create a custom binding that uses an authentication mode of &lt;em&gt;IssuedTokenOverTransport&lt;/em&gt; (for
mixed mode) or &lt;em&gt;IssuedTokenForCertificate&lt;/em&gt; (for message security).
&lt;/p&gt;
&lt;p&gt;
In .NET 4 you can simply set &lt;em&gt;establishSecurityContext&lt;/em&gt; to false on the standard
ws-fed binding.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Cookie Mode&lt;/strong&gt;
&lt;br&gt;
Forcing WCF into cookie mode requires a custom binding. The “trick” here is to set &lt;em&gt;requireSecurityContextCancellation&lt;/em&gt; to
false – which is just a fancy name for “serialize the context into the message”. Here’s
the binding I am using (mixed mode security):
&lt;/p&gt;
&lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;
&lt;span style="font-family: consolas; color: blue; mso-ansi-language: en-us" lang="EN-US"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: consolas; color: #a31515; mso-ansi-language: en-us" lang="EN-US"&gt;customBinding&lt;/span&gt;&lt;span style="font-family: consolas; color: blue; mso-ansi-language: en-us" lang="EN-US"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; color: blue; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: consolas; color: #a31515; mso-ansi-language: en-us" lang="EN-US"&gt;binding&lt;/span&gt;&lt;span style="font-family: consolas; color: blue; mso-ansi-language: en-us" lang="EN-US"&gt; &lt;/span&gt;&lt;span style="font-family: consolas; color: red; mso-ansi-language: en-us" lang="EN-US"&gt;name&lt;/span&gt;&lt;span style="font-family: consolas; color: blue; mso-ansi-language: en-us" lang="EN-US"&gt;=&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us" lang="EN-US"&gt;"&lt;span style="color: blue"&gt;federation_cookie&lt;/span&gt;"&lt;span style="color: blue"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; color: blue; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: consolas; color: #a31515; mso-ansi-language: en-us" lang="EN-US"&gt;security&lt;/span&gt;&lt;span style="font-family: consolas; color: blue; mso-ansi-language: en-us" lang="EN-US"&gt; &lt;/span&gt;&lt;span style="font-family: consolas; color: red; mso-ansi-language: en-us" lang="EN-US"&gt;authenticationMode&lt;/span&gt;&lt;span style="font-family: consolas; color: blue; mso-ansi-language: en-us" lang="EN-US"&gt;=&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us" lang="EN-US"&gt;"&lt;span style="color: blue"&gt;SecureConversation&lt;/span&gt;"&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; color: blue; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&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; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; color: red; mso-ansi-language: en-us" lang="EN-US"&gt;messageSecurityVersion&lt;/span&gt;&lt;span style="font-family: consolas; color: blue; mso-ansi-language: en-us" lang="EN-US"&gt;=&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us" lang="EN-US"&gt;"&lt;span style="color: blue"&gt;WSSecurity11&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
WSTrust13&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
WSSecureConversation13&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
WSSecurityPolicy12&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
BasicSecurityProfile10&lt;/span&gt;"&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; color: blue; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&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; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; color: red; mso-ansi-language: en-us" lang="EN-US"&gt;requireSecurityContextCancellation&lt;/span&gt;&lt;span style="font-family: consolas; color: blue; mso-ansi-language: en-us" lang="EN-US"&gt;=&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us" lang="EN-US"&gt;"&lt;span style="color: blue"&gt;false&lt;/span&gt;"&lt;span style="color: blue"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; color: blue; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: consolas; color: #a31515; mso-ansi-language: en-us" lang="EN-US"&gt;secureConversationBootstrap&lt;/span&gt;&lt;span style="font-family: consolas; color: blue; mso-ansi-language: en-us" lang="EN-US"&gt; &lt;/span&gt;&lt;span style="font-family: consolas; color: red; mso-ansi-language: en-us" lang="EN-US"&gt;authenticationMode&lt;/span&gt;&lt;span style="font-family: consolas; color: blue; mso-ansi-language: en-us" lang="EN-US"&gt;=&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us" lang="EN-US"&gt;"&lt;span style="color: blue"&gt;IssuedTokenOverTransport&lt;/span&gt;"&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; color: blue; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; color: red; mso-ansi-language: en-us" lang="EN-US"&gt;messageSecurityVersion&lt;/span&gt;&lt;span style="font-family: consolas; color: blue; mso-ansi-language: en-us" lang="EN-US"&gt;=&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us" lang="EN-US"&gt;"&lt;span style="color: blue"&gt;WSSecurity11&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
WSTrust13&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
WSSecureConversation13&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
WSSecurityPolicy12&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
BasicSecurityProfile10&lt;/span&gt;"&lt;span style="color: blue"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; color: blue; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: consolas; color: #a31515; mso-ansi-language: en-us" lang="EN-US"&gt;issuedTokenParameters&lt;/span&gt;&lt;span style="font-family: consolas; color: blue; mso-ansi-language: en-us" lang="EN-US"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; color: blue; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: consolas; color: #a31515; mso-ansi-language: en-us" lang="EN-US"&gt;issuerMetadata&lt;/span&gt;&lt;span style="font-family: consolas; color: blue; mso-ansi-language: en-us" lang="EN-US"&gt; &lt;/span&gt;&lt;span style="font-family: consolas; color: red; mso-ansi-language: en-us" lang="EN-US"&gt;address&lt;/span&gt;&lt;span style="font-family: consolas; color: blue; mso-ansi-language: en-us" lang="EN-US"&gt;="&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;span style="color: blue"&gt;https://…"&lt;/span&gt;&lt;span style="color: blue"&gt; /&amp;gt;&lt;br&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; color: blue; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-family: consolas; color: #a31515; mso-ansi-language: en-us" lang="EN-US"&gt;issuedTokenParameters&lt;/span&gt;&lt;span style="font-family: consolas; color: blue; mso-ansi-language: en-us" lang="EN-US"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; color: blue; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-family: consolas; color: #a31515; mso-ansi-language: en-us" lang="EN-US"&gt;secureConversationBootstrap&lt;/span&gt;&lt;span style="font-family: consolas; color: blue; mso-ansi-language: en-us" lang="EN-US"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; color: blue; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-family: consolas; color: #a31515; mso-ansi-language: en-us" lang="EN-US"&gt;security&lt;/span&gt;&lt;span style="font-family: consolas; color: blue; mso-ansi-language: en-us" lang="EN-US"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; color: blue; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&lt;br&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; color: blue; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: consolas; color: #a31515; mso-ansi-language: en-us" lang="EN-US"&gt;textMessageEncoding&lt;/span&gt;&lt;span style="font-family: consolas; color: blue; mso-ansi-language: en-us" lang="EN-US"&gt; /&amp;gt;&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; color: blue; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: consolas; color: #a31515; mso-ansi-language: en-us" lang="EN-US"&gt;httpsTransport&lt;/span&gt;&lt;span style="font-family: consolas; color: blue; mso-ansi-language: en-us" lang="EN-US"&gt; /&amp;gt;&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; color: blue; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-family: consolas; color: #a31515"&gt;binding&lt;/span&gt;&lt;span style="font-family: consolas; color: blue"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-family: consolas; color: #a31515"&gt;customBinding&lt;/span&gt;&lt;span style="font-family: consolas; color: blue"&gt;&lt;?xml:namespace prefix = o /&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
As Pablo points out in his &lt;a href="http://weblogs.asp.net/cibrax/archive/2010/02/17/the-system-cannot-find-the-file-specified-error-in-the-wif-fam-module.aspx"&gt;post&lt;/a&gt;,
the session cookie must be protected somehow. The standard WIF behavior is to the
DPAPI user key. This key cannot be easily shared between nodes in a cluster (unless
the nodes are all domain members and roaming profiles are activated). Another more
explicit (and practical) option is to use an RSA key. Most typically you would feed
your SSL certificate or the certificate used to decrypt incoming tokens into the following
session token handler: 
&lt;/p&gt;
&lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;
&lt;span style="font-family: consolas; color: blue; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;public&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt; &lt;span style="color: blue"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af"&gt;WebFarmSessionSecurityTokenHandler&lt;/span&gt; : &lt;span style="color: #2b91af"&gt;SessionSecurityTokenHandler&lt;br&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;{&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt; WebFarmSessionSecurityTokenHandler(&lt;span style="color: #2b91af"&gt;X509Certificate2&lt;/span&gt; protectionCertificate)&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;: &lt;span style="color: blue"&gt;base&lt;/span&gt;(CreateRsaTransforms(protectionCertificate))&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{
}&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;br&gt;
&lt;/o:p&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;private&lt;/span&gt; &lt;span style="color: blue"&gt;static&lt;/span&gt; &lt;span style="color: #2b91af"&gt;ReadOnlyCollection&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;CookieTransform&lt;/span&gt;&amp;gt;
CreateRsaTransforms&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (&lt;span style="color: #2b91af"&gt;X509Certificate2&lt;/span&gt; protectionCertificate)&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;var&lt;/span&gt; transforms
= &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;CookieTransform&lt;/span&gt;&amp;gt;() 
&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&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; &lt;/span&gt;{ 
&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&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;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;DeflateCookieTransform&lt;/span&gt;(), 
&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&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; &lt;/span&gt;&lt;span style="mso-spacerun: yes"&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; &lt;/span&gt;&lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;RsaEncryptionCookieTransform&lt;/span&gt;(protectionCertificate),&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&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;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;RsaSignatureCookieTransform&lt;/span&gt;(protectionCertificate),&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&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; &lt;/span&gt;};&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;br&gt;
&lt;/o:p&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;return&lt;/span&gt; transforms.AsReadOnly();&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-no-proof: yes"&gt;}&lt;br&gt;
&lt;/span&gt;&lt;span style="font-family: consolas; mso-no-proof: yes"&gt;}&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
One way of wiring up the above handler would be a service host factory for the WIF
enabled WCF service. If you want to put a little more work in it you can also make
the handler configuration friendly (see &lt;a href="http://www.leastprivilege.com/WIFConfigurationNdashPart3Extensibility.aspx"&gt;here&lt;/a&gt;).
&lt;/p&gt;
&lt;p&gt;
In general I’d recommend watching Hervey’s excellent &lt;a href="http://microsoftpdc.com/Sessions/SVC17"&gt;talk&lt;/a&gt; from
PDC09 about WIF in load balanced environments (e.g. Azure).
&lt;/p&gt;
&lt;p&gt;
HTH
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=fb85fdf8-59ed-4feb-a289-cc3aea31b2d5" /&gt;</description>
      <category>IdentityModel</category>
    </item>
  </channel>
</rss>