<?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>Thu, 02 Feb 2012 07:47:52 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=44dbdcdd-3f5c-4d45-aba3-b429d09a0c00</trackback:ping>
      <pingback:server>http://www.leastprivilege.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.leastprivilege.com/PermaLink.aspx?guid=44dbdcdd-3f5c-4d45-aba3-b429d09a0c00</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
The scenario described in my <a href="http://www.leastprivilege.com/MixingFormsAndTokenAuthenticationInASingleASPNETApplication.aspx" target="_blank">last</a> post
works because of the design around HTTP modules in ASP.NET. Authentication related
modules (like Forms authentication and WIF WS-Fed/Sessions) typically subscribe to
three events in the pipeline – <em>AuthenticateRequest/PostAuthenticateRequest</em> for
pre-processing and <em>EndRequest</em> for post-processing (like making redirects
to a login page).
</p>
        <p>
In the pre-processing stage it is the modules’ job to determine the identity of the
client based on incoming HTTP details (like a header, cookie, form post) and set <em>HttpContext.User</em> and <em>Thread.CurrentPrincipal</em>.
The actual page (in the <em>ExecuteHandler</em> event) “sees” the identity that the
last module has set.
</p>
        <p>
So in our case there are three modules in effect:
</p>
        <ul>
          <li>
FormsAuthenticationModule (AuthenticateRequest, EndRequest) 
</li>
          <li>
WSFederationAuthenticationModule (AuthenticateRequest, PostAuthenticateRequest, EndRequest) 
</li>
          <li>
SessionAuthenticationModule (AuthenticateRequest, PostAuthenticateRequest)</li>
        </ul>
        <p>
So let’s have a look at the different scenario we have when mixing Forms auth and
WS-Federation.
</p>
        <p>
          <strong>Anoymous request to unprotected resource<br /></strong>This is the easiest case. Since there is no WIF session cookie or a FormsAuth
cookie, these modules do nothing. The WSFed module creates an anonymous <em>ClaimsPrincipal</em> and
calls the registered <em>ClaimsAuthenticationManager</em> (if any) to transform it.
The result (by default an anonymous <em>ClaimsPrincipal</em>) gets set.
</p>
        <p>
          <br />
          <img src="http://www.leastprivilege.com/content/binary/formsAuthWif1.png" />
        </p>
        <p>
          <strong>Anonymous request to FormsAuth protected resource<br /></strong>This is the scenario where an anonymous user tries to access a FormsAuth
protected resource for the first time. The principal is anonymous and before the page
gets rendered, the <em>Authorize</em> attribute kicks in. The attribute determines
that the user needs authentication and therefor sets a 401 status code and ends the
request. Now execution jumps to the EndRequest event, where the FormsAuth module takes
over. The module then converts the 401 to a redirect (302) to the forms login page.
</p>
        <p>
If authentication is successful, the login page sets the FormsAuth cookie.
</p>
        <p>
          <img src="http://www.leastprivilege.com/content/binary/formsAuthWif2.png" />
        </p>
        <p>
 
</p>
        <p>
          <strong>FormsAuth authenticated request to a FormsAuth protected resource<br /></strong>Now a FormsAuth cookie is present, which gets validated by the FormsAuth
module. This cookie gets turned into a <em>GenericPrincipal/FormsIdentity</em> combination.
The WS-Fed module turns the principal into a <em>ClaimsPrincipal</em> and calls the
registered <em>ClaimsAuthenticationManager</em>. The outcome of that gets set on the
context.
</p>
        <p>
          <img src="http://www.leastprivilege.com/content/binary/formsAuthWif3.png" />
        </p>
        <p>
          <strong>Anonymous request to STS protected resource<br /></strong>This time the anonymous user tries to access an STS protected resource (a
controller decorated with the <em>RequireTokenAuthentication</em> attribute). The
attribute determines that the user needs STS authentication by checking the authentication
type on the current principal. If this is not <em>Federation</em>, the redirect to
the STS will be made.
</p>
        <p>
After successful authentication at the STS, the STS posts the token back to the application
(using WS-Federation syntax).
</p>
        <p>
          <img src="http://www.leastprivilege.com/content/binary/formsAuthWif4.png" />
        </p>
        <p>
          <strong>Postback from STS authentication<br /></strong>After the postback, the WS-Fed module finds the token response and validates
the contained token. If successful, the token gets transformed by the <em>ClaimsAuthenticationManager</em>,
and the outcome is a) stored in a session cookie, and b) set on the context.
</p>
        <p>
          <img src="http://www.leastprivilege.com/content/binary/formsAuthWif5.png" />
        </p>
        <p>
          <strong>STS authenticated request to an STS protected resource<br /></strong>This time the WIF Session authentication module kicks in because it can find
the previously issued session cookie. The module re-hydrates the ClaimsPrincipal from
the cookie and sets it.
</p>
        <p>
 
</p>
        <p>
          <img src="http://www.leastprivilege.com/content/binary/formsAuthWif6.png" />
        </p>
        <p>
 
</p>
        <p>
          <strong>FormsAuth and STS authenticated request to a protected resource<br /></strong>This is kind of an odd case – e.g. the user first authenticated using Forms
and after that using the STS. This time the FormsAuth module does its work, and then
afterwards the session module stomps over the context with the session principal.
In other words, the STS identity wins.
</p>
        <p>
 
</p>
        <p>
          <img src="http://www.leastprivilege.com/content/binary/formsAuthWif7.png" />
        </p>
        <p>
          <strong>What about roles?<br /></strong>A common way to set roles in ASP.NET is to use the role manager feature.
There is a corresponding HTTP module for that (<em>RoleManagerModule</em>) that handles <em>PostAuthenticateRequest</em>.
Does this collide with the above combinations?
</p>
        <p>
No it doesn’t! When the WS-Fed module turns existing principals into a <em>ClaimsPrincipal</em> (like
it did with the <em>FormsIdentity</em>), it also checks for <em>RolePrincipal</em> (which
is the principal type created by role manager), and turns the roles in role claims.
Nice!
</p>
        <p>
But as you can see in the last scenario above, this might result in unnecessary work,
so I would rather recommend consolidating all role work (and other claims transformations)
into the <em>ClaimsAuthenticationManager</em>. In there you can check for the authentication
type of the incoming principal and act accordingly.
</p>
        <p>
HTH
</p>
        <img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=44dbdcdd-3f5c-4d45-aba3-b429d09a0c00" />
      </body>
      <title>Mixing Forms and Token Authentication in a single ASP.NET Application (the Details)</title>
      <guid isPermaLink="false">http://www.leastprivilege.com/PermaLink.aspx?guid=44dbdcdd-3f5c-4d45-aba3-b429d09a0c00</guid>
      <link>http://www.leastprivilege.com/MixingFormsAndTokenAuthenticationInASingleASPNETApplicationTheDetails.aspx</link>
      <pubDate>Thu, 02 Feb 2012 07:47:52 GMT</pubDate>
      <description>&lt;p&gt;
The scenario described in my &lt;a href="http://www.leastprivilege.com/MixingFormsAndTokenAuthenticationInASingleASPNETApplication.aspx" target="_blank"&gt;last&lt;/a&gt; post
works because of the design around HTTP modules in ASP.NET. Authentication related
modules (like Forms authentication and WIF WS-Fed/Sessions) typically subscribe to
three events in the pipeline – &lt;em&gt;AuthenticateRequest/PostAuthenticateRequest&lt;/em&gt; for
pre-processing and &lt;em&gt;EndRequest&lt;/em&gt; for post-processing (like making redirects
to a login page).
&lt;/p&gt;
&lt;p&gt;
In the pre-processing stage it is the modules’ job to determine the identity of the
client based on incoming HTTP details (like a header, cookie, form post) and set &lt;em&gt;HttpContext.User&lt;/em&gt; and &lt;em&gt;Thread.CurrentPrincipal&lt;/em&gt;.
The actual page (in the &lt;em&gt;ExecuteHandler&lt;/em&gt; event) “sees” the identity that the
last module has set.
&lt;/p&gt;
&lt;p&gt;
So in our case there are three modules in effect:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
FormsAuthenticationModule (AuthenticateRequest, EndRequest) 
&lt;li&gt;
WSFederationAuthenticationModule (AuthenticateRequest, PostAuthenticateRequest, EndRequest) 
&lt;li&gt;
SessionAuthenticationModule (AuthenticateRequest, PostAuthenticateRequest)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
So let’s have a look at the different scenario we have when mixing Forms auth and
WS-Federation.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Anoymous request to unprotected resource&lt;br&gt;
&lt;/strong&gt;This is the easiest case. Since there is no WIF session cookie or a FormsAuth
cookie, these modules do nothing. The WSFed module creates an anonymous &lt;em&gt;ClaimsPrincipal&lt;/em&gt; and
calls the registered &lt;em&gt;ClaimsAuthenticationManager&lt;/em&gt; (if any) to transform it.
The result (by default an anonymous &lt;em&gt;ClaimsPrincipal&lt;/em&gt;) gets set.
&lt;/p&gt;
&lt;p&gt;
&lt;br&gt;
&lt;img src="http://www.leastprivilege.com/content/binary/formsAuthWif1.png"&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Anonymous request to FormsAuth protected resource&lt;br&gt;
&lt;/strong&gt;This is the scenario where an anonymous user tries to access a FormsAuth
protected resource for the first time. The principal is anonymous and before the page
gets rendered, the &lt;em&gt;Authorize&lt;/em&gt; attribute kicks in. The attribute determines
that the user needs authentication and therefor sets a 401 status code and ends the
request. Now execution jumps to the EndRequest event, where the FormsAuth module takes
over. The module then converts the 401 to a redirect (302) to the forms login page.
&lt;/p&gt;
&lt;p&gt;
If authentication is successful, the login page sets the FormsAuth cookie.
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.leastprivilege.com/content/binary/formsAuthWif2.png"&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;FormsAuth authenticated request to a FormsAuth protected resource&lt;br&gt;
&lt;/strong&gt;Now a FormsAuth cookie is present, which gets validated by the FormsAuth
module. This cookie gets turned into a &lt;em&gt;GenericPrincipal/FormsIdentity&lt;/em&gt; combination.
The WS-Fed module turns the principal into a &lt;em&gt;ClaimsPrincipal&lt;/em&gt; and calls the
registered &lt;em&gt;ClaimsAuthenticationManager&lt;/em&gt;. The outcome of that gets set on the
context.
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.leastprivilege.com/content/binary/formsAuthWif3.png"&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Anonymous request to STS protected resource&lt;br&gt;
&lt;/strong&gt;This time the anonymous user tries to access an STS protected resource (a
controller decorated with the &lt;em&gt;RequireTokenAuthentication&lt;/em&gt; attribute). The
attribute determines that the user needs STS authentication by checking the authentication
type on the current principal. If this is not &lt;em&gt;Federation&lt;/em&gt;, the redirect to
the STS will be made.
&lt;/p&gt;
&lt;p&gt;
After successful authentication at the STS, the STS posts the token back to the application
(using WS-Federation syntax).
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.leastprivilege.com/content/binary/formsAuthWif4.png"&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Postback from STS authentication&lt;br&gt;
&lt;/strong&gt;After the postback, the WS-Fed module finds the token response and validates
the contained token. If successful, the token gets transformed by the &lt;em&gt;ClaimsAuthenticationManager&lt;/em&gt;,
and the outcome is a) stored in a session cookie, and b) set on the context.
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.leastprivilege.com/content/binary/formsAuthWif5.png"&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;STS authenticated request to an STS protected resource&lt;br&gt;
&lt;/strong&gt;This time the WIF Session authentication module kicks in because it can find
the previously issued session cookie. The module re-hydrates the ClaimsPrincipal from
the cookie and sets it.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.leastprivilege.com/content/binary/formsAuthWif6.png"&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;FormsAuth and STS authenticated request to a protected resource&lt;br&gt;
&lt;/strong&gt;This is kind of an odd case – e.g. the user first authenticated using Forms
and after that using the STS. This time the FormsAuth module does its work, and then
afterwards the session module stomps over the context with the session principal.
In other words, the STS identity wins.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.leastprivilege.com/content/binary/formsAuthWif7.png"&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;What about roles?&lt;br&gt;
&lt;/strong&gt;A common way to set roles in ASP.NET is to use the role manager feature.
There is a corresponding HTTP module for that (&lt;em&gt;RoleManagerModule&lt;/em&gt;) that handles &lt;em&gt;PostAuthenticateRequest&lt;/em&gt;.
Does this collide with the above combinations?
&lt;/p&gt;
&lt;p&gt;
No it doesn’t! When the WS-Fed module turns existing principals into a &lt;em&gt;ClaimsPrincipal&lt;/em&gt; (like
it did with the &lt;em&gt;FormsIdentity&lt;/em&gt;), it also checks for &lt;em&gt;RolePrincipal&lt;/em&gt; (which
is the principal type created by role manager), and turns the roles in role claims.
Nice!
&lt;/p&gt;
&lt;p&gt;
But as you can see in the last scenario above, this might result in unnecessary work,
so I would rather recommend consolidating all role work (and other claims transformations)
into the &lt;em&gt;ClaimsAuthenticationManager&lt;/em&gt;. In there you can check for the authentication
type of the incoming principal and act accordingly.
&lt;/p&gt;
&lt;p&gt;
HTH
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=44dbdcdd-3f5c-4d45-aba3-b429d09a0c00" /&gt;</description>
      <category>IdentityModel</category>
    </item>
    <item>
      <trackback:ping>http://www.leastprivilege.com/Trackback.aspx?guid=b9eea158-2df2-4db9-a7cd-9d0d61e163bc</trackback:ping>
      <pingback:server>http://www.leastprivilege.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.leastprivilege.com/PermaLink.aspx?guid=b9eea158-2df2-4db9-a7cd-9d0d61e163bc</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I recently had the task to find out how to mix ASP.NET Forms Authentication with WIF’s
WS-Federation. The FormsAuth app did already exist, and a new sub-directory of this
application should use ADFS for authentication. Minimum changes to the existing application
code would be a plus ;)
</p>
        <p>
Since the application is using ASP.NET MVC this was quite easy to accomplish – WebForms
would be a little harder, but still doable. I will discuss the MVC solution here.
</p>
        <p>
To solve this problem, I made the following changes to the standard MVC internet application
template:
</p>
        <ul>
          <li>
Added WIF’s <em>WSFederationAuthenticationModule</em> and <em>SessionAuthenticationModule</em> to
the modules section. 
</li>
          <li>
Add a WIF configuration section to configure the trust with ADFS. 
</li>
          <li>
Added a new authorization attribute. This attribute will go on controller that demand
ADFS (or STS in general) authentication.</li>
        </ul>
        <p>
The attribute logic is quite simple – it checks for authenticated users – and additionally
that the authentication type is set to <em>Federation</em>. If that’s the case all
is good, if not, the redirect to the STS will be triggered.
</p>
        <pre style="line-height: normal; font-family: ; background: white; color: ">
          <font face="Consolas">
            <span style="color: ">
              <font color="#0000ff">
                <font style="font-size: 11.3pt">public</font>
              </font>
            </span>
            <font style="font-size: 11.3pt">
              <font color="#000000"> </font>
              <span style="color: ">
                <font color="#0000ff">class</font>
              </span>
              <font color="#000000"> </font>
              <span style="color: ">
                <font color="#2b91af">RequireTokenAuthenticationAttribute</font>
              </span>
              <font color="#000000"> : </font>
              <span style="color: ">
                <font color="#2b91af">AuthorizeAttribute<br /></font>
              </span>
            </font>
          </font>
          <font style="font-size: 11.3pt">
            <font face="Consolas">
              <font color="#000000">{<br />
    </font>
              <span style="color: ">
                <font color="#0000ff">protected</font>
              </span>
              <font color="#000000"> </font>
              <span style="color: ">
                <font color="#0000ff">override</font>
              </span>
              <font color="#000000"> </font>
              <span style="color: ">
                <font color="#0000ff">bool</font>
              </span>
              <font color="#000000"> AuthorizeCore(</font>
              <span style="color: ">
                <font color="#2b91af">HttpContextBase</font>
              </span>
            </font>
            <font face="Consolas">
              <font color="#000000"> httpContext)<br />
    {<br />
        </font>
              <span style="color: ">
                <font color="#0000ff">if</font>
              </span>
            </font>
            <font face="Consolas">
              <font color="#000000"> (httpContext.User.Identity.IsAuthenticated
&amp;&amp;<br />
            httpContext.User.Identity.AuthenticationType.Equals(<br />
WIF.</font>
              <span style="color: ">
                <font color="#2b91af">AuthenticationTypes</font>
              </span>
              <font color="#000000">.Federation, </font>
              <span style="color: ">
                <font color="#2b91af">StringComparison</font>
              </span>
            </font>
            <font face="Consolas">
              <font color="#000000">.OrdinalIgnoreCase))<br />
        {<br />
            </font>
              <span style="color: ">
                <font color="#0000ff">return</font>
              </span>
              <font color="#000000"> </font>
              <span style="color: ">
                <font color="#0000ff">true</font>
              </span>
            </font>
            <font face="Consolas">
              <font color="#000000">;<br />
        }<br />
            
<br />
        </font>
              <span style="color: ">
                <font color="#0000ff">return</font>
              </span>
              <font color="#000000"> </font>
              <span style="color: ">
                <font color="#0000ff">false</font>
              </span>
            </font>
            <font face="Consolas">
              <font color="#000000">;<br />
    }<br /><br />
    </font>
              <span style="color: ">
                <font color="#0000ff">protected</font>
              </span>
              <font color="#000000"> </font>
              <span style="color: ">
                <font color="#0000ff">override</font>
              </span>
              <font color="#000000"> </font>
              <span style="color: ">
                <font color="#0000ff">void</font>
              </span>
              <font color="#000000"> HandleUnauthorizedRequest(</font>
              <span style="color: ">
                <font color="#2b91af">AuthorizationContext</font>
              </span>
            </font>
            <font face="Consolas">
              <font color="#000000"> filterContext)<br />
    {            
<br />
        </font>
              <span style="color: ">
                <font color="#008000">//
do the redirect to the STS<br /></font>
              </span>
              <font color="#000000">        </font>
              <span style="color: ">
                <font color="#0000ff">var</font>
              </span>
              <font color="#000000"> message
= </font>
              <span style="color: ">
                <font color="#2b91af">FederatedAuthentication</font>
              </span>
              <font color="#000000">.WSFederationAuthenticationModule.CreateSignInRequest(<br /></font>
              <span style="color: ">
                <font color="#a31515">"passive"</font>
              </span>
              <font color="#000000">, 
<br />
filterContext.HttpContext.Request.RawUrl, 
<br /></font>
              <span style="color: ">
                <font color="#0000ff">false</font>
              </span>
            </font>
          </font>
          <font face="Consolas">
            <font style="font-size: 11.3pt">
              <font color="#000000">);<br />
        filterContext.Result = </font>
              <span style="color: ">
                <font color="#0000ff">new</font>
              </span>
              <font color="#000000"> </font>
              <span style="color: ">
                <font color="#2b91af">RedirectResult</font>
              </span>
              <font color="#000000">(message.RequestUrl);<br />
    }<br />
}</font>
            </font>
          </font>
        </pre>
        <p>
That’s it ;) If you want to know why this works (and a possible gotcha) – read my
next post.
</p>
        <img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=b9eea158-2df2-4db9-a7cd-9d0d61e163bc" />
      </body>
      <title>Mixing Forms and Token Authentication in a single ASP.NET Application</title>
      <guid isPermaLink="false">http://www.leastprivilege.com/PermaLink.aspx?guid=b9eea158-2df2-4db9-a7cd-9d0d61e163bc</guid>
      <link>http://www.leastprivilege.com/MixingFormsAndTokenAuthenticationInASingleASPNETApplication.aspx</link>
      <pubDate>Thu, 02 Feb 2012 05:08:38 GMT</pubDate>
      <description>&lt;p&gt;
I recently had the task to find out how to mix ASP.NET Forms Authentication with WIF’s
WS-Federation. The FormsAuth app did already exist, and a new sub-directory of this
application should use ADFS for authentication. Minimum changes to the existing application
code would be a plus ;)
&lt;/p&gt;
&lt;p&gt;
Since the application is using ASP.NET MVC this was quite easy to accomplish – WebForms
would be a little harder, but still doable. I will discuss the MVC solution here.
&lt;/p&gt;
&lt;p&gt;
To solve this problem, I made the following changes to the standard MVC internet application
template:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Added WIF’s &lt;em&gt;WSFederationAuthenticationModule&lt;/em&gt; and &lt;em&gt;SessionAuthenticationModule&lt;/em&gt; to
the modules section. 
&lt;li&gt;
Add a WIF configuration section to configure the trust with ADFS. 
&lt;li&gt;
Added a new authorization attribute. This attribute will go on controller that demand
ADFS (or STS in general) authentication.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
The attribute logic is quite simple – it checks for authenticated users – and additionally
that the authentication type is set to &lt;em&gt;Federation&lt;/em&gt;. If that’s the case all
is good, if not, the redirect to the STS will be triggered.
&lt;/p&gt;
&lt;pre style="line-height: normal; font-family: ; background: white; color: "&gt;&lt;font face="Consolas"&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size: 11.3pt"&gt;public&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size: 11.3pt"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;class&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;nbsp;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;RequireTokenAuthenticationAttribute&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; : &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;AuthorizeAttribute&lt;br&gt;
&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font style="font-size: 11.3pt"&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;protected&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;nbsp;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;override&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;nbsp;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;bool&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; AuthorizeCore(&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;HttpContextBase&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt; httpContext)&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;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt; (httpContext.User.Identity.IsAuthenticated
&amp;amp;&amp;amp;&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; httpContext.User.Identity.AuthenticationType.Equals(&lt;br&gt;
WIF.&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;AuthenticationTypes&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;.Federation, &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;StringComparison&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;.OrdinalIgnoreCase))&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&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;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;nbsp;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;true&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&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;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;nbsp;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;false&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;protected&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;nbsp;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;override&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;nbsp;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; HandleUnauthorizedRequest(&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;AuthorizationContext&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt; filterContext)&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; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#008000"&gt;//
do the redirect to the STS&lt;br&gt;
&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; message
= &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;FederatedAuthentication&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;.WSFederationAuthenticationModule.CreateSignInRequest(&lt;br&gt;
&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;"passive"&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;, 
&lt;br&gt;
filterContext.HttpContext.Request.RawUrl, 
&lt;br&gt;
&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;false&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 11.3pt"&gt;&lt;font color="#000000"&gt;);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; filterContext.Result = &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;nbsp;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;RedirectResult&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;(message.RequestUrl);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;
}&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;
&lt;p&gt;
That’s it ;) If you want to know why this works (and a possible gotcha) – read my
next post.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=b9eea158-2df2-4db9-a7cd-9d0d61e163bc" /&gt;</description>
      <category>IdentityModel</category>
    </item>
    <item>
      <trackback:ping>http://www.leastprivilege.com/Trackback.aspx?guid=801bbb3f-65a7-4f5d-9e02-38a0515d63a6</trackback:ping>
      <pingback:server>http://www.leastprivilege.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.leastprivilege.com/PermaLink.aspx?guid=801bbb3f-65a7-4f5d-9e02-38a0515d63a6</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I found some time over the holidays to finalize the Azure edition of IdentityServer.
</p>
        <p>
          <a href="http://identityserver.codeplex.com/releases/view/81206">http://identityserver.codeplex.com/releases/view/81206</a>
        </p>
        <p>
The biggest difference to the on-premise version (and earlier Azure betas) is, that
by default IdSrv now uses Azure Storage for all data storage (configuration &amp;
user data). This means that there is no need anymore for SQL Azure (which is still
supported out of the box – just not the default anymore).
</p>
        <p>
The download includes a readme file with setup instructions. In a nutshell:
</p>
        <ul>
          <li>
Create a new hosted service and upload your certificates</li>
          <li>
Modify the service configuration file in the download to your needs (signing cert,
connection strings to storage…)</li>
          <li>
Deploy the package via the portal or other tools</li>
          <li>
Use the new Powershell scripts to add users</li>
        </ul>
        <p>
If you encounter any problem, please give me feedback.
</p>
        <img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=801bbb3f-65a7-4f5d-9e02-38a0515d63a6" />
      </body>
      <title>Thinktecture IdentityServer Azure Edition RC</title>
      <guid isPermaLink="false">http://www.leastprivilege.com/PermaLink.aspx?guid=801bbb3f-65a7-4f5d-9e02-38a0515d63a6</guid>
      <link>http://www.leastprivilege.com/ThinktectureIdentityServerAzureEditionRC.aspx</link>
      <pubDate>Fri, 27 Jan 2012 09:20:37 GMT</pubDate>
      <description>&lt;p&gt;
I found some time over the holidays to finalize the Azure edition of IdentityServer.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://identityserver.codeplex.com/releases/view/81206"&gt;http://identityserver.codeplex.com/releases/view/81206&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
The biggest difference to the on-premise version (and earlier Azure betas) is, that
by default IdSrv now uses Azure Storage for all data storage (configuration &amp;amp;
user data). This means that there is no need anymore for SQL Azure (which is still
supported out of the box – just not the default anymore).
&lt;/p&gt;
&lt;p&gt;
The download includes a readme file with setup instructions. In a nutshell:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Create a new hosted service and upload your certificates&lt;/li&gt;
&lt;li&gt;
Modify the service configuration file in the download to your needs (signing cert,
connection strings to storage…)&lt;/li&gt;
&lt;li&gt;
Deploy the package via the portal or other tools&lt;/li&gt;
&lt;li&gt;
Use the new Powershell scripts to add users&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
If you encounter any problem, please give me feedback.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=801bbb3f-65a7-4f5d-9e02-38a0515d63a6" /&gt;</description>
      <category>IdentityServer</category>
    </item>
    <item>
      <trackback:ping>http://www.leastprivilege.com/Trackback.aspx?guid=5795e8dd-807e-4ae2-be39-c459b36e4405</trackback:ping>
      <pingback:server>http://www.leastprivilege.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.leastprivilege.com/PermaLink.aspx?guid=5795e8dd-807e-4ae2-be39-c459b36e4405</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://www.huggill.com/2012/01/12/setting-up-google-apps-single-sign-on-sso-with-adfs-2-0-and-a-custom-sts-such-as-identityserver/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=setting-up-google-apps-single-sign-on-sso-with-adfs-2-0-and-a-custom-sts-such-as-identityserver&amp;utm_source=twitterfeed&amp;utm_medium=twitter" target="_blank">nice!</a>
        </p>
        <img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=5795e8dd-807e-4ae2-be39-c459b36e4405" />
      </body>
      <title>Google Apps and IdentityServer</title>
      <guid isPermaLink="false">http://www.leastprivilege.com/PermaLink.aspx?guid=5795e8dd-807e-4ae2-be39-c459b36e4405</guid>
      <link>http://www.leastprivilege.com/GoogleAppsAndIdentityServer.aspx</link>
      <pubDate>Mon, 16 Jan 2012 08:15:17 GMT</pubDate>
      <description>&lt;p&gt;
&lt;a href="http://www.huggill.com/2012/01/12/setting-up-google-apps-single-sign-on-sso-with-adfs-2-0-and-a-custom-sts-such-as-identityserver/?utm_source=rss&amp;amp;utm_medium=rss&amp;amp;utm_campaign=setting-up-google-apps-single-sign-on-sso-with-adfs-2-0-and-a-custom-sts-such-as-identityserver&amp;amp;utm_source=twitterfeed&amp;amp;utm_medium=twitter" target="_blank"&gt;nice!&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=5795e8dd-807e-4ae2-be39-c459b36e4405" /&gt;</description>
      <category>IdentityServer</category>
    </item>
    <item>
      <trackback:ping>http://www.leastprivilege.com/Trackback.aspx?guid=f3b8ca61-3dcd-4b4a-b67c-3c92f791db38</trackback:ping>
      <pingback:server>http://www.leastprivilege.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.leastprivilege.com/PermaLink.aspx?guid=f3b8ca61-3dcd-4b4a-b67c-3c92f791db38</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
My last advice for 2011:
</p>
        <p>
Get a ticket for <a href="http://www.troopers.de/" target="_blank">Troopers 2012</a> before
it is sold out.
</p>
        <p>
If you like to learn about IPv6, Android, iOS, SAP or cloud security (and much more)
– that’s the place to be!
</p>
        <img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=f3b8ca61-3dcd-4b4a-b67c-3c92f791db38" />
      </body>
      <title>Troopers 2012</title>
      <guid isPermaLink="false">http://www.leastprivilege.com/PermaLink.aspx?guid=f3b8ca61-3dcd-4b4a-b67c-3c92f791db38</guid>
      <link>http://www.leastprivilege.com/Troopers2012.aspx</link>
      <pubDate>Sat, 31 Dec 2011 11:25:48 GMT</pubDate>
      <description>&lt;p&gt;
My last advice for 2011:
&lt;/p&gt;
&lt;p&gt;
Get a ticket for &lt;a href="http://www.troopers.de/" target="_blank"&gt;Troopers 2012&lt;/a&gt; before
it is sold out.
&lt;/p&gt;
&lt;p&gt;
If you like to learn about IPv6, Android, iOS, SAP or cloud security (and much more)
– that’s the place to be!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=f3b8ca61-3dcd-4b4a-b67c-3c92f791db38" /&gt;</description>
      <category>Conferences</category>
    </item>
    <item>
      <trackback:ping>http://www.leastprivilege.com/Trackback.aspx?guid=bd4b0649-031a-42f9-a27c-c8e0198e0d64</trackback:ping>
      <pingback:server>http://www.leastprivilege.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.leastprivilege.com/PermaLink.aspx?guid=bd4b0649-031a-42f9-a27c-c8e0198e0d64</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
see here: 
</p>
        <p>
          <a href="http://blogs.msdn.com/b/windowsazure/archive/2011/12/20/important-announcements-regarding-the-access-control-service.aspx">http://blogs.msdn.com/b/windowsazure/archive/2011/12/20/important-announcements-regarding-the-access-control-service.aspx</a>
        </p>
        <img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=bd4b0649-031a-42f9-a27c-c8e0198e0d64" />
      </body>
      <title>ACS for free &amp;lsquo;til December 2012</title>
      <guid isPermaLink="false">http://www.leastprivilege.com/PermaLink.aspx?guid=bd4b0649-031a-42f9-a27c-c8e0198e0d64</guid>
      <link>http://www.leastprivilege.com/ACSForFreeLsquotilDecember2012.aspx</link>
      <pubDate>Wed, 21 Dec 2011 09:43:16 GMT</pubDate>
      <description>&lt;p&gt;
see here: 
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://blogs.msdn.com/b/windowsazure/archive/2011/12/20/important-announcements-regarding-the-access-control-service.aspx"&gt;http://blogs.msdn.com/b/windowsazure/archive/2011/12/20/important-announcements-regarding-the-access-control-service.aspx&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=bd4b0649-031a-42f9-a27c-c8e0198e0d64" /&gt;</description>
      <category>IdentityModel</category>
    </item>
    <item>
      <trackback:ping>http://www.leastprivilege.com/Trackback.aspx?guid=d32b1509-ff6a-4ed0-85ee-ec2bd4eeb4b7</trackback:ping>
      <pingback:server>http://www.leastprivilege.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.leastprivilege.com/PermaLink.aspx?guid=d32b1509-ff6a-4ed0-85ee-ec2bd4eeb4b7</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Claudio Sanchez did it again! thanks!
</p>
        <p>
          <a href="http://claudioasanchez.blogspot.com/2011/12/walk-though-of-provisioning-identity.html">http://claudioasanchez.blogspot.com/2011/12/walk-though-of-provisioning-identity.html</a>
        </p>
        <img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=d32b1509-ff6a-4ed0-85ee-ec2bd4eeb4b7" />
      </body>
      <title>Walkthrough for setting up IdentityServer v1.0</title>
      <guid isPermaLink="false">http://www.leastprivilege.com/PermaLink.aspx?guid=d32b1509-ff6a-4ed0-85ee-ec2bd4eeb4b7</guid>
      <link>http://www.leastprivilege.com/WalkthroughForSettingUpIdentityServerV10.aspx</link>
      <pubDate>Wed, 21 Dec 2011 09:16:00 GMT</pubDate>
      <description>&lt;p&gt;
Claudio Sanchez did it again! thanks!
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://claudioasanchez.blogspot.com/2011/12/walk-though-of-provisioning-identity.html"&gt;http://claudioasanchez.blogspot.com/2011/12/walk-though-of-provisioning-identity.html&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=d32b1509-ff6a-4ed0-85ee-ec2bd4eeb4b7" /&gt;</description>
      <category>IdentityServer</category>
    </item>
    <item>
      <trackback:ping>http://www.leastprivilege.com/Trackback.aspx?guid=107895d8-884d-4b04-8944-ccb5767abdf1</trackback:ping>
      <pingback:server>http://www.leastprivilege.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.leastprivilege.com/PermaLink.aspx?guid=107895d8-884d-4b04-8944-ccb5767abdf1</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
 
</p>
        <p>
          <b>
            <a href="http://tinyurl.com/claimsguide2">http://tinyurl.com/claimsguide2</a>
          </b>
        </p>
        <img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=107895d8-884d-4b04-8944-ccb5767abdf1" />
      </body>
      <title>Claims Guide&amp;ndash;2nd Edition PDF</title>
      <guid isPermaLink="false">http://www.leastprivilege.com/PermaLink.aspx?guid=107895d8-884d-4b04-8944-ccb5767abdf1</guid>
      <link>http://www.leastprivilege.com/ClaimsGuidendash2ndEditionPDF.aspx</link>
      <pubDate>Mon, 12 Dec 2011 04:48:49 GMT</pubDate>
      <description>&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;&lt;a href="http://tinyurl.com/claimsguide2"&gt;http://tinyurl.com/claimsguide2&lt;/a&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=107895d8-884d-4b04-8944-ccb5767abdf1" /&gt;</description>
      <category>IdentityModel</category>
      <category>IdentityServer</category>
    </item>
    <item>
      <trackback:ping>http://www.leastprivilege.com/Trackback.aspx?guid=c6c33046-9ea4-4751-93d3-cf39a60e8949</trackback:ping>
      <pingback:server>http://www.leastprivilege.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.leastprivilege.com/PermaLink.aspx?guid=c6c33046-9ea4-4751-93d3-cf39a60e8949</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
It was brought to my attention that fedutil does not work anymore with IdSrv v1 metadata.
And I can confirm that.
</p>
        <p>
The reason for this bug is my recent change to the <em>XmlWriter</em> factory methods
which have a different default behavior when it comes to encoding.
</p>
        <p>
Since there were only 20 downloads so far – I fixed the bug in-place (shame on me).
So when you are one of the early adopters and run into this problem – just re-download
IdSrv ;)
</p>
        <p>
HTH
</p>
        <img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=c6c33046-9ea4-4751-93d3-cf39a60e8949" />
      </body>
      <title>Small (and fixed) Bug in IdentityServer v1.0</title>
      <guid isPermaLink="false">http://www.leastprivilege.com/PermaLink.aspx?guid=c6c33046-9ea4-4751-93d3-cf39a60e8949</guid>
      <link>http://www.leastprivilege.com/SmallAndFixedBugInIdentityServerV10.aspx</link>
      <pubDate>Wed, 07 Dec 2011 08:10:24 GMT</pubDate>
      <description>&lt;p&gt;
It was brought to my attention that fedutil does not work anymore with IdSrv v1 metadata.
And I can confirm that.
&lt;/p&gt;
&lt;p&gt;
The reason for this bug is my recent change to the &lt;em&gt;XmlWriter&lt;/em&gt; factory methods
which have a different default behavior when it comes to encoding.
&lt;/p&gt;
&lt;p&gt;
Since there were only 20 downloads so far – I fixed the bug in-place (shame on me).
So when you are one of the early adopters and run into this problem – just re-download
IdSrv ;)
&lt;/p&gt;
&lt;p&gt;
HTH
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=c6c33046-9ea4-4751-93d3-cf39a60e8949" /&gt;</description>
      <category>IdentityServer</category>
    </item>
    <item>
      <trackback:ping>http://www.leastprivilege.com/Trackback.aspx?guid=d15a278b-6de4-488f-b9ed-6c9a70b5b8dc</trackback:ping>
      <pingback:server>http://www.leastprivilege.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.leastprivilege.com/PermaLink.aspx?guid=d15a278b-6de4-488f-b9ed-6c9a70b5b8dc</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Yeah – it is finally done. I just uploaded the v1 bits to <a href="http://identityserver.codeplex.com" target="_blank">Codeplex</a> and
the <a href="https://identity.thinktecture.com/idsrv/docs/" target="_blank">documentation</a> to
our server. Here’s the official blurb…
</p>
        <p>
          <a href="http://www.thinktecture.com" target="_blank">Thinktecture</a> IdentityServer
is an open source security token service based on Microsoft .NET, ASP.NET MVC, WCF
and WIF.
</p>
        <p>
          <strong>High level features</strong>
        </p>
        <ul>
          <li>
Multiple protocols support (WS-Trust, WS-Federation, OAuth2, WRAP, JSNotify, HTTP
GET)</li>
          <li>
Multiple token support (SAML 1.1/2.0, SWT)</li>
          <li>
Out of the box integration with ASP.NET membership, roles and profile</li>
          <li>
Support for username/password and client certificates authentication</li>
          <li>
Support for WS-Federation metadata</li>
          <li>
Support for WS-Trust identity delegation</li>
          <li>
Extensibility points to customize configuration and user management handling</li>
        </ul>
        <p>
          <img src="http://www.leastprivilege.com/content/binary/idsrv_arch.png" />
        </p>
        <p>
          <strong>Disclaimer<br /></strong>I did thorough testing of all features of IdentityServer - but keep in mind
that this is an open source project and I am the only architect, developer and tester
on the team.<br />
IdentityServer also lacks many of the enterprise-level features like configuration
services, proxy support, operations integration etc.<br />
I only recommend using IdentityServer if you also understand how it works (to be able
to support it). I am offering consulting to help you with customization and lock down
- contact me.
</p>
        <p>
          <a href="http://identityserver.codeplex.com" target="_blank">Download</a>. <a href="https://identity.thinktecture.com/idsrv/docs/" target="_blank">Documentation</a>.
</p>
        <p>
Up next is v1 of the Azure version. Have fun!
</p>
        <img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=d15a278b-6de4-488f-b9ed-6c9a70b5b8dc" />
      </body>
      <title>Thinktecture IdentityServer v1.0</title>
      <guid isPermaLink="false">http://www.leastprivilege.com/PermaLink.aspx?guid=d15a278b-6de4-488f-b9ed-6c9a70b5b8dc</guid>
      <link>http://www.leastprivilege.com/ThinktectureIdentityServerV10.aspx</link>
      <pubDate>Tue, 06 Dec 2011 18:14:20 GMT</pubDate>
      <description>&lt;p&gt;
Yeah – it is finally done. I just uploaded the v1 bits to &lt;a href="http://identityserver.codeplex.com" target="_blank"&gt;Codeplex&lt;/a&gt; and
the &lt;a href="https://identity.thinktecture.com/idsrv/docs/" target="_blank"&gt;documentation&lt;/a&gt; to
our server. Here’s the official blurb…
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.thinktecture.com" target="_blank"&gt;Thinktecture&lt;/a&gt; IdentityServer
is an open source security token service based on Microsoft .NET, ASP.NET MVC, WCF
and WIF.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;High level features&lt;/strong&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Multiple protocols support (WS-Trust, WS-Federation, OAuth2, WRAP, JSNotify, HTTP
GET)&lt;/li&gt;
&lt;li&gt;
Multiple token support (SAML 1.1/2.0, SWT)&lt;/li&gt;
&lt;li&gt;
Out of the box integration with ASP.NET membership, roles and profile&lt;/li&gt;
&lt;li&gt;
Support for username/password and client certificates authentication&lt;/li&gt;
&lt;li&gt;
Support for WS-Federation metadata&lt;/li&gt;
&lt;li&gt;
Support for WS-Trust identity delegation&lt;/li&gt;
&lt;li&gt;
Extensibility points to customize configuration and user management handling&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;img src="http://www.leastprivilege.com/content/binary/idsrv_arch.png"&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Disclaimer&lt;br&gt;
&lt;/strong&gt;I did thorough testing of all features of IdentityServer - but keep in mind
that this is an open source project and I am the only architect, developer and tester
on the team.&lt;br&gt;
IdentityServer also lacks many of the enterprise-level features like configuration
services, proxy support, operations integration etc.&lt;br&gt;
I only recommend using IdentityServer if you also understand how it works (to be able
to support it). I am offering consulting to help you with customization and lock down
- contact me.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://identityserver.codeplex.com" target="_blank"&gt;Download&lt;/a&gt;. &lt;a href="https://identity.thinktecture.com/idsrv/docs/" target="_blank"&gt;Documentation&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Up next is v1 of the Azure version. Have fun!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=d15a278b-6de4-488f-b9ed-6c9a70b5b8dc" /&gt;</description>
      <category>IdentityServer</category>
    </item>
    <item>
      <trackback:ping>http://www.leastprivilege.com/Trackback.aspx?guid=a6ebf348-be42-46d2-8397-28e3c6ce6d86</trackback:ping>
      <pingback:server>http://www.leastprivilege.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.leastprivilege.com/PermaLink.aspx?guid=a6ebf348-be42-46d2-8397-28e3c6ce6d86</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Sam <a href="http://www.huggill.com/">Huggill</a> wrote a great <a href="http://www.huggill.com/2011/11/23/how-to-run-startersts-on-iis-6-windows-2003/">post</a> on
how to get StarterSTS working on IIS 6.
</p>
        <p>
Thanks Sam!
</p>
        <img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=a6ebf348-be42-46d2-8397-28e3c6ce6d86" />
      </body>
      <title>StarterSTS on IIS 6</title>
      <guid isPermaLink="false">http://www.leastprivilege.com/PermaLink.aspx?guid=a6ebf348-be42-46d2-8397-28e3c6ce6d86</guid>
      <link>http://www.leastprivilege.com/StarterSTSOnIIS6.aspx</link>
      <pubDate>Wed, 23 Nov 2011 15:51:49 GMT</pubDate>
      <description>&lt;p&gt;
Sam &lt;a href="http://www.huggill.com/"&gt;Huggill&lt;/a&gt; wrote a great &lt;a href="http://www.huggill.com/2011/11/23/how-to-run-startersts-on-iis-6-windows-2003/"&gt;post&lt;/a&gt; on
how to get StarterSTS working on IIS 6.
&lt;/p&gt;
&lt;p&gt;
Thanks Sam!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=a6ebf348-be42-46d2-8397-28e3c6ce6d86" /&gt;</description>
      <category>IdentityServer</category>
    </item>
    <item>
      <trackback:ping>http://www.leastprivilege.com/Trackback.aspx?guid=fdfba9f8-3b66-431c-81df-6cdce60c32a1</trackback:ping>
      <pingback:server>http://www.leastprivilege.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.leastprivilege.com/PermaLink.aspx?guid=fdfba9f8-3b66-431c-81df-6cdce60c32a1</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
In the <a href="http://www.leastprivilege.com/TokenBasedAuthenticationForWCFHTTPRESTServicesAuthentication.aspx">previous</a> post
I showed how token based authentication can be implemented for WCF HTTP based services.
</p>
        <p>
Authentication is the process of finding out who the user is – this includes anonymous
users. Then it is up to the service to decide under which circumstances the client
has access to the service as a whole or individual operations. This is called authorization.
</p>
        <p>
By default – my framework does not allow anonymous users and will deny access right
in the service authorization manager. You can however turn anonymous access on – that
means technically, that instead of denying access, an anonymous principal is placed
on <em>Thread.CurrentPrincipal</em>. You can flip that switch in the configuration
class that you can pass into the service host/factory.
</p>
        <pre style="line-height: normal; font-family: ; background: white; color: ">
          <font face="Consolas">
            <span style="color: ">
              <font color="#0000ff">
                <font style="font-size: 11.3pt">var</font>
              </font>
            </span>
            <font style="font-size: 11.3pt">
              <font color="#000000"> configuration
= </font>
              <span style="color: ">
                <font color="#0000ff">new</font>
              </span>
              <font color="#000000"> </font>
              <span style="color: ">
                <font color="#2b91af">WebTokenWebServiceHostConfiguration<br /></font>
              </span>
            </font>
          </font>
          <font face="Consolas">
            <font style="font-size: 11.3pt">
              <font color="#000000">{<br />
    AllowAnonymousAccess = </font>
              <span style="color: ">
                <font color="#0000ff">true<br /></font>
              </span>
              <font color="#000000">}; </font>
            </font>
          </font>
        </pre>
        <p>
But this is not enough, in addition you also need to decorate the individual operations
to allow anonymous access as well, e.g.:
</p>
        <pre style="line-height: normal; font-family: ; background: white; color: ">
          <font face="Consolas">
            <font color="#000000">
              <font style="font-size: 11.3pt">[</font>
            </font>
            <font style="font-size: 11.3pt">
              <span style="color: ">
                <font color="#2b91af">AllowAnonymousAccess</font>
              </span>
            </font>
          </font>
          <font style="font-size: 11.3pt">
            <font face="Consolas">
              <font color="#000000">]<br /></font>
              <span style="color: ">
                <font color="#0000ff">public</font>
              </span>
              <font color="#000000"> </font>
              <span style="color: ">
                <font color="#0000ff">string</font>
              </span>
            </font>
          </font>
          <font face="Consolas">
            <font style="font-size: 11.3pt">
              <font color="#000000"> GetInfo()<br />
{<br />
    ...<font color="#0000ff"><br /></font></font>
              <font color="#000000">} </font>
            </font>
          </font>
        </pre>
        <p>
Inside these operations you might have an authenticated or an anonymous principal
on <em>Thread.CurrentPrincipal</em>, and it is up to your code to decide what to do.
</p>
        <p>
          <strong>Side note:</strong> Being a security guy, I like this opt-in approach to anonymous
access much better that all those opt-out approaches out there (like the <a href="http://msdn.microsoft.com/en-us/library/system.web.mvc.authorizeattribute.aspx">Authorize</a> attribute
– or <a href="http://haacked.com/archive/2011/10/19/implementing-an-authorization-attribute-for-wcf-web-api.aspx">this</a>.).
</p>
        <p>
          <strong>Claims-based Authorization<br /></strong>Since there is a <em>ClaimsPrincipal</em> available, you can use the standard
WIF claims authorization manager infrastructure – either declaratively via <em>ClaimsPrincipalPermission</em> or
programmatically (see also <a href="http://www.leastprivilege.com/WhatILikeAboutWIFrsquosClaimsbasedAuthorization.aspx">here</a>).
</p>
        <pre style="line-height: normal; font-family: ; background: white; color: ">
          <font face="Consolas">
            <font color="#000000">
              <font style="font-size: 11.3pt">[</font>
            </font>
            <font style="font-size: 11.3pt">
              <span style="color: ">
                <font color="#2b91af">ClaimsPrincipalPermission</font>
              </span>
              <font color="#000000">(</font>
              <span style="color: ">
                <font color="#2b91af">SecurityAction</font>
              </span>
            </font>
          </font>
          <font style="font-size: 11.3pt">
            <font face="Consolas">
              <font color="#000000">.Demand, 
<br />
    Resource = </font>
              <span style="color: ">
                <font color="#a31515">"Claims"</font>
              </span>
            </font>
            <font face="Consolas">
              <font color="#000000">,<br />
    Operation = </font>
              <span style="color: ">
                <font color="#a31515">"View"</font>
              </span>
            </font>
            <font face="Consolas">
              <font color="#000000">)]<br /></font>
              <span style="color: ">
                <font color="#0000ff">public</font>
              </span>
              <font color="#000000"> </font>
              <span style="color: ">
                <font color="#2b91af">ViewClaims</font>
              </span>
            </font>
          </font>
          <font face="Consolas">
            <font style="font-size: 11.3pt">
              <font color="#000000"> GetClientIdentity()<br />
{<br />
    </font>
              <span style="color: ">
                <font color="#0000ff">return</font>
              </span>
              <font color="#000000"> </font>
              <span style="color: ">
                <font color="#0000ff">new</font>
              </span>
              <font color="#000000"> </font>
              <span style="color: ">
                <font color="#2b91af">ServiceLogic</font>
              </span>
              <font color="#000000">().GetClaims();<br />
}</font>
            </font>
          </font>
        </pre>
        <p>
 
</p>
        <p>
In addition you can also turn off per-request authorization (see <a href="http://www.leastprivilege.com/WhatIDonrsquotLikeAboutWIFrsquosClaimsbasedAuthorization.aspx">here</a> for
background) via the config and just use the “domain specific” instrumentation.
</p>
        <p>
While the code is not 100% done – you can download the current solution <a href="http://www.leastprivilege.com/content/binary/webservicesecurity.zip">here</a>.
</p>
        <p>
HTH
</p>
        <p>
(Wanna learn more about federation, WIF, claims, tokens etc.? Click <a href="http://www.leastprivilege.com/NeedWIFTraining.aspx">here</a>.)
</p>
        <img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=fdfba9f8-3b66-431c-81df-6cdce60c32a1" />
      </body>
      <title>Token based Authentication for WCF HTTP/REST Services: Authorization</title>
      <guid isPermaLink="false">http://www.leastprivilege.com/PermaLink.aspx?guid=fdfba9f8-3b66-431c-81df-6cdce60c32a1</guid>
      <link>http://www.leastprivilege.com/TokenBasedAuthenticationForWCFHTTPRESTServicesAuthorization.aspx</link>
      <pubDate>Wed, 16 Nov 2011 08:11:50 GMT</pubDate>
      <description>&lt;p&gt;
In the &lt;a href="http://www.leastprivilege.com/TokenBasedAuthenticationForWCFHTTPRESTServicesAuthentication.aspx"&gt;previous&lt;/a&gt; post
I showed how token based authentication can be implemented for WCF HTTP based services.
&lt;/p&gt;
&lt;p&gt;
Authentication is the process of finding out who the user is – this includes anonymous
users. Then it is up to the service to decide under which circumstances the client
has access to the service as a whole or individual operations. This is called authorization.
&lt;/p&gt;
&lt;p&gt;
By default – my framework does not allow anonymous users and will deny access right
in the service authorization manager. You can however turn anonymous access on – that
means technically, that instead of denying access, an anonymous principal is placed
on &lt;em&gt;Thread.CurrentPrincipal&lt;/em&gt;. You can flip that switch in the configuration
class that you can pass into the service host/factory.
&lt;/p&gt;
&lt;pre style="line-height: normal; font-family: ; background: white; color: "&gt;&lt;font face="Consolas"&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size: 11.3pt"&gt;var&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size: 11.3pt"&gt;&lt;font color="#000000"&gt; configuration
= &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;nbsp;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;WebTokenWebServiceHostConfiguration&lt;br&gt;
&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 11.3pt"&gt;&lt;font color="#000000"&gt;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; AllowAnonymousAccess = &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;true&lt;br&gt;
&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;}; &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;
&lt;p&gt;
But this is not enough, in addition you also need to decorate the individual operations
to allow anonymous access as well, e.g.:
&lt;/p&gt;
&lt;pre style="line-height: normal; font-family: ; background: white; color: "&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;&lt;font style="font-size: 11.3pt"&gt;[&lt;/font&gt;&lt;/font&gt;&lt;font style="font-size: 11.3pt"&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;AllowAnonymousAccess&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font style="font-size: 11.3pt"&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;]&lt;br&gt;
&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;public&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;nbsp;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 11.3pt"&gt;&lt;font color="#000000"&gt; GetInfo()&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;font color="#0000ff"&gt;
&lt;br&gt;
&lt;/font&gt;&lt;/font&gt;&lt;font color="#000000"&gt;} &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;
&lt;p&gt;
Inside these operations you might have an authenticated or an anonymous principal
on &lt;em&gt;Thread.CurrentPrincipal&lt;/em&gt;, and it is up to your code to decide what to do.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Side note:&lt;/strong&gt; Being a security guy, I like this opt-in approach to anonymous
access much better that all those opt-out approaches out there (like the &lt;a href="http://msdn.microsoft.com/en-us/library/system.web.mvc.authorizeattribute.aspx"&gt;Authorize&lt;/a&gt; attribute
– or &lt;a href="http://haacked.com/archive/2011/10/19/implementing-an-authorization-attribute-for-wcf-web-api.aspx"&gt;this&lt;/a&gt;.).
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Claims-based Authorization&lt;br&gt;
&lt;/strong&gt;Since there is a &lt;em&gt;ClaimsPrincipal&lt;/em&gt; available, you can use the standard
WIF claims authorization manager infrastructure – either declaratively via &lt;em&gt;ClaimsPrincipalPermission&lt;/em&gt; or
programmatically (see also &lt;a href="http://www.leastprivilege.com/WhatILikeAboutWIFrsquosClaimsbasedAuthorization.aspx"&gt;here&lt;/a&gt;).
&lt;/p&gt;
&lt;pre style="line-height: normal; font-family: ; background: white; color: "&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;&lt;font style="font-size: 11.3pt"&gt;[&lt;/font&gt;&lt;/font&gt;&lt;font style="font-size: 11.3pt"&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;ClaimsPrincipalPermission&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;SecurityAction&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font style="font-size: 11.3pt"&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;.Demand, 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Resource = &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;"Claims"&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;,&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Operation = &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;"View"&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;)]&lt;br&gt;
&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;public&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;nbsp;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;ViewClaims&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 11.3pt"&gt;&lt;font color="#000000"&gt; GetClientIdentity()&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;nbsp;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;nbsp;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;ServiceLogic&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;().GetClaims();&lt;br&gt;
}&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
In addition you can also turn off per-request authorization (see &lt;a href="http://www.leastprivilege.com/WhatIDonrsquotLikeAboutWIFrsquosClaimsbasedAuthorization.aspx"&gt;here&lt;/a&gt; for
background) via the config and just use the “domain specific” instrumentation.
&lt;/p&gt;
&lt;p&gt;
While the code is not 100% done – you can download the current solution &lt;a href="http://www.leastprivilege.com/content/binary/webservicesecurity.zip"&gt;here&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
HTH
&lt;/p&gt;
&lt;p&gt;
(Wanna learn more about federation, WIF, claims, tokens etc.? Click &lt;a href="http://www.leastprivilege.com/NeedWIFTraining.aspx"&gt;here&lt;/a&gt;.)
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=fdfba9f8-3b66-431c-81df-6cdce60c32a1" /&gt;</description>
      <category>IdentityModel</category>
      <category>IdentityServer</category>
    </item>
    <item>
      <trackback:ping>http://www.leastprivilege.com/Trackback.aspx?guid=54ed58b5-3243-4087-87d4-0bb9c183d366</trackback:ping>
      <pingback:server>http://www.leastprivilege.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.leastprivilege.com/PermaLink.aspx?guid=54ed58b5-3243-4087-87d4-0bb9c183d366</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
If you wondered how a client would have to look like to work with the authentication
framework, it is pretty straightfoward:
</p>
        <ol>
          <li>
Request a token</li>
          <li>
Put that token on the authorization header (along with a registered scheme) and make
the service call</li>
        </ol>
        <p>
e.g.:
</p>
        <pre style="line-height: normal; font-family: ; background: white">
          <font face="Consolas">
            <span style="color: ">
              <font color="#0000ff">
                <font style="font-size: 11.3pt">var</font>
              </font>
            </span>
            <font style="font-size: 11.3pt">
              <font color="#000000"> oauth2
= </font>
              <span style="color: ">
                <font color="#0000ff">new</font>
              </span>
              <font color="#000000"> </font>
              <span style="color: ">
                <font color="#2b91af">OAuth2Client</font>
              </span>
            </font>
          </font>
          <font face="Consolas">
            <font style="font-size: 11.3pt">
              <font color="#000000">(_oauth2Address);<br /></font>
              <span style="color: ">
                <font color="#0000ff">var</font>
              </span>
              <font color="#000000"> swt
= oauth2.RequestAccessToken(<br /></font>
              <span style="color: ">
                <font color="#a31515"> "username"</font>
              </span>
              <font color="#000000">, </font>
              <span style="color: ">
                <font color="#a31515">"password"</font>
              </span>
              <font color="#000000">,
_baseAddress.AbsoluteUri);</font>
            </font>
          </font>
        </pre>
        <pre style="line-height: normal; font-family: ; background: white"> </pre>
        <pre style="line-height: normal; font-family: ; background: white; color: ">
          <font face="Consolas">
            <span style="color: ">
              <font color="#0000ff">
                <font style="font-size: 11.3pt">var</font>
              </font>
            </span>
            <font style="font-size: 11.3pt">
              <font color="#000000"> client
= </font>
              <span style="color: ">
                <font color="#0000ff">new</font>
              </span>
              <font color="#000000"> </font>
              <span style="color: ">
                <font color="#2b91af">HttpClient</font>
              </span>
            </font>
          </font>
          <font style="font-size: 11.3pt">
            <font face="Consolas">
              <font color="#000000"> {
BaseAddress = _baseAddress };<br />
client.DefaultRequestHeaders.Authorization = 
<br /></font>
              <span style="color: ">
                <font color="#0000ff">new</font>
              </span>
              <font color="#000000"> </font>
              <span style="color: ">
                <font color="#2b91af">AuthenticationHeaderValue</font>
              </span>
              <font color="#000000">(</font>
              <span style="color: ">
                <font color="#a31515">"Bearer"</font>
              </span>
            </font>
          </font>
          <font face="Consolas">
            <font style="font-size: 11.3pt">
              <font color="#000000">,
swt); 
<br /></font>
              <span style="color: ">
                <font color="#0000ff">var</font>
              </span>
              <font color="#000000"> response
= client.Get(</font>
              <span style="color: ">
                <font color="#a31515">"identity"</font>
              </span>
              <font color="#000000">);<br />
response.EnsureSuccessStatusCode();</font>
            </font>
          </font>
        </pre>
        <p>
HTH
</p>
        <img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=54ed58b5-3243-4087-87d4-0bb9c183d366" />
      </body>
      <title>Token based Authentication for WCF HTTP/REST Services: The Client</title>
      <guid isPermaLink="false">http://www.leastprivilege.com/PermaLink.aspx?guid=54ed58b5-3243-4087-87d4-0bb9c183d366</guid>
      <link>http://www.leastprivilege.com/TokenBasedAuthenticationForWCFHTTPRESTServicesTheClient.aspx</link>
      <pubDate>Tue, 15 Nov 2011 16:58:37 GMT</pubDate>
      <description>&lt;p&gt;
If you wondered how a client would have to look like to work with the authentication
framework, it is pretty straightfoward:
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
Request a token&lt;/li&gt;
&lt;li&gt;
Put that token on the authorization header (along with a registered scheme) and make
the service call&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
e.g.:
&lt;/p&gt;
&lt;pre style="line-height: normal; font-family: ; background: white"&gt;&lt;font face="Consolas"&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size: 11.3pt"&gt;var&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size: 11.3pt"&gt;&lt;font color="#000000"&gt; oauth2
= &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;nbsp;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;OAuth2Client&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 11.3pt"&gt;&lt;font color="#000000"&gt;(_oauth2Address);&lt;br&gt;
&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; swt
= oauth2.RequestAccessToken(&lt;br&gt;
&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt; "username"&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;, &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;"password"&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;,
_baseAddress.AbsoluteUri);&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;
&lt;pre style="line-height: normal; font-family: ; background: white"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre style="line-height: normal; font-family: ; background: white; color: "&gt;&lt;font face="Consolas"&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size: 11.3pt"&gt;var&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size: 11.3pt"&gt;&lt;font color="#000000"&gt; client
= &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;nbsp;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;HttpClient&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font style="font-size: 11.3pt"&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt; {
BaseAddress = _baseAddress };&lt;br&gt;
client.DefaultRequestHeaders.Authorization = 
&lt;br&gt;
&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;nbsp;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;AuthenticationHeaderValue&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;"Bearer"&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 11.3pt"&gt;&lt;font color="#000000"&gt;,
swt); 
&lt;br&gt;
&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; response
= client.Get(&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;"identity"&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;);&lt;br&gt;
response.EnsureSuccessStatusCode();&lt;/font&gt;&lt;/font&gt;&lt;/font&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=54ed58b5-3243-4087-87d4-0bb9c183d366" /&gt;</description>
      <category>IdentityModel</category>
      <category>IdentityServer</category>
    </item>
    <item>
      <trackback:ping>http://www.leastprivilege.com/Trackback.aspx?guid=91c6199c-ad18-4bc1-a191-98de88c8a052</trackback:ping>
      <pingback:server>http://www.leastprivilege.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.leastprivilege.com/PermaLink.aspx?guid=91c6199c-ad18-4bc1-a191-98de88c8a052</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
This post shows some of the implementation techniques for adding token and claims
based security to HTTP/REST services written with WCF. For the theoretical background,
see my previous <a href="http://www.leastprivilege.com/TokenBasedAuthenticationAndClaimsForRestfulServices.aspx">post</a>.
</p>
        <p>
          <strong>Disclaimer</strong>
          <br />
The framework I am using/building here is not the only possible approach to tackle
the problem. Based on customer feedback and requirements the code has gone through
several iterations to a point where we think it is ready to handle most of the situations.
</p>
        <p>
          <strong>Goals and requirements</strong>
        </p>
        <ul>
          <li>
The framework should be able to handle typical scenarios like username/password based
authentication, as well as token based authentication</li>
          <li>
The framework should allow adding new supported token types</li>
          <li>
Should work with WCF web programming model either self-host or IIS hosted</li>
          <li>
Service code can rely on an <em>IClaimsPrincipal</em> on <em>Thread.CurrentPrincipal</em> that
describes the client using claims-based identity</li>
        </ul>
        <p>
          <strong>Implementation overview</strong>
          <br />
In WCF the main extensibility point for this kind of security work is the <em>ServiceAuthorizationManager</em>.
It gets invoked early enough in the pipeline, has access to the HTTP protocol details
of the incoming request and can set Thread.CurrentPrincipal. The job of the SAM is
simple:
</p>
        <ol>
          <li>
Check the <em>Authorization</em> header of the incoming HTTP request</li>
          <li>
Check if a “registered” token (more on that later) is present</li>
          <li>
If yes, validate the token using a security token handler, create the claims principal
(including claims transformation) and set Thread.CurrentPrincipal</li>
          <li>
If no, set an anonymous principal on <em>Thread.CurrentPrincipal</em>. By default,
anonymous principals are denied access – so the request ends here with a 401 (more
on that later).</li>
        </ol>
        <p>
To wire up the custom authorization manager you need a custom service host – which
in turn needs a custom service host factory. The full object model looks like this:
</p>
        <p>
          <img src="http://www.leastprivilege.com/content/binary/wcfrestauthn.png" />
        </p>
        <p>
          <strong>Token handling</strong>
          <br />
A nice piece of existing WIF infrastructure are security token handlers. Their job
is to serialize a received security token into a CLR representation, validate the
token and turn the token into claims. 
</p>
        <p>
The way this works with WS-Security based services is that WIF passes the name/namespace
of the incoming token to WIF’s security token handler collection. This in turn finds
out which token handler can deal with the token and returns the right instances.
</p>
        <p>
For HTTP based services we can do something very similar. The scheme on the Authorization
header gives the service a hint how to deal with an incoming token. So the only missing
link is a way to associate a token handler (or multiple token handlers) with a scheme
and we are (almost) done.
</p>
        <p>
WIF already includes token handler for a variety of tokens like username/password
or SAML 1.1/2.0. The accompanying sample has a implementation for a Simple Web Token
(SWT) token handler, and as soon as JSON Web Token are ready, simply adding a corresponding
token handler will add support for this token type, too.
</p>
        <p>
All supported schemes/token types are organized in a <em>WebSecurityTokenHandlerCollectionManager</em> and
passed into the host factory/host/authorization manager.
</p>
        <p>
Adding support for basic authentication against a membership provider would e.g. look
like this (in global.asax):
</p>
        <pre style="line-height: normal; font-family: ; background: white">
          <font face="Consolas">
            <span style="color: ">
              <font color="#0000ff">
                <font style="font-size: 11.3pt">var</font>
              </font>
            </span>
            <font style="font-size: 11.3pt">
              <font color="#000000"> manager
= </font>
              <span style="color: ">
                <font color="#0000ff">new</font>
              </span>
              <font color="#000000"> </font>
              <span style="color: ">
                <font color="#2b91af">WebSecurityTokenHandlerCollectionManager</font>
              </span>
            </font>
          </font>
          <font style="font-size: 11.3pt">
            <font face="Consolas">
              <font color="#000000">();<br /></font>
            </font>
          </font>
        </pre>
        <pre style="line-height: normal; font-family: ; background: white">
          <font face="Consolas">
            <font style="font-size: 11.3pt">
              <font color="#000000">
                <br />
manager.AddBasicAuthenticationHandler((username, password) =&gt; 
<br /></font>
              <span style="color: ">
                <font color="#2b91af">Membership</font>
              </span>
              <font color="#000000">.ValidateUser(username,
password));</font>
            </font>
          </font>
        </pre>
        <p>
 
</p>
        <p>
Adding support for Simple Web Tokens with a scheme of <em>Bearer</em> (the current
OAuth2 scheme) requires passing in a issuer, audience and signature verification key:
</p>
        <pre style="line-height: normal; font-family: ; background: white; color: ">
          <font face="Consolas">
            <font color="#000000">
              <font style="font-size: 11.3pt">manager.AddSimpleWebTokenHandler(<br />
    </font>
            </font>
            <font style="font-size: 11.3pt">
              <span style="color: ">
                <font color="#a31515">"Bearer"</font>
              </span>
            </font>
          </font>
          <font style="font-size: 11.3pt">
            <font face="Consolas">
              <font color="#000000">,<br />
    </font>
              <span style="color: ">
                <font color="#a31515">"http://identityserver.thinktecture.com/trust/initial"</font>
              </span>
            </font>
            <font face="Consolas">
              <font color="#000000">,<br />
    </font>
              <span style="color: ">
                <font color="#a31515">"https://roadie/webservicesecurity/rest/"</font>
              </span>
            </font>
          </font>
          <font face="Consolas">
            <font style="font-size: 11.3pt">
              <font color="#000000">,<br />
    </font>
              <span style="color: ">
                <font color="#a31515">"WFD7i8XRHsrUPEdwSisdHoHy08W3lM16Bk6SCT8ht6A="</font>
              </span>
              <font color="#000000">);</font>
            </font>
          </font>
        </pre>
        <p>
In some situations, SAML token may be used as well. The following configures SAML
support for a token coming from ADFS2:
</p>
        <pre style="line-height: normal; font-family: ; background: white; color: ">
          <font face="Consolas">
            <span style="color: ">
              <font color="#0000ff">
                <font style="font-size: 11.3pt">var</font>
              </font>
            </span>
            <font style="font-size: 11.3pt">
              <font color="#000000"> registry
= </font>
              <span style="color: ">
                <font color="#0000ff">new</font>
              </span>
              <font color="#000000"> </font>
              <span style="color: ">
                <font color="#2b91af">ConfigurationBasedIssuerNameRegistry</font>
              </span>
            </font>
          </font>
          <font style="font-size: 11.3pt">
            <font face="Consolas">
              <font color="#000000">();<br />
registry.AddTrustedIssuer(<br /></font>
              <span style="color: ">
                <font color="#a31515"> "d1 c5 b1 25 97 d0 36 94 65 1c
e2 64 fe 48 06 01 35 f7 bd db"</font>
              </span>
              <font color="#000000">, </font>
              <span style="color: ">
                <font color="#a31515">"ADFS"</font>
              </span>
            </font>
            <font face="Consolas">
              <font color="#000000">); </font>
              <span style="color: ">
                <font color="#0000ff">var</font>
              </span>
              <font color="#000000"> adfsConfig
= </font>
              <span style="color: ">
                <font color="#0000ff">new</font>
              </span>
              <font color="#000000"> </font>
              <span style="color: ">
                <font color="#2b91af">SecurityTokenHandlerConfiguration</font>
              </span>
            </font>
            <font face="Consolas">
              <font color="#000000">();<br />
adfsConfig.AudienceRestriction.AllowedAudienceUris.Add(<br /></font>
              <span style="color: ">
                <font color="#0000ff">new</font>
              </span>
              <font color="#000000"> </font>
              <span style="color: ">
                <font color="#2b91af">Uri</font>
              </span>
              <font color="#000000">(</font>
              <span style="color: ">
                <font color="#a31515">"https://roadie/webservicesecurity/rest/"</font>
              </span>
            </font>
            <font face="Consolas">
              <font color="#000000">));<br />
adfsConfig.IssuerNameRegistry = registry;<br />
adfsConfig.CertificateValidator = </font>
              <span style="color: ">
                <font color="#2b91af">X509CertificateValidator</font>
              </span>
            </font>
            <font face="Consolas">
              <font color="#000000">.None; </font>
              <span style="color: ">
                <font color="#008000">//
token decryption (read from config)</font>
              </span>
              <font color="#000000">adfsConfig.ServiceTokenResolver
= 
<br /></font>
              <span style="color: ">
                <font color="#2b91af">IdentityModelConfiguration</font>
              </span>
            </font>
          </font>
          <font face="Consolas">
            <font style="font-size: 11.3pt">
              <font color="#000000">.ServiceConfiguration.CreateAggregateTokenResolver();             
<br />
manager.AddSaml11SecurityTokenHandler(</font>
              <span style="color: ">
                <font color="#a31515">"SAML"</font>
              </span>
              <font color="#000000">,
adfsConfig);</font>
            </font>
          </font>
        </pre>
        <p>
          <strong>
          </strong> 
</p>
        <p>
          <strong>Transformation</strong>
          <br />
The custom authorization manager will also try to invoke a configured claims authentication
manager. This means that the standard WIF claims transformation logic can be used
here as well. And even better, can be also shared with e.g. a “surrounding” web application.
</p>
        <p>
          <strong>Error handling<br /></strong>A WCF error handler takes care of turning “access denied” faults into 401
status codes and a message inspector adds the registered authentication schemes to
the outgoing <em>WWW-Authenticate</em> header when a 401 occurs.
</p>
        <p>
The next post will conclude with authorization as well as the source code download.
</p>
        <p>
 
</p>
        <p>
(Wanna learn more about federation, WIF, claims, tokens etc.? Click <a href="http://www.leastprivilege.com/NeedWIFTraining.aspx">here</a>.)
</p>
        <img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=91c6199c-ad18-4bc1-a191-98de88c8a052" />
      </body>
      <title>Token based Authentication for WCF HTTP/REST Services: Authentication</title>
      <guid isPermaLink="false">http://www.leastprivilege.com/PermaLink.aspx?guid=91c6199c-ad18-4bc1-a191-98de88c8a052</guid>
      <link>http://www.leastprivilege.com/TokenBasedAuthenticationForWCFHTTPRESTServicesAuthentication.aspx</link>
      <pubDate>Tue, 15 Nov 2011 16:04:12 GMT</pubDate>
      <description>&lt;p&gt;
This post shows some of the implementation techniques for adding token and claims
based security to HTTP/REST services written with WCF. For the theoretical background,
see my previous &lt;a href="http://www.leastprivilege.com/TokenBasedAuthenticationAndClaimsForRestfulServices.aspx"&gt;post&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Disclaimer&lt;/strong&gt;
&lt;br&gt;
The framework I am using/building here is not the only possible approach to tackle
the problem. Based on customer feedback and requirements the code has gone through
several iterations to a point where we think it is ready to handle most of the situations.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Goals and requirements&lt;/strong&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
The framework should be able to handle typical scenarios like username/password based
authentication, as well as token based authentication&lt;/li&gt;
&lt;li&gt;
The framework should allow adding new supported token types&lt;/li&gt;
&lt;li&gt;
Should work with WCF web programming model either self-host or IIS hosted&lt;/li&gt;
&lt;li&gt;
Service code can rely on an &lt;em&gt;IClaimsPrincipal&lt;/em&gt; on &lt;em&gt;Thread.CurrentPrincipal&lt;/em&gt; that
describes the client using claims-based identity&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;strong&gt;Implementation overview&lt;/strong&gt;
&lt;br&gt;
In WCF the main extensibility point for this kind of security work is the &lt;em&gt;ServiceAuthorizationManager&lt;/em&gt;.
It gets invoked early enough in the pipeline, has access to the HTTP protocol details
of the incoming request and can set Thread.CurrentPrincipal. The job of the SAM is
simple:
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
Check the &lt;em&gt;Authorization&lt;/em&gt; header of the incoming HTTP request&lt;/li&gt;
&lt;li&gt;
Check if a “registered” token (more on that later) is present&lt;/li&gt;
&lt;li&gt;
If yes, validate the token using a security token handler, create the claims principal
(including claims transformation) and set Thread.CurrentPrincipal&lt;/li&gt;
&lt;li&gt;
If no, set an anonymous principal on &lt;em&gt;Thread.CurrentPrincipal&lt;/em&gt;. By default,
anonymous principals are denied access – so the request ends here with a 401 (more
on that later).&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
To wire up the custom authorization manager you need a custom service host – which
in turn needs a custom service host factory. The full object model looks like this:
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.leastprivilege.com/content/binary/wcfrestauthn.png"&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Token handling&lt;/strong&gt;
&lt;br&gt;
A nice piece of existing WIF infrastructure are security token handlers. Their job
is to serialize a received security token into a CLR representation, validate the
token and turn the token into claims. 
&lt;/p&gt;
&lt;p&gt;
The way this works with WS-Security based services is that WIF passes the name/namespace
of the incoming token to WIF’s security token handler collection. This in turn finds
out which token handler can deal with the token and returns the right instances.
&lt;/p&gt;
&lt;p&gt;
For HTTP based services we can do something very similar. The scheme on the Authorization
header gives the service a hint how to deal with an incoming token. So the only missing
link is a way to associate a token handler (or multiple token handlers) with a scheme
and we are (almost) done.
&lt;/p&gt;
&lt;p&gt;
WIF already includes token handler for a variety of tokens like username/password
or SAML 1.1/2.0. The accompanying sample has a implementation for a Simple Web Token
(SWT) token handler, and as soon as JSON Web Token are ready, simply adding a corresponding
token handler will add support for this token type, too.
&lt;/p&gt;
&lt;p&gt;
All supported schemes/token types are organized in a &lt;em&gt;WebSecurityTokenHandlerCollectionManager&lt;/em&gt; and
passed into the host factory/host/authorization manager.
&lt;/p&gt;
&lt;p&gt;
Adding support for basic authentication against a membership provider would e.g. look
like this (in global.asax):
&lt;/p&gt;
&lt;pre style="line-height: normal; font-family: ; background: white"&gt;&lt;font face="Consolas"&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size: 11.3pt"&gt;var&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size: 11.3pt"&gt;&lt;font color="#000000"&gt; manager
= &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;nbsp;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;WebSecurityTokenHandlerCollectionManager&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font style="font-size: 11.3pt"&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;();&lt;br&gt;
&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;
&lt;pre style="line-height: normal; font-family: ; background: white"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 11.3pt"&gt;&lt;font color="#000000"&gt;
&lt;br&gt;
manager.AddBasicAuthenticationHandler((username, password) =&amp;gt; 
&lt;br&gt;
&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;Membership&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;.ValidateUser(username,
password));&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Adding support for Simple Web Tokens with a scheme of &lt;em&gt;Bearer&lt;/em&gt; (the current
OAuth2 scheme) requires passing in a issuer, audience and signature verification key:
&lt;/p&gt;
&lt;pre style="line-height: normal; font-family: ; background: white; color: "&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;&lt;font style="font-size: 11.3pt"&gt;manager.AddSimpleWebTokenHandler(&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/font&gt;&lt;font style="font-size: 11.3pt"&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;"Bearer"&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font style="font-size: 11.3pt"&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;,&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;"http://identityserver.thinktecture.com/trust/initial"&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;,&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;"https://roadie/webservicesecurity/rest/"&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 11.3pt"&gt;&lt;font color="#000000"&gt;,&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;"WFD7i8XRHsrUPEdwSisdHoHy08W3lM16Bk6SCT8ht6A="&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;);&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;
&lt;p&gt;
In some situations, SAML token may be used as well. The following configures SAML
support for a token coming from ADFS2:
&lt;/p&gt;
&lt;pre style="line-height: normal; font-family: ; background: white; color: "&gt;&lt;font face="Consolas"&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size: 11.3pt"&gt;var&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size: 11.3pt"&gt;&lt;font color="#000000"&gt; registry
= &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;nbsp;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;ConfigurationBasedIssuerNameRegistry&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font style="font-size: 11.3pt"&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;();&lt;br&gt;
registry.AddTrustedIssuer(&lt;br&gt;
&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt; "d1 c5 b1 25 97 d0 36 94 65 1c
e2 64 fe 48 06 01 35 f7 bd db"&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;, &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;"ADFS"&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;); &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; adfsConfig
= &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;nbsp;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;SecurityTokenHandlerConfiguration&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;();&lt;br&gt;
adfsConfig.AudienceRestriction.AllowedAudienceUris.Add(&lt;br&gt;
&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;nbsp;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;Uri&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;"https://roadie/webservicesecurity/rest/"&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;));&lt;br&gt;
adfsConfig.IssuerNameRegistry = registry;&lt;br&gt;
adfsConfig.CertificateValidator = &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;X509CertificateValidator&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;.None; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#008000"&gt;//
token decryption (read from config)&lt;/font&gt;&lt;/span&gt; &lt;font color="#000000"&gt;adfsConfig.ServiceTokenResolver
= 
&lt;br&gt;
&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;IdentityModelConfiguration&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 11.3pt"&gt;&lt;font color="#000000"&gt;.ServiceConfiguration.CreateAggregateTokenResolver();&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;br&gt;
manager.AddSaml11SecurityTokenHandler(&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;"SAML"&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;,
adfsConfig);&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;
&lt;p&gt;
&lt;strong&gt;&lt;/strong&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Transformation&lt;/strong&gt;
&lt;br&gt;
The custom authorization manager will also try to invoke a configured claims authentication
manager. This means that the standard WIF claims transformation logic can be used
here as well. And even better, can be also shared with e.g. a “surrounding” web application.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Error handling&lt;br&gt;
&lt;/strong&gt;A WCF error handler takes care of turning “access denied” faults into 401
status codes and a message inspector adds the registered authentication schemes to
the outgoing &lt;em&gt;WWW-Authenticate&lt;/em&gt; header when a 401 occurs.
&lt;/p&gt;
&lt;p&gt;
The next post will conclude with authorization as well as the source code download.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
(Wanna learn more about federation, WIF, claims, tokens etc.? Click &lt;a href="http://www.leastprivilege.com/NeedWIFTraining.aspx"&gt;here&lt;/a&gt;.)
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=91c6199c-ad18-4bc1-a191-98de88c8a052" /&gt;</description>
      <category>IdentityModel</category>
      <category>IdentityServer</category>
    </item>
    <item>
      <trackback:ping>http://www.leastprivilege.com/Trackback.aspx?guid=194b38e2-4da8-4fbe-b7d3-e7d8263fa44d</trackback:ping>
      <pingback:server>http://www.leastprivilege.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.leastprivilege.com/PermaLink.aspx?guid=194b38e2-4da8-4fbe-b7d3-e7d8263fa44d</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
WIF as it exists today is optimized for web applications (passive/WS-Federation) and
SOAP based services (active/WS-Trust). While there is limited support for WCF WebServiceHost
based services (for standard credential types like Windows and Basic), there is no
ready to use plumbing for RESTful services that do authentication based on tokens.
</p>
        <p>
This is not an oversight from the WIF team, but the REST services security world is
currently rapidly changing – and that’s by design. There are a number of <a href="http://www.oasis-open.org/committees/tc_home.php?wg_abbrev=security">intermediate</a> solutions,
emerging <a href="http://oauth.net/2/">protocols</a> and token <a href="http://tools.ietf.org/html/draft-jones-oauth-jwt-bearer-01">types</a>,
as well as some already <a href="http://wiki.oauth.net/w/page/12238537/OAuth%20WRAP">deprecated</a><a href="http://wrap-wg.googlegroups.com/attach/38c3c90481d6065c/SWT-v0.9.5.1.pdf?view=1&amp;part=5">ones</a>.
So it didn’t make sense to bake that into the core feature set of WIF.
</p>
        <p>
But after all, the F in WIF stands for Foundation. So just like the WIF APIs integrate
tokens and claims into other hosts, this is also (easily) possible with RESTful services.
Here’s how.
</p>
        <p>
          <strong>HTTP Services and Authentication</strong>
          <br />
Unlike SOAP services, in the REST world there is no (over) specified security framework
like WS-Security. Instead standard HTTP means are used to transmit credentials and
SSL is used to secure the transport and data in transit. 
</p>
        <p>
For most cases the HTTP <em>Authorize</em> header is used to transmit the security
token (this can be as simple as a username/password up to issued tokens of some sort).
The <em>Authorize</em> header consists of the actual credential (consider this opaque
from a transport perspective) as well as a scheme. The scheme is some string that
gives the service a hint what type of credential was used (e.g. <em>Basic</em> for
basic authentication credentials). HTTP also includes a way to advertise the right
credential type back to the client, for this the <em>WWW-Authenticate</em> response
header is used.
</p>
        <p>
          <img src="http://www.leastprivilege.com/content/binary/restauthn.png" width="690" height="155" />
        </p>
        <p>
So for token based authentication, the service would simply need to read the incoming <em>Authorization</em> header,
extract the token, parse and validate it. After the token has been validated, you
also typically want some sort of client identity representation based on the incoming
token. This is regardless of how technology-wise the actual service was built. In
ASP.NET (MVC) you could use an <em>HttpModule</em> or an <em>ActionFilter</em>. In
(todays) WCF, you would use the <em>ServiceAuthorizationManager</em> infrastructure.
The nice thing about using WCF’ native extensibility points is that you get self-hosting
for free.
</p>
        <p>
This is where WIF comes into play. WIF has ready to use infrastructure built-in that
just need to be plugged into the corresponding hosting environment:
</p>
        <ul>
          <li>
Representation of identity based on claims. This is a very natural way of translating
a security token (and again I mean this in the widest sense – could be also a username/password)
into something our applications can work with.</li>
          <li>
Infrastructure to convert tokens into claims (called security token handler)</li>
          <li>
Claims transformation</li>
          <li>
Claims-based authorization</li>
        </ul>
        <p>
So much for the theory. In the next post I will show you how to implement that for
WCF – including full source code and samples.
</p>
        <p>
(Wanna learn more about federation, WIF, claims, tokens etc.? Click <a href="http://www.leastprivilege.com/NeedWIFTraining.aspx">here</a>.)
</p>
        <img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=194b38e2-4da8-4fbe-b7d3-e7d8263fa44d" />
      </body>
      <title>Token based Authentication and Claims for Restful Services</title>
      <guid isPermaLink="false">http://www.leastprivilege.com/PermaLink.aspx?guid=194b38e2-4da8-4fbe-b7d3-e7d8263fa44d</guid>
      <link>http://www.leastprivilege.com/TokenBasedAuthenticationAndClaimsForRestfulServices.aspx</link>
      <pubDate>Tue, 15 Nov 2011 09:25:32 GMT</pubDate>
      <description>&lt;p&gt;
WIF as it exists today is optimized for web applications (passive/WS-Federation) and
SOAP based services (active/WS-Trust). While there is limited support for WCF WebServiceHost
based services (for standard credential types like Windows and Basic), there is no
ready to use plumbing for RESTful services that do authentication based on tokens.
&lt;/p&gt;
&lt;p&gt;
This is not an oversight from the WIF team, but the REST services security world is
currently rapidly changing – and that’s by design. There are a number of &lt;a href="http://www.oasis-open.org/committees/tc_home.php?wg_abbrev=security"&gt;intermediate&lt;/a&gt; solutions,
emerging &lt;a href="http://oauth.net/2/"&gt;protocols&lt;/a&gt; and token &lt;a href="http://tools.ietf.org/html/draft-jones-oauth-jwt-bearer-01"&gt;types&lt;/a&gt;,
as well as some already &lt;a href="http://wiki.oauth.net/w/page/12238537/OAuth%20WRAP"&gt;deprecated&lt;/a&gt; &lt;a href="http://wrap-wg.googlegroups.com/attach/38c3c90481d6065c/SWT-v0.9.5.1.pdf?view=1&amp;amp;part=5"&gt;ones&lt;/a&gt;.
So it didn’t make sense to bake that into the core feature set of WIF.
&lt;/p&gt;
&lt;p&gt;
But after all, the F in WIF stands for Foundation. So just like the WIF APIs integrate
tokens and claims into other hosts, this is also (easily) possible with RESTful services.
Here’s how.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;HTTP Services and Authentication&lt;/strong&gt;
&lt;br&gt;
Unlike SOAP services, in the REST world there is no (over) specified security framework
like WS-Security. Instead standard HTTP means are used to transmit credentials and
SSL is used to secure the transport and data in transit. 
&lt;/p&gt;
&lt;p&gt;
For most cases the HTTP &lt;em&gt;Authorize&lt;/em&gt; header is used to transmit the security
token (this can be as simple as a username/password up to issued tokens of some sort).
The &lt;em&gt;Authorize&lt;/em&gt; header consists of the actual credential (consider this opaque
from a transport perspective) as well as a scheme. The scheme is some string that
gives the service a hint what type of credential was used (e.g. &lt;em&gt;Basic&lt;/em&gt; for
basic authentication credentials). HTTP also includes a way to advertise the right
credential type back to the client, for this the &lt;em&gt;WWW-Authenticate&lt;/em&gt; response
header is used.
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.leastprivilege.com/content/binary/restauthn.png" width="690" height="155"&gt;
&lt;/p&gt;
&lt;p&gt;
So for token based authentication, the service would simply need to read the incoming &lt;em&gt;Authorization&lt;/em&gt; header,
extract the token, parse and validate it. After the token has been validated, you
also typically want some sort of client identity representation based on the incoming
token. This is regardless of how technology-wise the actual service was built. In
ASP.NET (MVC) you could use an &lt;em&gt;HttpModule&lt;/em&gt; or an &lt;em&gt;ActionFilter&lt;/em&gt;. In
(todays) WCF, you would use the &lt;em&gt;ServiceAuthorizationManager&lt;/em&gt; infrastructure.
The nice thing about using WCF’ native extensibility points is that you get self-hosting
for free.
&lt;/p&gt;
&lt;p&gt;
This is where WIF comes into play. WIF has ready to use infrastructure built-in that
just need to be plugged into the corresponding hosting environment:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Representation of identity based on claims. This is a very natural way of translating
a security token (and again I mean this in the widest sense – could be also a username/password)
into something our applications can work with.&lt;/li&gt;
&lt;li&gt;
Infrastructure to convert tokens into claims (called security token handler)&lt;/li&gt;
&lt;li&gt;
Claims transformation&lt;/li&gt;
&lt;li&gt;
Claims-based authorization&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
So much for the theory. In the next post I will show you how to implement that for
WCF – including full source code and samples.
&lt;/p&gt;
&lt;p&gt;
(Wanna learn more about federation, WIF, claims, tokens etc.? Click &lt;a href="http://www.leastprivilege.com/NeedWIFTraining.aspx"&gt;here&lt;/a&gt;.)
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=194b38e2-4da8-4fbe-b7d3-e7d8263fa44d" /&gt;</description>
      <category>IdentityModel</category>
      <category>IdentityServer</category>
    </item>
    <item>
      <trackback:ping>http://www.leastprivilege.com/Trackback.aspx?guid=5978b7bc-33cb-4d5f-ade2-fb9fee2eeff7</trackback:ping>
      <pingback:server>http://www.leastprivilege.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.leastprivilege.com/PermaLink.aspx?guid=5978b7bc-33cb-4d5f-ade2-fb9fee2eeff7</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I spend numerous hours every month answering questions about WIF and identity in general.
This made me realize that this is still quite a complicated topic once you go beyond
the standard fedutil stuff.
</p>
        <p>
My good friend Brock and I put together a two day training course about WIF that covers
everything we think is important. The course includes extensive lab material where
you take standard application and apply all kinds of claims and federation techniques
and technologies like WS-Federation, WS-Trust, session management, delegation, home
realm discovery, multiple identity providers, Access Control Service, REST, SWT and
OAuth. The lab also includes the latest version of the thinktecture identityserver
and you will learn how to use and customize it.
</p>
        <p>
If you are looking for an open enrollment style of training, have a look <a href="http://www.develop.com/training-course/windows-identity-foundation">here</a> or <a href="http://www.programutvikling.no/kurskalenderoversikt.aspx?mid_1=1352&amp;mid=1535&amp;id=1253215" target="_blank">here</a>.
Or contact me directly!
</p>
        <p>
The course outline looks as follows:
</p>
        <p>
          <strong>
            <font size="3">Day 1</font>
          </strong>
          <br />
          <strong>Intro to Claims-based Identity &amp; the Windows Identity Foundation<br /></strong>WIF introduces important concepts like conversion of security tokens and
credentials to claims, claims transformation and claims-based authorization. In this
module you will learn the basics of the WIF programming model and how WIF integrates
into existing .NET code.
</p>
        <p>
          <strong>Externalizing Authentication for Web Applications</strong>
          <br />
WIF includes support for the WS-Federation protocol. This protocol allows separating
business and authentication logic into separate (distributed) applications. The authentication
part is called identity provider or in more general terms - a security token service.
This module looks at this scenario both from an application and identity provider
point of view and walks you through the necessary concepts to centralize application
login logic both using a standard product like Active Directory Federation Services
as well as a custom token service using WIF’s API support.
</p>
        <p>
          <strong>Externalizing Authentication for SOAP Services<br /></strong>One big benefit of WIF is that it unifies the security programming model
for ASP.NET and WCF. In the spirit of the preceding modules, we will have a look at
how WIF integrates into the (SOAP) web service world. You will learn how to separate
authentication into a separate service using the WS-Trust protocol and how WIF can
simplify the WCF security model and extensibility API.<br /></p>
        <p>
          <strong>
            <font size="3">Day 2</font>
          </strong>
          <br />
          <strong>Advanced Topics:  Security Token Service Architecture, Delegation and
Federation</strong>
          <br />
The preceding modules covered the 80/20 cases of WIF in combination with ASP.NET and
WCF. In many scenarios this is just the tip of the iceberg. Especially when two business
partners decide to federate, you usually have to deal with multiple token services
and their implications in application design. Identity delegation is a feature that
allows transporting the client identity over a chain of service invocations to make
authorization decisions over multiple hops. In addition you will learn about the principal
architecture of a STS, how to customize the one that comes with this training course,
as well as how to build your own.
</p>
        <p>
          <strong>Outsourcing Authentication:  Windows Azure &amp; the Azure AppFabric
Access Control Service<br /></strong>Microsoft provides a multi-tenant security token service as part of the Azure
platform cloud offering. This is an interesting product because it allows to outsource
vital infrastructure services to a managed environment that guarantees uptime and
scalability. Another advantage of the Access Control Service is, that it allows easy
integration of both the “enterprise” protocols like WS-* as well as “web identities”
like LiveID, Google or Facebook into your applications. ACS acts as a protocol bridge
in this case where the application developer doesn’t need to implement all these protocols,
but simply uses a service to make it happen.
</p>
        <p>
          <strong>Claims &amp; Federation for the Web and Mobile World</strong>
          <br />
Also the web &amp; mobile world moves to a token and claims-based model. While the
mechanics are almost identical, other protocols and token types are used to achieve
better HTTP (REST) and JavaScript integration for in-browser applications and small
footprint devices. Also patterns like how to allow third party applications to work
with your data without having to disclose your credentials are important concepts
in these application types. The nice thing about WIF and its powerful base APIs and
abstractions is that it can shield application logic from these details while you
can focus on implementing the actual application.
</p>
        <p>
HTH
</p>
        <img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=5978b7bc-33cb-4d5f-ade2-fb9fee2eeff7" />
      </body>
      <title>Need WIF Training?</title>
      <guid isPermaLink="false">http://www.leastprivilege.com/PermaLink.aspx?guid=5978b7bc-33cb-4d5f-ade2-fb9fee2eeff7</guid>
      <link>http://www.leastprivilege.com/NeedWIFTraining.aspx</link>
      <pubDate>Wed, 09 Nov 2011 08:18:16 GMT</pubDate>
      <description>&lt;p&gt;
I spend numerous hours every month answering questions about WIF and identity in general.
This made me realize that this is still quite a complicated topic once you go beyond
the standard fedutil stuff.
&lt;/p&gt;
&lt;p&gt;
My good friend Brock and I put together a two day training course about WIF that covers
everything we think is important. The course includes extensive lab material where
you take standard application and apply all kinds of claims and federation techniques
and technologies like WS-Federation, WS-Trust, session management, delegation, home
realm discovery, multiple identity providers, Access Control Service, REST, SWT and
OAuth. The lab also includes the latest version of the thinktecture identityserver
and you will learn how to use and customize it.
&lt;/p&gt;
&lt;p&gt;
If you are looking for an open enrollment style of training, have a look &lt;a href="http://www.develop.com/training-course/windows-identity-foundation"&gt;here&lt;/a&gt; or &lt;a href="http://www.programutvikling.no/kurskalenderoversikt.aspx?mid_1=1352&amp;amp;mid=1535&amp;amp;id=1253215" target="_blank"&gt;here&lt;/a&gt;.
Or contact me directly!
&lt;/p&gt;
&lt;p&gt;
The course outline looks as follows:
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&lt;font size="3"&gt;Day 1&lt;/font&gt;&lt;/strong&gt;
&lt;br&gt;
&lt;strong&gt;Intro to Claims-based Identity &amp;amp; the Windows Identity Foundation&lt;br&gt;
&lt;/strong&gt;WIF introduces important concepts like conversion of security tokens and
credentials to claims, claims transformation and claims-based authorization. In this
module you will learn the basics of the WIF programming model and how WIF integrates
into existing .NET code.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Externalizing Authentication for Web Applications&lt;/strong&gt;
&lt;br&gt;
WIF includes support for the WS-Federation protocol. This protocol allows separating
business and authentication logic into separate (distributed) applications. The authentication
part is called identity provider or in more general terms - a security token service.
This module looks at this scenario both from an application and identity provider
point of view and walks you through the necessary concepts to centralize application
login logic both using a standard product like Active Directory Federation Services
as well as a custom token service using WIF’s API support.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Externalizing Authentication for SOAP Services&lt;br&gt;
&lt;/strong&gt;One big benefit of WIF is that it unifies the security programming model
for ASP.NET and WCF. In the spirit of the preceding modules, we will have a look at
how WIF integrates into the (SOAP) web service world. You will learn how to separate
authentication into a separate service using the WS-Trust protocol and how WIF can
simplify the WCF security model and extensibility API.&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&lt;font size="3"&gt;Day 2&lt;/font&gt;&lt;/strong&gt;
&lt;br&gt;
&lt;strong&gt;Advanced Topics:&amp;nbsp; Security Token Service Architecture, Delegation and
Federation&lt;/strong&gt;
&lt;br&gt;
The preceding modules covered the 80/20 cases of WIF in combination with ASP.NET and
WCF. In many scenarios this is just the tip of the iceberg. Especially when two business
partners decide to federate, you usually have to deal with multiple token services
and their implications in application design. Identity delegation is a feature that
allows transporting the client identity over a chain of service invocations to make
authorization decisions over multiple hops. In addition you will learn about the principal
architecture of a STS, how to customize the one that comes with this training course,
as well as how to build your own.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Outsourcing Authentication:&amp;nbsp; Windows Azure &amp;amp; the Azure AppFabric
Access Control Service&lt;br&gt;
&lt;/strong&gt;Microsoft provides a multi-tenant security token service as part of the Azure
platform cloud offering. This is an interesting product because it allows to outsource
vital infrastructure services to a managed environment that guarantees uptime and
scalability. Another advantage of the Access Control Service is, that it allows easy
integration of both the “enterprise” protocols like WS-* as well as “web identities”
like LiveID, Google or Facebook into your applications. ACS acts as a protocol bridge
in this case where the application developer doesn’t need to implement all these protocols,
but simply uses a service to make it happen.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Claims &amp;amp; Federation for the Web and Mobile World&lt;/strong&gt;
&lt;br&gt;
Also the web &amp;amp; mobile world moves to a token and claims-based model. While the
mechanics are almost identical, other protocols and token types are used to achieve
better HTTP (REST) and JavaScript integration for in-browser applications and small
footprint devices. Also patterns like how to allow third party applications to work
with your data without having to disclose your credentials are important concepts
in these application types. The nice thing about WIF and its powerful base APIs and
abstractions is that it can shield application logic from these details while you
can focus on implementing the actual application.
&lt;/p&gt;
&lt;p&gt;
HTH
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=5978b7bc-33cb-4d5f-ade2-fb9fee2eeff7" /&gt;</description>
      <category>IdentityModel</category>
      <category>IdentityServer</category>
    </item>
    <item>
      <trackback:ping>http://www.leastprivilege.com/Trackback.aspx?guid=4cbf8a89-c3fb-4b45-ae42-d2bb2ae6e701</trackback:ping>
      <pingback:server>http://www.leastprivilege.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.leastprivilege.com/PermaLink.aspx?guid=4cbf8a89-c3fb-4b45-ae42-d2bb2ae6e701</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
ADFS uses SSL extended protection which made observing traffic with Fiddler harder
to impossible.
</p>
        <p>
Fortunately, this can be fixed – Eric Lawrence writes about it <a href="http://blogs.msdn.com/b/fiddler/archive/2011/09/04/fiddler-http-401-authentication-workaround-to-support-channel-binding-tokens-removing-endless-prompts.aspx">here</a>.
</p>
        <img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=4cbf8a89-c3fb-4b45-ae42-d2bb2ae6e701" />
      </body>
      <title>Fiddling with ADFS Traffic</title>
      <guid isPermaLink="false">http://www.leastprivilege.com/PermaLink.aspx?guid=4cbf8a89-c3fb-4b45-ae42-d2bb2ae6e701</guid>
      <link>http://www.leastprivilege.com/FiddlingWithADFSTraffic.aspx</link>
      <pubDate>Sun, 06 Nov 2011 12:01:23 GMT</pubDate>
      <description>&lt;p&gt;
ADFS uses SSL extended protection which made observing traffic with Fiddler harder
to impossible.
&lt;/p&gt;
&lt;p&gt;
Fortunately, this can be fixed – Eric Lawrence writes about it &lt;a href="http://blogs.msdn.com/b/fiddler/archive/2011/09/04/fiddler-http-401-authentication-workaround-to-support-channel-binding-tokens-removing-endless-prompts.aspx"&gt;here&lt;/a&gt;.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=4cbf8a89-c3fb-4b45-ae42-d2bb2ae6e701" /&gt;</description>
      <category>IdentityModel</category>
    </item>
    <item>
      <trackback:ping>http://www.leastprivilege.com/Trackback.aspx?guid=1a23ac87-424f-4695-80fe-986d847f665e</trackback:ping>
      <pingback:server>http://www.leastprivilege.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.leastprivilege.com/PermaLink.aspx?guid=1a23ac87-424f-4695-80fe-986d847f665e</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I just <a href="http://identityserver.codeplex.com/releases/view/76156">uploaded</a> a
new version of the sample relying party. The three changes are:
</p>
        <ul>
          <li>
Added a session token diagnostics page. This allows to look at cookie sizes, details
and the raw contents</li>
          <li>
Sample code to switch to session mode</li>
          <li>
Sample code to implement sliding expiration</li>
        </ul>
        <p>
This was already included since 1.0:
</p>
        <ul>
          <li>
WS-Federation example</li>
          <li>
Claims viewer</li>
          <li>
Token viewer</li>
          <li>
Active sign in via WS-Trust</li>
          <li>
Delegation</li>
        </ul>
        <p>
HTH
</p>
        <img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=1a23ac87-424f-4695-80fe-986d847f665e" />
      </body>
      <title>Updated IdentityServer Sample Relying Party</title>
      <guid isPermaLink="false">http://www.leastprivilege.com/PermaLink.aspx?guid=1a23ac87-424f-4695-80fe-986d847f665e</guid>
      <link>http://www.leastprivilege.com/UpdatedIdentityServerSampleRelyingParty.aspx</link>
      <pubDate>Wed, 02 Nov 2011 18:28:55 GMT</pubDate>
      <description>&lt;p&gt;
I just &lt;a href="http://identityserver.codeplex.com/releases/view/76156"&gt;uploaded&lt;/a&gt; a
new version of the sample relying party. The three changes are:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Added a session token diagnostics page. This allows to look at cookie sizes, details
and the raw contents&lt;/li&gt;
&lt;li&gt;
Sample code to switch to session mode&lt;/li&gt;
&lt;li&gt;
Sample code to implement sliding expiration&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
This was already included since 1.0:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
WS-Federation example&lt;/li&gt;
&lt;li&gt;
Claims viewer&lt;/li&gt;
&lt;li&gt;
Token viewer&lt;/li&gt;
&lt;li&gt;
Active sign in via WS-Trust&lt;/li&gt;
&lt;li&gt;
Delegation&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
HTH
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=1a23ac87-424f-4695-80fe-986d847f665e" /&gt;</description>
      <category>IdentityModel</category>
      <category>IdentityServer</category>
    </item>
    <item>
      <trackback:ping>http://www.leastprivilege.com/Trackback.aspx?guid=a810cdce-cd07-43a9-8db7-5e3e6ae0bde9</trackback:ping>
      <pingback:server>http://www.leastprivilege.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.leastprivilege.com/PermaLink.aspx?guid=a810cdce-cd07-43a9-8db7-5e3e6ae0bde9</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
To make it short: to switch to SessionMode (cache to server) in ASP.NET, you need
to handle an event and set a property. Sounds easy – but you need to set it in the
right place.
</p>
        <p>
The most popular blog post about this topic is from <a href="http://blogs.msdn.com/b/vbertocci/archive/2010/05/26/your-fedauth-cookies-on-a-diet-issessionmode-true.aspx">Vittorio</a>.
He advises to set <em>IsSessionMode</em> in <em>WSFederationAuthenticationModule_SessionSecurityTokenCreated</em>.
</p>
        <p>
Now there were some open questions on forum, like this <a href="http://social.msdn.microsoft.com/Forums/en-US/Geneva/thread/62ad1a26-e128-4227-8e39-57b38d9f75cb/">one</a>.
So I decided to try it myself – and indeed it didn’t work for me as well. So I digged
a little deeper, and after some trial and error I found the right place (in global.asax):
</p>
        <pre style="line-height: normal; font-family: ; background: white">
          <font face="Consolas">
            <span style="color: ">
              <font color="#0000ff">
                <font style="font-size: 11.3pt">void</font>
              </font>
            </span>
            <font style="font-size: 11.3pt">
              <font color="#000000"> WSFederationAuthenticationModule_SecurityTokenValidated(<br /></font>
              <span style="color: ">
                <font color="#0000ff">object</font>
              </span>
              <font color="#000000"> sender, </font>
              <span style="color: ">
                <font color="#2b91af">SecurityTokenValidatedEventArgs</font>
              </span>
            </font>
          </font>
          <font face="Consolas">
            <font style="font-size: 11.3pt">
              <font color="#000000"> e)<br />
{<br />
    </font>
              <span style="color: ">
                <font color="#2b91af">FederatedAuthentication</font>
              </span>
              <font color="#000000">.SessionAuthenticationModule.IsSessionMode
= </font>
              <span style="color: ">
                <font color="#0000ff">true</font>
              </span>
              <font color="#000000">; 
<br /></font>
              <font color="#000000">}</font>
            </font>
          </font>
        </pre>
        <p>
Not sure if anything has changed since Vittorio’s post – but this worked for me.
</p>
        <p>
While playing around, I also wrote a little diagnostics tool that allows you to look
into the session cookie (for educational purposes). Will post that soon.
</p>
        <p>
HTH
</p>
        <img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=a810cdce-cd07-43a9-8db7-5e3e6ae0bde9" />
      </body>
      <title>Switching to WIF SessionMode in ASP.NET</title>
      <guid isPermaLink="false">http://www.leastprivilege.com/PermaLink.aspx?guid=a810cdce-cd07-43a9-8db7-5e3e6ae0bde9</guid>
      <link>http://www.leastprivilege.com/SwitchingToWIFSessionModeInASPNET.aspx</link>
      <pubDate>Wed, 02 Nov 2011 15:55:40 GMT</pubDate>
      <description>&lt;p&gt;
To make it short: to switch to SessionMode (cache to server) in ASP.NET, you need
to handle an event and set a property. Sounds easy – but you need to set it in the
right place.
&lt;/p&gt;
&lt;p&gt;
The most popular blog post about this topic is from &lt;a href="http://blogs.msdn.com/b/vbertocci/archive/2010/05/26/your-fedauth-cookies-on-a-diet-issessionmode-true.aspx"&gt;Vittorio&lt;/a&gt;.
He advises to set &lt;em&gt;IsSessionMode&lt;/em&gt; in &lt;em&gt;WSFederationAuthenticationModule_SessionSecurityTokenCreated&lt;/em&gt;.
&lt;/p&gt;
&lt;p&gt;
Now there were some open questions on forum, like this &lt;a href="http://social.msdn.microsoft.com/Forums/en-US/Geneva/thread/62ad1a26-e128-4227-8e39-57b38d9f75cb/"&gt;one&lt;/a&gt;.
So I decided to try it myself – and indeed it didn’t work for me as well. So I digged
a little deeper, and after some trial and error I found the right place (in global.asax):
&lt;/p&gt;
&lt;pre style="line-height: normal; font-family: ; background: white"&gt;&lt;font face="Consolas"&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size: 11.3pt"&gt;void&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size: 11.3pt"&gt;&lt;font color="#000000"&gt; WSFederationAuthenticationModule_SecurityTokenValidated(&lt;br&gt;
&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;object&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; sender, &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;SecurityTokenValidatedEventArgs&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 11.3pt"&gt;&lt;font color="#000000"&gt; e)&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;FederatedAuthentication&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;.SessionAuthenticationModule.IsSessionMode
= &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;true&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;; 
&lt;br&gt;
&lt;/font&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;
&lt;p&gt;
Not sure if anything has changed since Vittorio’s post – but this worked for me.
&lt;/p&gt;
&lt;p&gt;
While playing around, I also wrote a little diagnostics tool that allows you to look
into the session cookie (for educational purposes). Will post that soon.
&lt;/p&gt;
&lt;p&gt;
HTH
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=a810cdce-cd07-43a9-8db7-5e3e6ae0bde9" /&gt;</description>
      <category>IdentityModel</category>
    </item>
    <item>
      <trackback:ping>http://www.leastprivilege.com/Trackback.aspx?guid=9f7d1976-93b4-40ba-ad33-e1ede72779f7</trackback:ping>
      <pingback:server>http://www.leastprivilege.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.leastprivilege.com/PermaLink.aspx?guid=9f7d1976-93b4-40ba-ad33-e1ede72779f7</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
This fell through the cracks over the summer holiday time:
</p>
        <p>
          <strong>The 2nd edition of the Patterns &amp; Practices “claims guide” has been released.
This is excellent!</strong>
        </p>
        <p>
We added a lot of content around ADFS, Access Control Service, REST and SharePoint.
All source code is available as well!
</p>
        <p>
Grab it from: <a href="http://msdn.microsoft.com/en-us/library/ff423674.aspx">http://msdn.microsoft.com/en-us/library/ff423674.aspx</a></p>
        <p>
Or use my vanity URL: <a href="http://tinyurl.com/claimsguide">http://tinyurl.com/claimsguide</a></p>
        <img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=9f7d1976-93b4-40ba-ad33-e1ede72779f7" />
      </body>
      <title>Guide to Claims-based Identity and Access Control (2nd Edition)</title>
      <guid isPermaLink="false">http://www.leastprivilege.com/PermaLink.aspx?guid=9f7d1976-93b4-40ba-ad33-e1ede72779f7</guid>
      <link>http://www.leastprivilege.com/GuideToClaimsbasedIdentityAndAccessControl2ndEdition.aspx</link>
      <pubDate>Fri, 28 Oct 2011 07:49:30 GMT</pubDate>
      <description>&lt;p&gt;
This fell through the cracks over the summer holiday time:
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;The 2nd edition of the Patterns &amp;amp; Practices “claims guide” has been released.
This is excellent!&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
We added a lot of content around ADFS, Access Control Service, REST and SharePoint.
All source code is available as well!
&lt;/p&gt;
&lt;p&gt;
Grab it from: &lt;a href="http://msdn.microsoft.com/en-us/library/ff423674.aspx"&gt;http://msdn.microsoft.com/en-us/library/ff423674.aspx&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Or use my vanity URL: &lt;a href="http://tinyurl.com/claimsguide"&gt;http://tinyurl.com/claimsguide&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=9f7d1976-93b4-40ba-ad33-e1ede72779f7" /&gt;</description>
      <category>IdentityModel</category>
    </item>
    <item>
      <trackback:ping>http://www.leastprivilege.com/Trackback.aspx?guid=bd113b99-d1a3-4174-bb92-e91fe521817c</trackback:ping>
      <pingback:server>http://www.leastprivilege.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.leastprivilege.com/PermaLink.aspx?guid=bd113b99-d1a3-4174-bb92-e91fe521817c</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://sharepintblog.com">Brian</a> has posted a great walkthrough on how
to setup idsrv in conjunction with SharePoint. Thanks!
</p>
        <p>
          <a href="http://sharepintblog.com/2011/10/23/sharepoint-claims-based-authentication-with-thinktecture-identity-server-walkthrough/">http://sharepintblog.com/2011/10/23/sharepoint-claims-based-authentication-with-thinktecture-identity-server-walkthrough/</a>
        </p>
        <img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=bd113b99-d1a3-4174-bb92-e91fe521817c" />
      </body>
      <title>IdentityServer and SharePoint Walkthrough</title>
      <guid isPermaLink="false">http://www.leastprivilege.com/PermaLink.aspx?guid=bd113b99-d1a3-4174-bb92-e91fe521817c</guid>
      <link>http://www.leastprivilege.com/IdentityServerAndSharePointWalkthrough.aspx</link>
      <pubDate>Mon, 24 Oct 2011 14:13:14 GMT</pubDate>
      <description>&lt;p&gt;
&lt;a href="http://sharepintblog.com"&gt;Brian&lt;/a&gt; has posted a great walkthrough on how
to setup idsrv in conjunction with SharePoint. Thanks!
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://sharepintblog.com/2011/10/23/sharepoint-claims-based-authentication-with-thinktecture-identity-server-walkthrough/"&gt;http://sharepintblog.com/2011/10/23/sharepoint-claims-based-authentication-with-thinktecture-identity-server-walkthrough/&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=bd113b99-d1a3-4174-bb92-e91fe521817c" /&gt;</description>
      <category>IdentityServer</category>
    </item>
    <item>
      <trackback:ping>http://www.leastprivilege.com/Trackback.aspx?guid=2b7024d5-5eda-482c-8ac3-013d13a2c6d2</trackback:ping>
      <pingback:server>http://www.leastprivilege.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.leastprivilege.com/PermaLink.aspx?guid=2b7024d5-5eda-482c-8ac3-013d13a2c6d2</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I just uploaded the RC of <a href="http://identityserver.codeplex.com/releases/view/75473">IdentityServer</a> to <a href="http://identityserver.codeplex.com/">Codeplex</a>.
</p>
        <p>
This release is feature complete and if I don’t get any bug reports this is also pretty
much the final V1.
</p>
        <p>
          <strong>Changes from B1</strong>
        </p>
        <ul>
          <li>
The configuration data access is now based on EF 4.1 code first. This makes it much
easier to use different data stores. For RTM I will also provide a SQL script for
SQL Server so you can move the configuration to a separate machine (e.g. for load
balancing scenarios).</li>
          <li>
I included the ASP.NET Universal Providers in the download. This adds official support
for SQL Azure, SQL Server and SQL Compact for the membership, roles and profile features.
Unfortunately the Universal Provider use a different schema than the original ASP.NET
providers (that sucks btw!) – so I made them optional. If you want to use them go
to web.config and uncomment the new provider.</li>
          <li>
The relying party registration entries now have added fields to add extra data that
you want to couple with the RP. One use case could be to give the UI a hint how the
login experience should look like per RP. This allows to have a different look and
feel for different relying parties. I also included a small helper API that you can
use to retrieve the RP record based on the incoming WS-Federation query string.</li>
          <li>
WS-Federation single sign out is now conforming to the spec.</li>
          <li>
Certificate based endpoint identities for SSL endpoints are optional now.</li>
          <li>
Added a initial configuration “wizard”. This sets up the signing certificate, issuer
URI and site title on the first run.</li>
        </ul>
        <p>
          <strong>Installation</strong>
        </p>
        <p>
This is still a “developer” release – that means it ships with source code that you
have to build it etc. But from that point it should be a little more straightforward
as it used to be:
</p>
        <ul>
          <li>
Make sure SSL is configured correctly for IIS</li>
          <li>
Map the WebSite directory to a vdir in IIS</li>
          <li>
Run the web site. This should bring up the initial configuration</li>
          <li>
Make sure the worker process account has access to the signing certificate private
key</li>
          <li>
Make sure all your users are in the “IdentityServerUsers” role in your role store.
Administrators need the “IdentityServerAdministrators” role</li>
        </ul>
        <p>
That should be it. A proper documentation will be hopefully available soon (any volunteers?).<br /></p>
        <p>
Please provide feedback! thanks!
</p>
        <img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=2b7024d5-5eda-482c-8ac3-013d13a2c6d2" />
      </body>
      <title>Thinktecture.IdentityServer RC</title>
      <guid isPermaLink="false">http://www.leastprivilege.com/PermaLink.aspx?guid=2b7024d5-5eda-482c-8ac3-013d13a2c6d2</guid>
      <link>http://www.leastprivilege.com/ThinktectureIdentityServerRC.aspx</link>
      <pubDate>Fri, 21 Oct 2011 06:43:14 GMT</pubDate>
      <description>&lt;p&gt;
I just uploaded the RC of &lt;a href="http://identityserver.codeplex.com/releases/view/75473"&gt;IdentityServer&lt;/a&gt; to &lt;a href="http://identityserver.codeplex.com/"&gt;Codeplex&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
This release is feature complete and if I don’t get any bug reports this is also pretty
much the final V1.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Changes from B1&lt;/strong&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
The configuration data access is now based on EF 4.1 code first. This makes it much
easier to use different data stores. For RTM I will also provide a SQL script for
SQL Server so you can move the configuration to a separate machine (e.g. for load
balancing scenarios).&lt;/li&gt;
&lt;li&gt;
I included the ASP.NET Universal Providers in the download. This adds official support
for SQL Azure, SQL Server and SQL Compact for the membership, roles and profile features.
Unfortunately the Universal Provider use a different schema than the original ASP.NET
providers (that sucks btw!) – so I made them optional. If you want to use them go
to web.config and uncomment the new provider.&lt;/li&gt;
&lt;li&gt;
The relying party registration entries now have added fields to add extra data that
you want to couple with the RP. One use case could be to give the UI a hint how the
login experience should look like per RP. This allows to have a different look and
feel for different relying parties. I also included a small helper API that you can
use to retrieve the RP record based on the incoming WS-Federation query string.&lt;/li&gt;
&lt;li&gt;
WS-Federation single sign out is now conforming to the spec.&lt;/li&gt;
&lt;li&gt;
Certificate based endpoint identities for SSL endpoints are optional now.&lt;/li&gt;
&lt;li&gt;
Added a initial configuration “wizard”. This sets up the signing certificate, issuer
URI and site title on the first run.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;strong&gt;Installation&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
This is still a “developer” release – that means it ships with source code that you
have to build it etc. But from that point it should be a little more straightforward
as it used to be:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Make sure SSL is configured correctly for IIS&lt;/li&gt;
&lt;li&gt;
Map the WebSite directory to a vdir in IIS&lt;/li&gt;
&lt;li&gt;
Run the web site. This should bring up the initial configuration&lt;/li&gt;
&lt;li&gt;
Make sure the worker process account has access to the signing certificate private
key&lt;/li&gt;
&lt;li&gt;
Make sure all your users are in the “IdentityServerUsers” role in your role store.
Administrators need the “IdentityServerAdministrators” role&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
That should be it. A proper documentation will be hopefully available soon (any volunteers?).&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
Please provide feedback! thanks!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=2b7024d5-5eda-482c-8ac3-013d13a2c6d2" /&gt;</description>
      <category>IdentityServer</category>
    </item>
    <item>
      <trackback:ping>http://www.leastprivilege.com/Trackback.aspx?guid=996d0059-754f-477c-8311-4aad09fcdfa3</trackback:ping>
      <pingback:server>http://www.leastprivilege.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.leastprivilege.com/PermaLink.aspx?guid=996d0059-754f-477c-8311-4aad09fcdfa3</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I got asked today if I could publish a roadmap for thinktecture IdentityServer (idrsv
in short).
</p>
        <p>
Well – I got a lot of feedback after B1 and one of the biggest points here was the
data access layer. So I made two changes:
</p>
        <ul>
          <li>
I moved to configuration database access code to EF 4.1 code first. That makes it
much easier to change the underlying database. So it is now just a matter of changing
the connection string to use real SQL Server instead of SQL Compact. Important when
you plan to do scale out.</li>
          <li>
I included the ASP.NET Universal Providers in the download. This adds official support
for SQL Azure, SQL Server and SQL Compact for the membership, roles and profile features.
Unfortunately the Universal Provider use a different schema than the original ASP.NET
providers (that sucks btw!) – so I made them optional. If you want to use them go
to web.config and uncomment the new provider.</li>
        </ul>
        <p>
Then there are some other small changes:
</p>
        <ul>
          <li>
The relying party registration entries now have added fields to add extra data that
you want to couple with the RP. One use case could be to give the UI a hint how the
login experience should look like per RP. This allows to have a different look and
feel for different relying parties. I also included a small helper API that you can
use to retrieve the RP record based on the incoming WS-Federation query string.</li>
          <li>
WS-Federation single sign out is now conforming to the spec.</li>
          <li>
I made certificate based endpoint identities for SSL endpoints optional. This caused
some problems with configuration and versioning of existing clients.</li>
        </ul>
        <p>
I hope I can release the RC in the next days. If there are no major issues, there
will be RTM very soon!
</p>
        <img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=996d0059-754f-477c-8311-4aad09fcdfa3" />
      </body>
      <title>Roadmap for Thinktecture IdentityServer</title>
      <guid isPermaLink="false">http://www.leastprivilege.com/PermaLink.aspx?guid=996d0059-754f-477c-8311-4aad09fcdfa3</guid>
      <link>http://www.leastprivilege.com/RoadmapForThinktectureIdentityServer.aspx</link>
      <pubDate>Thu, 06 Oct 2011 17:01:09 GMT</pubDate>
      <description>&lt;p&gt;
I got asked today if I could publish a roadmap for thinktecture IdentityServer (idrsv
in short).
&lt;/p&gt;
&lt;p&gt;
Well – I got a lot of feedback after B1 and one of the biggest points here was the
data access layer. So I made two changes:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
I moved to configuration database access code to EF 4.1 code first. That makes it
much easier to change the underlying database. So it is now just a matter of changing
the connection string to use real SQL Server instead of SQL Compact. Important when
you plan to do scale out.&lt;/li&gt;
&lt;li&gt;
I included the ASP.NET Universal Providers in the download. This adds official support
for SQL Azure, SQL Server and SQL Compact for the membership, roles and profile features.
Unfortunately the Universal Provider use a different schema than the original ASP.NET
providers (that sucks btw!) – so I made them optional. If you want to use them go
to web.config and uncomment the new provider.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Then there are some other small changes:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
The relying party registration entries now have added fields to add extra data that
you want to couple with the RP. One use case could be to give the UI a hint how the
login experience should look like per RP. This allows to have a different look and
feel for different relying parties. I also included a small helper API that you can
use to retrieve the RP record based on the incoming WS-Federation query string.&lt;/li&gt;
&lt;li&gt;
WS-Federation single sign out is now conforming to the spec.&lt;/li&gt;
&lt;li&gt;
I made certificate based endpoint identities for SSL endpoints optional. This caused
some problems with configuration and versioning of existing clients.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
I hope I can release the RC in the next days. If there are no major issues, there
will be RTM very soon!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=996d0059-754f-477c-8311-4aad09fcdfa3" /&gt;</description>
      <category>IdentityServer</category>
    </item>
    <item>
      <trackback:ping>http://www.leastprivilege.com/Trackback.aspx?guid=33f193ed-74f6-4f12-bda8-c01e35600aa5</trackback:ping>
      <pingback:server>http://www.leastprivilege.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.leastprivilege.com/PermaLink.aspx?guid=33f193ed-74f6-4f12-bda8-c01e35600aa5</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Claudio Sanchez has created a little walkthrough for <a href="http://claudioasanchez.blogspot.com/2011/09/setting-up-thinktectures-identity.html">installing</a> IdentityServer.
While he uses B1 refresh, I anticipate no changes for RTM (which is sitting here on
my hard drive almost ready for publishing).
</p>
        <p>
Thanks Claudio!
</p>
        <img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=33f193ed-74f6-4f12-bda8-c01e35600aa5" />
      </body>
      <title>IdentityServer Installation Walkthrough</title>
      <guid isPermaLink="false">http://www.leastprivilege.com/PermaLink.aspx?guid=33f193ed-74f6-4f12-bda8-c01e35600aa5</guid>
      <link>http://www.leastprivilege.com/IdentityServerInstallationWalkthrough.aspx</link>
      <pubDate>Thu, 29 Sep 2011 22:35:13 GMT</pubDate>
      <description>&lt;p&gt;
Claudio Sanchez has created a little walkthrough for &lt;a href="http://claudioasanchez.blogspot.com/2011/09/setting-up-thinktectures-identity.html"&gt;installing&lt;/a&gt; IdentityServer.
While he uses B1 refresh, I anticipate no changes for RTM (which is sitting here on
my hard drive almost ready for publishing).
&lt;/p&gt;
&lt;p&gt;
Thanks Claudio!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=33f193ed-74f6-4f12-bda8-c01e35600aa5" /&gt;</description>
      <category>IdentityServer</category>
    </item>
    <item>
      <trackback:ping>http://www.leastprivilege.com/Trackback.aspx?guid=72420847-ebcc-431e-a6a8-f6f8d8565a24</trackback:ping>
      <pingback:server>http://www.leastprivilege.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.leastprivilege.com/PermaLink.aspx?guid=72420847-ebcc-431e-a6a8-f6f8d8565a24</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
 
</p>
        <ul>
          <li>
WindowsIdentity, FormsIdentity and GenericIdentity now derive from ClaimsIdentity</li>
          <li>
WindowsIdentity.GetCurrent() converts Windows token details (groups for the current
Windows versions) to claims.</li>
          <li>
Claims for Windows identities now distinguish between user claims and device claims
(Windows 8 feature)</li>
          <li>
WCF now populates Thread.CurrentPrincipal with a ClaimsPrincipal derived type</li>
        </ul>
        <img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=72420847-ebcc-431e-a6a8-f6f8d8565a24" />
      </body>
      <title>WIF in .NET 4.5&amp;ndash;First Observations (2)</title>
      <guid isPermaLink="false">http://www.leastprivilege.com/PermaLink.aspx?guid=72420847-ebcc-431e-a6a8-f6f8d8565a24</guid>
      <link>http://www.leastprivilege.com/WIFInNET45ndashFirstObservations2.aspx</link>
      <pubDate>Tue, 20 Sep 2011 12:32:00 GMT</pubDate>
      <description>&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
WindowsIdentity, FormsIdentity and GenericIdentity now derive from ClaimsIdentity&lt;/li&gt;
&lt;li&gt;
WindowsIdentity.GetCurrent() converts Windows token details (groups for the current
Windows versions) to claims.&lt;/li&gt;
&lt;li&gt;
Claims for Windows identities now distinguish between user claims and device claims
(Windows 8 feature)&lt;/li&gt;
&lt;li&gt;
WCF now populates Thread.CurrentPrincipal with a ClaimsPrincipal derived type&lt;/li&gt;
&lt;/ul&gt;
&lt;img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=72420847-ebcc-431e-a6a8-f6f8d8565a24" /&gt;</description>
      <category>IdentityModel</category>
    </item>
    <item>
      <trackback:ping>http://www.leastprivilege.com/Trackback.aspx?guid=ac9cdf47-99b7-4c79-9ee6-ebc2878cad73</trackback:ping>
      <pingback:server>http://www.leastprivilege.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.leastprivilege.com/PermaLink.aspx?guid=ac9cdf47-99b7-4c79-9ee6-ebc2878cad73</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
 
</p>
        <ul>
          <li>
System.Security.Claims has ClaimsIdentity &amp; ClaimsPrincipal</li>
          <li>
IClaimsIdentity &amp; IClaimsPrincipal are gone. The classes implement IIdentity &amp;
IPrincipal now directly</li>
          <li>
All the token handler and low level plumbing is now in System.IdentityModel</li>
        </ul>
        <img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=ac9cdf47-99b7-4c79-9ee6-ebc2878cad73" />
      </body>
      <title>WIF in .NET 4.5&amp;ndash;First Observations</title>
      <guid isPermaLink="false">http://www.leastprivilege.com/PermaLink.aspx?guid=ac9cdf47-99b7-4c79-9ee6-ebc2878cad73</guid>
      <link>http://www.leastprivilege.com/WIFInNET45ndashFirstObservations.aspx</link>
      <pubDate>Mon, 19 Sep 2011 18:20:42 GMT</pubDate>
      <description>&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
System.Security.Claims has ClaimsIdentity &amp;amp; ClaimsPrincipal&lt;/li&gt;
&lt;li&gt;
IClaimsIdentity &amp;amp; IClaimsPrincipal are gone. The classes implement IIdentity &amp;amp;
IPrincipal now directly&lt;/li&gt;
&lt;li&gt;
All the token handler and low level plumbing is now in System.IdentityModel&lt;/li&gt;
&lt;/ul&gt;
&lt;img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=ac9cdf47-99b7-4c79-9ee6-ebc2878cad73" /&gt;</description>
      <category>IdentityModel</category>
    </item>
    <item>
      <trackback:ping>http://www.leastprivilege.com/Trackback.aspx?guid=4eb4424e-b592-48f2-a207-479202dea0ac</trackback:ping>
      <pingback:server>http://www.leastprivilege.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.leastprivilege.com/PermaLink.aspx?guid=4eb4424e-b592-48f2-a207-479202dea0ac</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
There was not a ton of new information about WIF and related technologies at Build,
but Samuel Devasahayam did a great <a href="http://channel9.msdn.com/Events/BUILD/BUILD2011/SAC-422T">talk</a> about
claims-based access control that contained some very interesting bits of information
with regards to future directions.
</p>
        <p>
From his slides:
</p>
        <p>
          <strong>Windows 8</strong>
        </p>
        <ul>
          <li>
Bring existing identity claims model into the Windows platform</li>
          <li>
Domain controller issues groups &amp; claims</li>
          <li>
Claims (user and device) sourced from identity attributes in AD</li>
          <li>
Claims delivered in Kerberos PAC</li>
          <li>
NT Token has a new claims section</li>
          <li>
Enhanced SDDL API’s to work with claims</li>
          <li>
Enhanced user mode <em>CheckAccess</em> API’s to work with claims</li>
          <li>
New ACL-UX</li>
          <li>
Target audits with claims-based expressions</li>
        </ul>
        <p>
          <strong>WIF &amp; .NET 4.5</strong>
        </p>
        <ul>
          <li>
WIF is in the box with .NET Framework 4.5</li>
          <li>
Every principal in .NET 4.5 is a ClaimsPrincipal</li>
        </ul>
        <p>
          <strong>ADFS 2.1</strong>
        </p>
        <ul>
          <li>
ADFS 2.1 is available now as a in-box server role in Windows 8</li>
          <li>
Adds support for issuing device claims from Kerberos ticket</li>
        </ul>
        <img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=4eb4424e-b592-48f2-a207-479202dea0ac" />
      </body>
      <title>Claims-based Identity in .NET 4.5 and Windows 8</title>
      <guid isPermaLink="false">http://www.leastprivilege.com/PermaLink.aspx?guid=4eb4424e-b592-48f2-a207-479202dea0ac</guid>
      <link>http://www.leastprivilege.com/ClaimsbasedIdentityInNET45AndWindows8.aspx</link>
      <pubDate>Sat, 17 Sep 2011 06:30:36 GMT</pubDate>
      <description>&lt;p&gt;
There was not a ton of new information about WIF and related technologies at Build,
but Samuel Devasahayam did a great &lt;a href="http://channel9.msdn.com/Events/BUILD/BUILD2011/SAC-422T"&gt;talk&lt;/a&gt; about
claims-based access control that contained some very interesting bits of information
with regards to future directions.
&lt;/p&gt;
&lt;p&gt;
From his slides:
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Windows 8&lt;/strong&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Bring existing identity claims model into the Windows platform&lt;/li&gt;
&lt;li&gt;
Domain controller issues groups &amp;amp; claims&lt;/li&gt;
&lt;li&gt;
Claims (user and device) sourced from identity attributes in AD&lt;/li&gt;
&lt;li&gt;
Claims delivered in Kerberos PAC&lt;/li&gt;
&lt;li&gt;
NT Token has a new claims section&lt;/li&gt;
&lt;li&gt;
Enhanced SDDL API’s to work with claims&lt;/li&gt;
&lt;li&gt;
Enhanced user mode &lt;em&gt;CheckAccess&lt;/em&gt; API’s to work with claims&lt;/li&gt;
&lt;li&gt;
New ACL-UX&lt;/li&gt;
&lt;li&gt;
Target audits with claims-based expressions&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;strong&gt;WIF &amp;amp; .NET 4.5&lt;/strong&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
WIF is in the box with .NET Framework 4.5&lt;/li&gt;
&lt;li&gt;
Every principal in .NET 4.5 is a ClaimsPrincipal&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;strong&gt;ADFS 2.1&lt;/strong&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
ADFS 2.1 is available now as a in-box server role in Windows 8&lt;/li&gt;
&lt;li&gt;
Adds support for issuing device claims from Kerberos ticket&lt;/li&gt;
&lt;/ul&gt;
&lt;img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=4eb4424e-b592-48f2-a207-479202dea0ac" /&gt;</description>
      <category>IdentityModel</category>
    </item>
    <item>
      <trackback:ping>http://www.leastprivilege.com/Trackback.aspx?guid=d64228a6-ac53-46f4-84e7-5ec0122d90a3</trackback:ping>
      <pingback:server>http://www.leastprivilege.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.leastprivilege.com/PermaLink.aspx?guid=d64228a6-ac53-46f4-84e7-5ec0122d90a3</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I uploaded a <a href="http://identityserver.codeplex.com/releases/view/69587">sample</a> RP
for IdentityServer. It shows some basic things like connecting a web application via
WS-Federation and a SOAP service via WS-Trust.
</p>
        <img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=d64228a6-ac53-46f4-84e7-5ec0122d90a3" />
      </body>
      <title>Sample Relying Party for Thinktecture.IdentityServer</title>
      <guid isPermaLink="false">http://www.leastprivilege.com/PermaLink.aspx?guid=d64228a6-ac53-46f4-84e7-5ec0122d90a3</guid>
      <link>http://www.leastprivilege.com/SampleRelyingPartyForThinktectureIdentityServer.aspx</link>
      <pubDate>Wed, 06 Jul 2011 06:59:33 GMT</pubDate>
      <description>&lt;p&gt;
I uploaded a &lt;a href="http://identityserver.codeplex.com/releases/view/69587"&gt;sample&lt;/a&gt; RP
for IdentityServer. It shows some basic things like connecting a web application via
WS-Federation and a SOAP service via WS-Trust.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=d64228a6-ac53-46f4-84e7-5ec0122d90a3" /&gt;</description>
      <category>IdentityModel</category>
      <category>IdentityServer</category>
    </item>
    <item>
      <trackback:ping>http://www.leastprivilege.com/Trackback.aspx?guid=e8b8d503-331c-4f2a-a17a-9154ee9abea9</trackback:ping>
      <pingback:server>http://www.leastprivilege.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.leastprivilege.com/PermaLink.aspx?guid=e8b8d503-331c-4f2a-a17a-9154ee9abea9</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
 
</p>
        <p>
          <strong>Ingo Rammer</strong>
          <br />
          <a href="http://ndc2011.macsimum.no/SAL7/Torsdag/0900-1000.wmv">Hardcore Production
Debugging</a>
          <br />
          <a href="http://ndc2011.macsimum.no/SAL6/Fredag/1020-1120.wmv">HTML5 - Offline Business
Applications for Desktops, Tablets and Phones</a>
        </p>
        <p>
          <strong>Oliver Sturm<br /></strong>
          <a href="http://ndc2011.macsimum.no/SAL7/Torsdag/1140-1240.wmv">Functional
Programming in C#</a>
          <br />
          <a href="http://ndc2011.macsimum.no/SAL6/Tordag/1340-1440.wmv">Function Programming
in F#</a>
        </p>
        <p>
          <strong>Dominick Baier</strong>
          <br />
          <a href="http://ndc2011.macsimum.no/SAL1/Torsdag/1620-1720.wmv">Architecting Claims-aware
Applications (with the Windows Identity Foundation and Active Directory Federation
Services)</a>
          <br />
          <a href="http://ndc2011.macsimum.no/SAL1/Torsdag/1740-1840.wmv">Securing REST-Services
and Web-APIs</a>
        </p>
        <img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=e8b8d503-331c-4f2a-a17a-9154ee9abea9" />
      </body>
      <title>Thinktecture Talks from NDC</title>
      <guid isPermaLink="false">http://www.leastprivilege.com/PermaLink.aspx?guid=e8b8d503-331c-4f2a-a17a-9154ee9abea9</guid>
      <link>http://www.leastprivilege.com/ThinktectureTalksFromNDC.aspx</link>
      <pubDate>Mon, 04 Jul 2011 12:21:15 GMT</pubDate>
      <description>&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Ingo Rammer&lt;/strong&gt;
&lt;br&gt;
&lt;a href="http://ndc2011.macsimum.no/SAL7/Torsdag/0900-1000.wmv"&gt;Hardcore Production
Debugging&lt;/a&gt;
&lt;br&gt;
&lt;a href="http://ndc2011.macsimum.no/SAL6/Fredag/1020-1120.wmv"&gt;HTML5 - Offline Business
Applications for Desktops, Tablets and Phones&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Oliver Sturm&lt;br&gt;
&lt;/strong&gt;&lt;a href="http://ndc2011.macsimum.no/SAL7/Torsdag/1140-1240.wmv"&gt;Functional
Programming in C#&lt;/a&gt;
&lt;br&gt;
&lt;a href="http://ndc2011.macsimum.no/SAL6/Tordag/1340-1440.wmv"&gt;Function Programming
in F#&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Dominick Baier&lt;/strong&gt;
&lt;br&gt;
&lt;a href="http://ndc2011.macsimum.no/SAL1/Torsdag/1620-1720.wmv"&gt;Architecting Claims-aware
Applications (with the Windows Identity Foundation and Active Directory Federation
Services)&lt;/a&gt;
&lt;br&gt;
&lt;a href="http://ndc2011.macsimum.no/SAL1/Torsdag/1740-1840.wmv"&gt;Securing REST-Services
and Web-APIs&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=e8b8d503-331c-4f2a-a17a-9154ee9abea9" /&gt;</description>
      <category>Conferences</category>
    </item>
    <item>
      <trackback:ping>http://www.leastprivilege.com/Trackback.aspx?guid=73787bad-6bfb-4724-b1dc-e4d3660d1c7d</trackback:ping>
      <pingback:server>http://www.leastprivilege.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.leastprivilege.com/PermaLink.aspx?guid=73787bad-6bfb-4724-b1dc-e4d3660d1c7d</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Seems to be radio week this week…
</p>
        <p>
Another interview I did quite a while ago with Michele and Patrick…
</p>
        <p>
          <a title="http://www.lockdownpodcast.com/default.aspx?ShowNum=4" href="http://www.lockdownpodcast.com/default.aspx?ShowNum=4">http://www.lockdownpodcast.com/default.aspx?ShowNum=4</a>
        </p>
        <img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=73787bad-6bfb-4724-b1dc-e4d3660d1c7d" />
      </body>
      <title>Me on LockDown Radio</title>
      <guid isPermaLink="false">http://www.leastprivilege.com/PermaLink.aspx?guid=73787bad-6bfb-4724-b1dc-e4d3660d1c7d</guid>
      <link>http://www.leastprivilege.com/MeOnLockDownRadio.aspx</link>
      <pubDate>Thu, 23 Jun 2011 20:50:39 GMT</pubDate>
      <description>&lt;p&gt;
Seems to be radio week this week…
&lt;/p&gt;
&lt;p&gt;
Another interview I did quite a while ago with Michele and Patrick…
&lt;/p&gt;
&lt;p&gt;
&lt;a title="http://www.lockdownpodcast.com/default.aspx?ShowNum=4" href="http://www.lockdownpodcast.com/default.aspx?ShowNum=4"&gt;http://www.lockdownpodcast.com/default.aspx?ShowNum=4&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=73787bad-6bfb-4724-b1dc-e4d3660d1c7d" /&gt;</description>
      <category>Misc</category>
    </item>
  </channel>
</rss>
