<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.southworks.net/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Matias Woloski's Blog</title>
	
	<link>http://blogs.southworks.net/mwoloski</link>
	<description>my facade</description>
	<pubDate>Mon, 12 Jul 2010 14:42:11 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
	<language>en</language>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.southworks.net/mwoloski" /><feedburner:info uri="mwoloski" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Consumer Identities for Business transactions</title>
		<link>http://feeds.southworks.net/~r/mwoloski/~3/mbj6cwUhzrg/</link>
		<comments>http://blogs.southworks.net/mwoloski/2010/07/12/consumer-identities-for-business-transactions/#comments</comments>
		<pubDate>Mon, 12 Jul 2010 14:30:24 +0000</pubDate>
		<dc:creator>Matias Woloski</dc:creator>
		
		<category><![CDATA[ADFS]]></category>

		<category><![CDATA[Claim-Based Identity]]></category>

		<category><![CDATA[Identity]]></category>

		<category><![CDATA[OAuth]]></category>

		<category><![CDATA[OpenID]]></category>

		<category><![CDATA[PHP]]></category>

		<category><![CDATA[Windows Identity Foundation]]></category>

		<guid isPermaLink="false">http://blogs.southworks.net/mwoloski/2010/07/12/consumer-identities-for-business-transactions/</guid>
		<description><![CDATA[A year ago I wrote a blog post about how to use the Windows Identity Foundation with OpenID. Essentially the idea was writing an STS that can speak both protocol WS-Federation and OpenID, so your apps can keep using WIF as the claims framework, no matter what your Identity Provider is. WS-Fed == enterprise, OpenID [...]]]></description>
			<content:encoded><![CDATA[<p>A year ago I <a href="http://blogs.southworks.net/mwoloski/2009/07/14/openid-ws-fed-protocol-transition-sts/">wrote a blog post</a> about how to use the Windows Identity Foundation with OpenID. Essentially the idea was writing an STS that can speak both protocol WS-Federation and OpenID, so your apps can keep using WIF as the claims framework, no matter what your Identity Provider is. WS-Fed == enterprise, OpenID == consumer…</p>
<p>Fast forward to May this year, I’m happy to disclose the proof of concept we did with the Microsoft Federated Identity Interop group (represented by <a href="http://self-issued.info">Mike Jones</a>), <a href="http://www.medtronic.com">Medtronic</a> and <a href="https://www.paypal-ids.com/">PayPal</a>. The official <a href="http://blogs.msdn.com/b/interoperability/archive/2010/07/09/identity-mash-up-federation-demo-using-multiple-protocols-openid-and-ws-federation.aspx">post from the Interoperability blog</a> includes a <a href="http://channel9.msdn.com/posts/jccim/Identity-Mash-up-Federation-Demo-using-Multiple-Protocols-OpenID-and-WS-Federation/">video about it</a> and Mike also did a <a href="http://self-issued.info/?p=325">great write up</a>. I like how <a href="http://www.identityblog.com/?p=1146">Kim Cameron</a> summarized the challenges and lessons learnt of this PoC:</p>
<blockquote><p><em>The change agent is the power of claims.&#160; The mashup Mike describes crosses boundaries in many dimensions at once:</em> </p>
<ul>
<li><em>between industries (medical, financial, technical) </em></li>
<li><em>between organizations (Medtronic, PayPal, Southworks, Microsoft) </em></li>
<li><em>between protocols (OpenID and SAML) </em></li>
<li><em>between computing platforms (Windows and Linux) </em></li>
<li><em>between software products (Windows Identity Foundation, DotNetOpenAuth, SimpleSAMLphp) </em></li>
<li><em>between identity requirements (ranging from strong identity verification to anonymous comment)</em> </li>
</ul>
</blockquote>
<p>The business scenario brought by Medtronic is around an insulin pump trial. In order to register to this trial, users would login with PayPal, which represents a trusted authority for authentication and attributes like shipping address and age for them. Below are some screenshots of the actual proof of concept:</p>
<p><a href="http://blogs.southworks.net/mwoloski/files/2010/07/image.png"><img border="0" alt="image" src="http://blogs.southworks.net/mwoloski/files/2010/07/image-thumb.png" width="507" height="285" /></a> </p>
<p><a href="http://blogs.southworks.net/mwoloski/files/2010/07/image1.png"><img border="0" alt="image" src="http://blogs.southworks.net/mwoloski/files/2010/07/image-thumb1.png" width="507" height="309" /></a> </p>
<p><a href="http://blogs.southworks.net/mwoloski/files/2010/07/image2.png"><img border="0" alt="image" src="http://blogs.southworks.net/mwoloski/files/2010/07/image-thumb2.png" width="511" height="363" /></a> </p>
<p><a href="http://blogs.southworks.net/mwoloski/files/2010/07/image3.png"><img border="0" alt="image" src="http://blogs.southworks.net/mwoloski/files/2010/07/image-thumb3.png" width="506" height="360" /></a> </p>
<p>While there are different ways to solve a scenario like this, we chose to create an intermediary Security Token Service that understands the OpenID protocol (used by PayPal), WS-Federation protocol and SAML 1.1 tokens (used by Medtronic apps). This intermediary STS enables SSO between the web applications, avoiding re-authentication with the original identity provider (PayPal). </p>
<p>Also, we had to integrate with a PHP web application and we chose the <a href="http://rnd.feide.no/simplesamlphp">simpleSAMLphp</a> library. We had to adjust here and there to make it compatible with ADFS/WIF implementation of the standards. No big changes though.</p>
<p>We decided together with the Microsoft Federated Identity Interop team to make the implementation of this STS available under open source using the <a href="http://opensource.org/licenses/ms-pl.html">Microsoft Public License</a>.</p>
<p>And not only that but also we went a step further and added a multi-protocol capability to this claims provider. This is, it’s extensible to support not only OpenID but also OAuth and even a proprietary authentication method like Windows Live.</p>
<p><a href="http://blogs.southworks.net/mwoloski/files/2010/07/image4.png"><img border="0" alt="image" src="http://blogs.southworks.net/mwoloski/files/2010/07/image-thumb4.png" width="508" height="227" /></a></p>
</p>
</p>
<p><em><strong>DISCLAIMER</strong>: <em>This code is provided as-is under the </em><a href="http://www.opensource.org/licenses/ms-pl.html"><em>Ms-PL license</em></a><em>. It has not been tested in production environments and it has not gone through threats and countermeasures analysis. Use it at your own risk.</em></em><em></em></p>
<p><strong>Project Home page      <br /></strong><a href="http://github.com/southworks/protocol-bridge-claims-provider">http://github.com/southworks/protocol-bridge-claims-provider</a></p>
<p><strong>Download      <br /></strong><a href="http://github.com/southworks/protocol-bridge-claims-provider/downloads">http://github.com/southworks/protocol-bridge-claims-provider/downloads</a></p>
<p><strong>Docs      <br /></strong><a href="http://southworks.github.com/protocol-bridge-claims-provider">http://southworks.github.com/protocol-bridge-claims-provider</a></p>
<p>If you are interested and would like to contribute, ping us through the github page, twitter @woloski or email matias at southworks dot net</p>
<p>This endeavor could not have been possible without the professionalism of my colleagues: <a href="http://blogs.southworks.net/jpgarcia">Juan Pablo Garcia</a> who was the main developer behind this project, <a href="http://blogs.southworks.net/tosborn">Tim Osborn</a> for his support and focus on the customer, <a href="http://blogs.southworks.net/jhalife">Johnny Halife</a> who helped shaping out the demo in the early stages in HTML :), and <a href="http://blogs.southworks.net/siacomuzzi">Sebastian Iacomuzzi</a> that helped us with the packaging. Finally, Madhu Lakshmikanthan who was key in the project management to align stakeholders and Mike who was crucial in making all this happen.</p>
<p>Happy federation!</p>
<img src="http://feeds.feedburner.com/~r/mwoloski/~4/mbj6cwUhzrg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blogs.southworks.net/mwoloski/2010/07/12/consumer-identities-for-business-transactions/feed/</wfw:commentRss>
		<feedburner:origLink>http://blogs.southworks.net/mwoloski/2010/07/12/consumer-identities-for-business-transactions/</feedburner:origLink></item>
		<item>
		<title>“That solution doesn’t scale”</title>
		<link>http://feeds.southworks.net/~r/mwoloski/~3/BqT4o0HWkYw/</link>
		<comments>http://blogs.southworks.net/mwoloski/2010/06/27/that-solution-doesnt-scale/#comments</comments>
		<pubDate>Mon, 28 Jun 2010 01:59:43 +0000</pubDate>
		<dc:creator>Matias Woloski</dc:creator>
		
		<category><![CDATA[Architecture]]></category>

		<category><![CDATA[Azure]]></category>

		<category><![CDATA[Cloud Computing]]></category>

		<guid isPermaLink="false">http://blogs.southworks.net/mwoloski/2010/06/27/that-solution-doesnt-scale/</guid>
		<description><![CDATA[I posted yesterday about a poor man’s distributed caching solution using Windows Azure queues and ASP.NET cache. I’ve got an interesting comment in twitter: 
 
My short answer is that there aren’t solutions that scale or doesn’t scale. The scalability is a quality attribute of a system and it varies depending on the context. A [...]]]></description>
			<content:encoded><![CDATA[<p>I posted yesterday about <a href="http://blogs.southworks.net/mwoloski/2010/06/26/poor-mans-memcached-for-windows-azure/">a poor man’s distributed caching solution</a> using Windows Azure queues and ASP.NET cache. I’ve got an interesting comment in twitter: </p>
<p><a href="http://blogs.southworks.net/mwoloski/files/2010/06/image14.png"><img style="float: none;margin-left: auto;margin-right: auto" border="0" alt="image" src="http://blogs.southworks.net/mwoloski/files/2010/06/image-thumb11.png" width="421" height="38" /></a> </p>
<p>My short answer is that there aren’t solutions that scale or doesn’t scale. The scalability is a quality attribute of a system and it varies depending on the context. A <strong><em>good system </em></strong>is the one that is easily adaptable to new contexts and a <strong><em>good solution </em></strong>is the one that is the most convenient in a local context.</p>
<h2>Putting things in context</h2>
<p>So here is the analysis of the solution proposed and the context where it might applies. </p>
<p>I used the following parameters in the calculation:</p>
<ul>
<li><strong>Time to dequeue 32 messages at a time</strong>: 1600 milliseconds (<a href="http://azurescope.cloudapp.net/BenchmarkTestCases/tc/2b3cc07f-aea6-4d27-a3c3-0dad340a0e55/">source</a>) </li>
<li><strong>Time spent notifying ASP.NET cache the dependency changed:</strong> 300 milliseconds (this is a worst case scenario, it is actually in the nanosecs scale) </li>
</ul>
<p><a href="http://blogs.southworks.net/mwoloski/files/2010/06/image15.png"><img border="0" alt="image" src="http://blogs.southworks.net/mwoloski/files/2010/06/image-thumb12.png" width="718" height="704" /></a> </p>
</p>
<p>Some conclusions you can take from this</p>
<ul>
<li>From 1 to 1000 items updated per second (i.e. items invalidated) there is a penalty of 3 minutes (in the worst case) to invalidate the cache of those 1000 items. We are talking about items invalidated<strong> PER SECOND</strong>. Even having 1 update per second is a lot, in certain systems, so this seems to be good enough for many applications. </li>
<li>Passing the 1000 items barrier, the time to invalidate all the cache items could be unacceptable (e.g.: you don’t want to wait hours to invalidate the cache). However, if you have more than 1000 updates per seconds, you are probably having other problems <img src='http://blogs.southworks.net/mwoloski/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </li>
</ul>
<h2>So what is the drawback compared to a distributed cache?</h2>
<p>If you compare this solution to something like memcached, the main difference resides when you have lots of web servers in a farm. This is because memcached will replicate and keep synchronized the cache items between nodes. So when you insert an item in memcached it is available to all the web servers almost immediately. However, when using the ASP.NET Cache and the cache dependency mechanism, when the item is invalidated, EACH web server will have to retrieve the item again and insert it in the cache. Retrieving the resource is the expensive operation, but not invalidating the cache.</p>
<p>I hope this clarifies a bit what I meant by “<a href="http://blogs.southworks.net/mwoloski/2010/06/26/poor-mans-memcached-for-windows-azure/">poor man’s memcached</a>” <img src='http://blogs.southworks.net/mwoloski/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<img src="http://feeds.feedburner.com/~r/mwoloski/~4/BqT4o0HWkYw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blogs.southworks.net/mwoloski/2010/06/27/that-solution-doesnt-scale/feed/</wfw:commentRss>
		<feedburner:origLink>http://blogs.southworks.net/mwoloski/2010/06/27/that-solution-doesnt-scale/</feedburner:origLink></item>
		<item>
		<title>Poor man’s memcached for Windows Azure</title>
		<link>http://feeds.southworks.net/~r/mwoloski/~3/TbPMTJLFE84/</link>
		<comments>http://blogs.southworks.net/mwoloski/2010/06/26/poor-mans-memcached-for-windows-azure/#comments</comments>
		<pubDate>Sun, 27 Jun 2010 01:30:52 +0000</pubDate>
		<dc:creator>Matias Woloski</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blogs.southworks.net/mwoloski/2010/06/26/poor-mans-memcached-for-windows-azure/</guid>
		<description><![CDATA[UPDATE: After reading this post you can read about the scalability of this solution, posted based on some comments. 
Part of working with the Windows Azure guidance team is not only about writing but it’s also about helping customers and understanding real life problems. This help us validate and enrich the content.
One of the customers [...]]]></description>
			<content:encoded><![CDATA[<p><strong>UPDATE: After reading this post you can read about the <a href="http://blogs.southworks.net/mwoloski/2010/06/27/that-solution-doesnt-scale/">scalability of this solution</a>, posted based on some comments. </strong></p>
<p>Part of working with the <a href="http://wag.codeplex.com">Windows Azure guidance</a> team is not only about writing but it’s also about helping customers and understanding real life problems. This help us validate and enrich the content.</p>
<p>One of the customers <a href="http://blogs.southworks.net/ejadib">we</a> are helping has an hybrid solution in Windows Azure where there is a backend running on-premises that pushes information to a frontend running on Windows Azure in ASP.NET. This information is stored in blob storage and then served from the web role. To avoid going every time to the blob storage, though, they want to cache the information. But whenever you cache, you have to handle the expiration of the item you are caching, otherwise it never gets updated. That’s one option, cache it for X minutes. But the ideal would be to control the caching and whenever the information gets stale, update the cache. This is <a href="http://nhforge.org/blogs/nhibernate/archive/2009/04/17/tuning-nhibernate-tolerant-querycache.aspx">easy if you use an ORM like NHibernate</a> or if you are using <a href="http://msdn.microsoft.com/en-us/library/system.web.caching.sqlcachedependency.aspx">SqlCommands and SqlCacheDependency</a> or if you use something like memcached or the AppFabric velocity. However it gets more difficult if you have other kind of resources to cache and if the web application runs in a farm.</p>
<h3>Using Windows Azure queues to invalidate ASP.NET Cache</h3>
<p>Maybe you need something smaller. This is what I implemented, I just posted <a href="http://snipurl.com/queuecache">on git</a> two classes that can be used in a Windows Azure Web Role running ASP.NET as a very basic distributed caching mechanism. The following picture shows how it works at a high level. </p>
<p><a href="http://blogs.southworks.net/mwoloski/files/2010/06/image4.png"><img border="0" alt="image" src="http://blogs.southworks.net/mwoloski/files/2010/06/image-thumb3.png" width="544" height="471" /></a>&#160;</p>
<h2>Usage</h2>
<p>Using it requires two things</p>
<ol>
<li>Start the monitor (that listens to the queue). Write this code either in the <strong>WebRole entry point </strong>or in the <strong>Global.asax Applicaiton_Start</strong>.       </p>
<p><a href="http://blogs.southworks.net/mwoloski/files/2010/06/image5.png"><img border="0" alt="image" src="http://blogs.southworks.net/mwoloski/files/2010/06/image-thumb4.png" width="362" height="18" /></a>       </li>
<li>Use the regular ASP.NET Cache API but providing the <strong>CloudQueueCacheDependency </strong>with a key<a href="http://blogs.southworks.net/mwoloski/files/2010/06/image6.png">
<p><img border="0" alt="image" src="http://blogs.southworks.net/mwoloski/files/2010/06/image-thumb5.png" width="597" height="76" /></a> </li>
</ol>
<h2>Example</h2>
<p>I uploaded this to Windows Azure and provisioned two instances of a web role and this is the result</p>
<table border="0" cellspacing="0" cellpadding="2" width="600">
<tbody>
<tr>
<td valign="top" width="300">Web Role <strong>instance 0</strong></td>
<td valign="top" width="300">Web Role <strong>instance 1</strong></td>
</tr>
<tr>
<td valign="top" width="300"><a href="http://blogs.southworks.net/mwoloski/files/2010/06/image7.png"><img border="0" alt="image" src="http://blogs.southworks.net/mwoloski/files/2010/06/image-thumb6.png" width="317" height="273" /></a></td>
<td valign="top" width="300"><a href="http://blogs.southworks.net/mwoloski/files/2010/06/image9.png"><img border="0" alt="image" src="http://blogs.southworks.net/mwoloski/files/2010/06/image-thumb7.png" width="338" height="272" /></a> </td>
</tr>
</tbody>
</table>
<p>By sending a message to the <strong><em>invalidatecache-distributedcache-web-in-0</em></strong> queue we invalidate the item “test” in cache in the 0 instance. This corresponds to the Cache1 label. If we send “test2” message, we would invalidate the Cache2 item.</p>
<p><a href="http://blogs.southworks.net/mwoloski/files/2010/06/image10.png"><img border="0" alt="image" src="http://blogs.southworks.net/mwoloski/files/2010/06/image-thumb8.png" width="640" height="289" /></a> </p>
<p>The cache expired and an updated datetime is shown.</p>
<table border="0" cellspacing="0" cellpadding="2" width="600">
<tbody>
<tr>
<td valign="top" width="300">Web Role <strong>instance 0</strong></td>
<td valign="top" width="300">Web Role <strong>instance 1</strong></td>
</tr>
<tr>
<td valign="top" width="300"><a href="http://blogs.southworks.net/mwoloski/files/2010/06/image11.png"><img border="0" alt="image" src="http://blogs.southworks.net/mwoloski/files/2010/06/image-thumb9.png" width="336" height="290" /></a></td>
<td valign="top" width="300"><a href="http://blogs.southworks.net/mwoloski/files/2010/06/image13.png"><img border="0" alt="image" src="http://blogs.southworks.net/mwoloski/files/2010/06/image-thumb10.png" width="360" height="291" /></a> </td>
</tr>
</tbody>
</table>
<h2>Conclusion</h2>
<p>By using this technique you can have a distributed system where the backend makes an update on-premises, pushes something to the cloud and it invalidates the cache by posting a message to a queue. I didn’t worry too much about being fault tolerant in the monitor simply because in the worst case the item keeps alive in the cache and you can repost a message.</p>
<p>Download the code from <a href="http://snipurl.com/queuecache">here</a></p>
<p><strong>DISCLAIMER</strong>: the code is provided as-is and has not been tested under stress conditions. Use it at your own risk.</p>
<img src="http://feeds.feedburner.com/~r/mwoloski/~4/TbPMTJLFE84" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blogs.southworks.net/mwoloski/2010/06/26/poor-mans-memcached-for-windows-azure/feed/</wfw:commentRss>
		<feedburner:origLink>http://blogs.southworks.net/mwoloski/2010/06/26/poor-mans-memcached-for-windows-azure/</feedburner:origLink></item>
		<item>
		<title>Cloud Life Science Event in New Jersey and Boston, June 8th and 15th</title>
		<link>http://feeds.southworks.net/~r/mwoloski/~3/qS6wpTzOCG4/</link>
		<comments>http://blogs.southworks.net/mwoloski/2010/06/04/cloud-life-science-event-in-new-jersey-and-boston-june-8th-and-15th/#comments</comments>
		<pubDate>Fri, 04 Jun 2010 21:30:08 +0000</pubDate>
		<dc:creator>Matias Woloski</dc:creator>
		
		<category><![CDATA[Azure]]></category>

		<category><![CDATA[Claim-Based Identity]]></category>

		<category><![CDATA[Cloud Computing]]></category>

		<category><![CDATA[Federation]]></category>

		<category><![CDATA[Identity]]></category>

		<guid isPermaLink="false">http://blogs.southworks.net/mwoloski/2010/06/04/cloud-life-science-event-in-new-jersey-and-boston-june-8th-and-15th/</guid>
		<description><![CDATA[During the next couple of weeks, Southworks will be presenting together with a Fortune 500 pharmaceutical company a project that we’ve developed during the last couple of months around Claims Based Federated Identity and the Cloud. Hong Choing and Ben Flock from Microsoft DPE are hosting the event in New Jersey and Boston and kindly [...]]]></description>
			<content:encoded><![CDATA[<p>During the next couple of weeks, <a href="http://www.southworks.net">Southworks</a> will be presenting together with a Fortune 500 pharmaceutical company a project that we’ve developed during the last couple of months around Claims Based Federated Identity and the Cloud. Hong Choing and Ben Flock from Microsoft DPE are hosting the event in New Jersey and Boston and kindly invited us to share with other organizations from the Life Science industry the work we’ve done together.</p>
<p>We will be presenting 3 different scenarios and how we approached them using Federated Identity (ADFS and Windows Identity Foundation) and Cloud Computing (Windows Azure and Amazon EC2). We will talk about the architecture behind, involving an ADFS acting as a <em>Federation Hub</em>, the notion of different level of trusts/assurance and the inclusion of <em>social identity providers </em>like Facebook, Yahoo, LiveId, Twitter, etc. </p>
<table border="0" cellspacing="0" cellpadding="2" width="614">
<tbody>
<tr>
<td valign="top" width="306"><a href="http://blogs.southworks.net/mwoloski/files/2010/06/image8.png"><img border="0" alt="image" src="http://blogs.southworks.net/mwoloski/files/2010/06/image8-thumb.png" width="300" height="224" /></a></td>
<td valign="top" width="306"><a href="http://blogs.southworks.net/mwoloski/files/2010/06/image12.png"><img border="0" alt="image" src="http://blogs.southworks.net/mwoloski/files/2010/06/image12-thumb.png" width="300" height="226" /></a></td>
</tr>
<tr>
<td valign="top" width="306"><a href="http://blogs.southworks.net/mwoloski/files/2010/06/image16.png"><img border="0" alt="image" src="http://blogs.southworks.net/mwoloski/files/2010/06/image16-thumb.png" width="300" height="220" /></a></td>
<td valign="top" width="306">&#160;</td>
</tr>
</tbody>
</table>
<p>The solution shows</p>
<ul>
<li>A web site hosted on Windows Azure that is something like “<em>Federated SkyDrive</em>” where a user can assign cross-organization permissions based on email, group and organization claim. </li>
<li>Organizations plugged to the hub using identity providers like ADFS, CA SiteMinder or PingFederate</li>
<li>Other organizations plugged to the hub using social identity providers like Facebook, Yahoo, Google, Twitter, LiveID</li>
<li>Different level of trusts depending on the identity provider that issued the token</li>
<li>Multiple cloud computing providers like Amazon EC2 hosting an ADFS v2 and Windows Azure hosting the website</li>
</ul>
<p><a href="http://blogs.southworks.net/mwoloski/files/2010/06/image2.png"><img border="0" alt="image" src="http://blogs.southworks.net/mwoloski/files/2010/06/image-thumb2.png" width="618" height="464" /></a></p>
<table border="0" cellspacing="0" cellpadding="2" width="600">
<tbody>
<tr>
<td valign="top" width="567">The scenario and architecture used is similar to the one we described in the <a href="http://msdn.microsoft.com/en-us/library/ff359105(v=PandP.10).aspx">Federation with Multiple Partners</a> chapter of the <a href="http://msdn.microsoft.com/en-us/library/ff423674.aspx">Claims-Based Identity and Access Control guide</a> from patterns &amp; practices. The guide was key to help some of the stakeholders understand the concepts and artifacts of the solution. </td>
<td valign="top" width="33"><a href="http://msdn.microsoft.com/en-us/library/ff423674.aspx"><img border="0" alt="image" src="http://blogs.southworks.net/mwoloski/files/2010/06/image3.png" width="121" height="147" /></a></td>
</tr>
</tbody>
</table>
<p>With the advent of the cloud, the need of collaborating fast and securely between organizations in a cost effective way, these kind of concepts and architectures should become the de-facto solution. Looking forward to that future!</p>
<img src="http://feeds.feedburner.com/~r/mwoloski/~4/qS6wpTzOCG4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blogs.southworks.net/mwoloski/2010/06/04/cloud-life-science-event-in-new-jersey-and-boston-june-8th-and-15th/feed/</wfw:commentRss>
		<feedburner:origLink>http://blogs.southworks.net/mwoloski/2010/06/04/cloud-life-science-event-in-new-jersey-and-boston-june-8th-and-15th/</feedburner:origLink></item>
		<item>
		<title>Dynamic ClaimsPrincipal with C# 4</title>
		<link>http://feeds.southworks.net/~r/mwoloski/~3/5mtJNSBO-BY/</link>
		<comments>http://blogs.southworks.net/mwoloski/2010/06/04/dynamic-claimsprincipal-with-c-4/#comments</comments>
		<pubDate>Fri, 04 Jun 2010 05:47:39 +0000</pubDate>
		<dc:creator>Matias Woloski</dc:creator>
		
		<category><![CDATA[Windows Identity Foundation]]></category>

		<category><![CDATA[dynamic]]></category>

		<guid isPermaLink="false">http://blogs.southworks.net/mwoloski/2010/06/04/dynamic-claimsprincipal-with-c-4/</guid>
		<description><![CDATA[Travis wrote an interesting blog post about mixing the new dynamic feature in C# 4 and claims. His idea was to use a User class derived from DynamicObject as a proxy to get claims. Here is some of the code he shows:
var claims = new[]        &#160;&#160;&#160; {  [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://travisspencer.com/blog/2010/05/mapping-claims-to-a-dynamic-us.html?utm_source=twitter&amp;utm_medium=social-media&amp;utm_term=.net&amp;utm_content=&amp;utm_campaign=geneva">Travis wrote</a> an interesting blog post about mixing the new dynamic feature in C# 4 and claims. His idea was to use a User class derived from DynamicObject as a proxy to get claims. Here is some of the code he shows:</p>
<blockquote><p><em>var claims = new[]        <br />&#160;&#160;&#160; {         <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; new Claim(&quot;foo&quot;, &quot;3&quot;),         <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; new Claim(&quot;foo_bar&quot;, &quot;true&quot;),         <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; new Claim(&quot;foo_baz&quot;, &quot;Ted&quot;),         <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; new Claim(&quot;http://schemas.travisspencer.com/2010/05/test/claims/shoesize&quot;, &quot;11&quot;),         <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; new Claim(&quot;http://schemas.travisspencer.com/2010/05/test/claims/haircolor&quot;, &quot;blond&quot;),         <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; new Claim(&quot;Age&quot;, &quot;16&quot;),         <br />&#160;&#160;&#160; };         <br />&#160;&#160;&#160; var identity = new ClaimsIdentity(claims);         <br />&#160;&#160;&#160; dynamic user = new MyGoodUser(identity);         <br />&#160;&#160;&#160; Console.WriteLine(&quot;Foo = {0}&quot;, user.Foo);</em></p>
</blockquote>
<p>Now, If you look carefully most of the claims are defined with a long namespace plus a friendly name, like:</p>
<p><a href="http://blogs.southworks.net/mwoloski/files/2010/06/image.png"><img border="0" alt="image" src="http://blogs.southworks.net/mwoloski/files/2010/06/image-thumb.png" width="640" height="156" /></a> </p>
<p>So wouldn’t it be nice if I could do something like</p>
<p><em><font face="consolas">Thread.CurrentPrincipal.AsClaims().GivenName        <br /></font></em><em><font face="consolas">Thread.CurrentPrincipal.AsClaims().HomePhone</font></em></p>
<p>Well, I took Travis code and tweaked here and there and here is how it looks:</p>
<p>&#160;<a href="http://blogs.southworks.net/mwoloski/files/2010/06/image1.png"><img border="0" alt="image" src="http://blogs.southworks.net/mwoloski/files/2010/06/image-thumb1.png" width="529" height="332" /></a> </p>
<p>This is user experience applied to the API <img src='http://blogs.southworks.net/mwoloski/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> I like to call it DX (Developer Experience). </p>
<p>I posted the code here</p>
<p><a href="http://pastie.org/991525">http://pastie.org/991525</a></p>
<img src="http://feeds.feedburner.com/~r/mwoloski/~4/5mtJNSBO-BY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blogs.southworks.net/mwoloski/2010/06/04/dynamic-claimsprincipal-with-c-4/feed/</wfw:commentRss>
		<feedburner:origLink>http://blogs.southworks.net/mwoloski/2010/06/04/dynamic-claimsprincipal-with-c-4/</feedburner:origLink></item>
		<item>
		<title>Windows Azure MMC v2 – Diagnostic Viewer Plugins</title>
		<link>http://feeds.southworks.net/~r/mwoloski/~3/mO9T1DLIkS4/</link>
		<comments>http://blogs.southworks.net/mwoloski/2010/05/13/windows-azure-mmc-v2-diagnostic-viewer-plugins/#comments</comments>
		<pubDate>Thu, 13 May 2010 22:59:25 +0000</pubDate>
		<dc:creator>Matias Woloski</dc:creator>
		
		<category><![CDATA[Azure]]></category>

		<guid isPermaLink="false">http://blogs.southworks.net/mwoloski/2010/05/13/windows-azure-mmc-v2-diagnostic-viewer-plugins/</guid>
		<description><![CDATA[We’ve been working during the last couple of months with Ryan Dunn and David Aiken on various things related to Windows Azure management API. One of them, released yesterday was the Windows Azure MMC v2 (read Ryan’s post about it) This version provides a significant amount of features compared to the first version. 
Ryan covered [...]]]></description>
			<content:encoded><![CDATA[<p>We’ve been working during the last couple of months with <a href="http://www.dunnry.com">Ryan Dunn</a> and <a href="http://www.davidaiken.com/">David Aiken</a> on various things related to Windows Azure management API. One of them, released yesterday was the <a href="http://code.msdn.microsoft.com/windowsazuremmc">Windows Azure MMC v2</a> (read <a href="http://dunnry.com/blog/2010/05/11/WindowsAzureMMCV2Released.aspx">Ryan’s post</a> about it) This version provides a significant amount of features compared to the first version. </p>
<p>Ryan covered pretty much of the features in this <a href="http://dunnry.com/blog/ct.ashx?id=351f9dc7-0c05-4202-8ef2-830491c36339&amp;url=http%3a%2f%2fdunnry.blob.core.windows.net%2fvideos%2fWindowsAzureMMC.wmv%3fsr%3db%26si%3dsc%26sig%3dY%252BOq2niX87LxaM6%252FBbUthD%252FpcUPvyItzGByTPfAq00Q%253D">15 minutes screencast</a>, so I will focus on the extensibility of the Windows Azure MMC. </p>
<p>The Windows Azure MMC has the following extensibility points:</p>
<ul>
<li>Adding a new module (i.e. a new node somewhere in the tree) </li>
<li>Adding a new diagnostic data viewer </li>
<li>Adding a new table storage viewer </li>
</ul>
<p>One of the pieces that we enjoyed building with <a href="http://blogs.southworks.net/siacomuzzi">Sebastian</a> (aka Iaco) was the <strong>diagnostics data analysis</strong>. This functionality allows you to work with the data generated by the Windows Azure diagnostics infrastructure and it’s built using MEF and the MVVM pattern. If you want to create your own visualizer or viewer for diagnostic data, keep reading….</p>
<h2><strong>How to implement a diagnostics data viewer</strong></h2>
<p>We used MVVM pattern throughout the MMC (how we did that is long enough to write another blog post). So implementing a diagnostics plugin means in a few words: creating a ViewModel + UserControl, decorate the <strong>ViewModel</strong> with the <strong>ViewerExport </strong>attribute, derive from <strong>ViewerViewModelBase&lt;UserControlType&gt; </strong>and implement <strong>OnSearchAsync </strong>and <strong>OnSearchAsyncCompleted. </strong>These are the step by step instructions to do that. Download the code here: <a title="http://snipurl.com/mmcplugin" href="http://snipurl.com/mmcplugin">http://snipurl.com/mmcplugin</a></p>
<ol>
<li>First, open Visual Studio 2008 or 2010 and create a new <strong>WPF User Control Library</strong>.      </p>
<p><a href="http://blogs.southworks.net/mwoloski/files/2010/05/image.png"><img border="0" alt="image" src="http://blogs.southworks.net/mwoloski/files/2010/05/image-thumb.png" width="640" height="409" /></a>      </li>
<li>Add references to the following dlls (all of them located %install_dir%\WindowsAzureMMC\release)</li>
<ul>
<li><strong>MicrosoftManagementConsole.Infrastructure</strong></li>
<li><strong>Microsoft.Samples.WindowsAzureMmc.Model</strong></li>
<li><strong>Microsoft.Samples.WindowsAzureMmc.ServiceManagement </strong></li>
<li><strong>System.CompositionModel.Composition         <br /></strong>        <br /><a href="http://blogs.southworks.net/mwoloski/files/2010/05/image1.png"><img border="0" alt="image" src="http://blogs.southworks.net/mwoloski/files/2010/05/image-thumb1.png" width="408" height="195" /></a>&#160;</li>
</ul>
<li>Right click on the project and add a new class called “<strong>SimpleAzureDiagnosticsEventViewer</strong>” and decorate it with the following attributes&#160;
<p><font face="consolas"><strong>[PartCreationPolicy(CreationPolicy.NonShared)]          <br />[ViewerExport(&quot;Simple Datagrid Azure Logs&quot;, ViewerType.WindowsAzureLogsViewer)]           <br /></strong>public class SimpleAzureDiagnosticsEventViewer        <br /></font></li>
<li>Derive the class from <strong>ViewerViewModelBase&lt;UserControl1&gt; [1]</strong>. The viewers must implement the <strong>IViewer</strong> interface but we provide this base class that helps with some infrastructure code.
<p><font face="consolas">public class SimpleAzureDiagnosticsEventViewer : </font><strong><font face="consolas">ViewerViewModelBase&lt;UserControl1&gt;         <br /></font></strong></li>
<li>Override the <strong>OnSearchAsync</strong> and <strong>OnSearchAsyncCompleted</strong> methods
<p><strong><font face="consolas">protected override System.Collections.IEnumerable OnSearchAsync(FilterCriteria criteria)         <br />{          <br />} </font></strong></li>
<p><strong><font face="consolas">protected override void OnSearchAsyncCompleted(SearchCompletedEventArgs args)         <br />{          <br />}          <br /></font></strong></p>
<li>Finally use the <strong>DataProvider</strong> [1] (service injected through the base class) to perform a search on the WindowsAzure Logs and fill the <strong>EventLogEntries </strong>collection (notice the RetrieveWindowsAzureLogsData)      </li>
<p><strong><font face="consolas">public ObservableCollection&lt;WindowsAzureLogData&gt; EventLogEntries { get; set; } </font></strong></p>
<p><strong><font face="consolas">public SimpleAzureDiagnosticsEventViewer()         <br />{          <br />&#160;&#160;&#160; this.EventLogEntries = new ObservableCollection&lt;WindowsAzureLogData&gt;();          <br />} </font></strong></p>
<p><font face="consolas">protected override System.Collections.IEnumerable OnSearchAsync(Microsoft.Samples.WindowsAzureMmc.Model.Diagnostics.Analysis.FilterCriteria criteria)       <br />{        <br /></font><font face="consolas"><strong>&#160;&#160;&#160; return this.DataProvider.RetrieveWindowsAzureLogData(criteria);         <br /></strong>} </font></p>
<p><font face="consolas">protected override void OnSearchAsyncCompleted(SearchCompletedEventArgs args)       <br />{        <br /><strong>&#160;&#160;&#160; bool noData = (args.Result == null) || (((IEnumerable&lt;WindowsAzureLogData&gt;)args.Result).Count&lt;WindowsAzureLogData&gt;() == 0); </strong></font></p>
<p><font face="consolas"><strong>&#160;&#160;&#160; if (!noData)         <br />&#160;&#160;&#160; {          <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; var result = (IEnumerable&lt;WindowsAzureLogData&gt;)args.Result;          <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; foreach (var item in result)          <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; {          <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; this.EventLogEntries.Add(item);          <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; }          <br />&#160;&#160;&#160; }          <br /></strong>}</font>      </p>
<li>Finally, put some XAML on the usercontrol bounded to the EventLogEntries collection. In this case we are using the WPF Toolkit datagrid. Notice the <strong>ItemsSource</strong> property bounded to <strong>EventLogEntries</strong>      </li>
<p><font face="consolas">&lt;UserControl x:Class=&quot;SimpleDiagnosticPlugin.UserControl1&quot;       <br />&#160;&#160;&#160; xmlns=&quot;</font><a href="http://schemas.microsoft.com/winfx/2006/xaml/presentation&quot;"><font face="consolas">http://schemas.microsoft.com/winfx/2006/xaml/presentation&quot;</font></a>      <br /><font face="consolas">&#160;&#160;&#160; xmlns:x=&quot;</font><a href="http://schemas.microsoft.com/winfx/2006/xaml&quot;"><font face="consolas">http://schemas.microsoft.com/winfx/2006/xaml&quot;</font></a>      <br /><font face="consolas">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; xmlns:toolkit=&quot;clr-namespace:Microsoft.Windows.Controls;assembly=WPFToolkit&quot;       <br />&#160;&#160;&#160; &gt;        <br />&#160;&#160;&#160; &lt;Grid&gt;        <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;toolkit:DataGrid AutoGenerateColumns=&quot;False&quot; Name=&quot;EventsGrid&quot; ItemsSource=&quot;{Binding EventLogEntries}&quot;         <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Height=&quot;300&quot; VerticalAlignment=&quot;Top&quot; IsReadOnly=&quot;True&quot;&gt;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;toolkit:DataGrid.Columns&gt;        <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;toolkit:DataGridTextColumn Header=&quot;Level&quot; Width=&quot;Auto&quot;&#160; Binding=&quot;{Binding LogLevel}&quot; /&gt;        <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;toolkit:DataGridTextColumn Header=&quot;Message&quot; Width=&quot;Auto&quot; Binding=&quot;{Binding Message}&quot; /&gt;        <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;toolkit:DataGridTextColumn Header=&quot;Date and Time&quot; Width=&quot;Auto&quot; Binding=&quot;{Binding EventDateTime}&quot; /&gt;        <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;/toolkit:DataGrid.Columns&gt;        <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;/toolkit:DataGrid&gt;        <br />&#160;&#160;&#160; &lt;/Grid&gt;        <br />&lt;/UserControl&gt;        <br /></font></p>
<li>Compile and grab the output dll and copy to %install_dir%\WindowsAzureMMC\release.</li>
<li>If you have the MMC open, click on <strong>Refresh Plugins </strong>if not open it and browse to the diagnostics node.      <br /><a href="http://blogs.southworks.net/mwoloski/files/2010/05/image2.png"><img border="0" alt="image" src="http://blogs.southworks.net/mwoloski/files/2010/05/image-thumb2.png" width="640" height="455" /></a> </li>
<li>Click on the Windows Azure Logs dropdown and the new plugin will appear. Select the new plugin and the search will start. The MMC will call the Search method of the IViewer which will end up calling OnSearchAsync with the filter defined.     <br />&#160; <br /><a href="http://blogs.southworks.net/mwoloski/files/2010/05/image3.png"><img border="0" alt="image" src="http://blogs.southworks.net/mwoloski/files/2010/05/image-thumb3.png" width="583" height="480" /></a>&#160;&#160; </li>
<li>If you choose Excel this is what happens
<p><a href="http://blogs.southworks.net/mwoloski/files/2010/05/image4.png"><img border="0" alt="image" src="http://blogs.southworks.net/mwoloski/files/2010/05/image-thumb4.png" width="605" height="480" /></a>&#160;</li>
</ol>
<p>The user experience is probably not the best, we had to make it generic enough with the usual time constraints and the MMC UX constraints. Things can be much better, hopefully in a v3.</p>
<p><strong><em>I will leave you with some food for thought…. how hard would be to create a plugin that mixes the perf data and event logs data? </em></strong></p>
<p><a href="http://blogs.southworks.net/mwoloski/files/2010/05/image5.png"><img border="0" alt="image" src="http://blogs.southworks.net/mwoloski/files/2010/05/image-thumb5.png" width="640" height="347" /></a> </p>
<p><strong>[1] </strong>The ViewerViewModelBase class. Plugins should derive from it.</p>
<p><a href="http://blogs.southworks.net/mwoloski/files/2010/05/image6.png"><img border="0" alt="image" src="http://blogs.southworks.net/mwoloski/files/2010/05/image-thumb6.png" width="640" height="271" /></a></p>
<p><strong>[2] </strong>The IDataProvider interface. The default implementation DataProvider is a wrapper over the diagnostics API that queries the diagnostics tables</p>
<p><a href="http://blogs.southworks.net/mwoloski/files/2010/05/image7.png"><img border="0" alt="image" src="http://blogs.southworks.net/mwoloski/files/2010/05/image-thumb7.png" width="640" height="192" /></a> </p>
<p>Download the code of this simple plugin from <a title="http://snipurl.com/mmcplugin" href="http://snipurl.com/mmcplugin">http://snipurl.com/mmcplugin</a></p>
<img src="http://feeds.feedburner.com/~r/mwoloski/~4/mO9T1DLIkS4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blogs.southworks.net/mwoloski/2010/05/13/windows-azure-mmc-v2-diagnostic-viewer-plugins/feed/</wfw:commentRss>
		<feedburner:origLink>http://blogs.southworks.net/mwoloski/2010/05/13/windows-azure-mmc-v2-diagnostic-viewer-plugins/</feedburner:origLink></item>
		<item>
		<title>Sharepoint 2010 and ADFS</title>
		<link>http://feeds.southworks.net/~r/mwoloski/~3/ZsEMd6ie1Y8/</link>
		<comments>http://blogs.southworks.net/mwoloski/2010/03/05/sharepoint-2010-and-adfs/#comments</comments>
		<pubDate>Fri, 05 Mar 2010 13:47:21 +0000</pubDate>
		<dc:creator>Matias Woloski</dc:creator>
		
		<category><![CDATA[ADFS]]></category>

		<category><![CDATA[Claim-Based Identity]]></category>

		<category><![CDATA[Identity]]></category>

		<category><![CDATA[Sharepoint 2010]]></category>

		<category><![CDATA[Windows Identity Foundation]]></category>

		<guid isPermaLink="false">http://blogs.southworks.net/mwoloski/2010/03/05/sharepoint-2010-and-adfs/</guid>
		<description><![CDATA[I’ve seen a few questions on identity federation with SharePoint before, so I thought about sharing this more broadly.   I recorded a 9 minutes screencast showing the capabilities of ADFSv2 + SharePoint 2010. This is using Microsoft STS, LiveID and our own company STS allowing the following usecases:

Manage access to employees that belong [...]]]></description>
			<content:encoded><![CDATA[<p>I’ve seen a few questions on identity federation with SharePoint before, so I thought about sharing this more broadly.   <br />I recorded a <a href="http://snipurl.com/sp2010adfs">9 minutes screencast</a> showing the capabilities of ADFSv2 + SharePoint 2010. This is using Microsoft STS, LiveID and our own company STS allowing the following usecases:</p>
<ul>
<li>Manage access to employees that belong to the Active Directory</li>
<li>Manage access to partners that has their own STS</li>
<li>Manage access to certain webparts, doc libraries or lists through Sharepoint groups and claims</li>
<li>Allow/deny access to Windows LiveID users</li>
</ul>
<p><a href="http://snipurl.com/sp2010adfs"><img border="0" alt="image" src="http://blogs.southworks.net/mwoloski/files/2010/03/image2.png" width="400" height="307" /></a></p>
<img src="http://feeds.feedburner.com/~r/mwoloski/~4/ZsEMd6ie1Y8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blogs.southworks.net/mwoloski/2010/03/05/sharepoint-2010-and-adfs/feed/</wfw:commentRss>
		<feedburner:origLink>http://blogs.southworks.net/mwoloski/2010/03/05/sharepoint-2010-and-adfs/</feedburner:origLink></item>
		<item>
		<title>Claims-based Identity and Access Control Guide RTM!</title>
		<link>http://feeds.southworks.net/~r/mwoloski/~3/y3OSsCVK1rU/</link>
		<comments>http://blogs.southworks.net/mwoloski/2010/03/05/claims-based-identity-and-access-control-guide-rtm/#comments</comments>
		<pubDate>Fri, 05 Mar 2010 13:42:10 +0000</pubDate>
		<dc:creator>Matias Woloski</dc:creator>
		
		<category><![CDATA[ADFS]]></category>

		<category><![CDATA[Claim-Based Identity]]></category>

		<category><![CDATA[Federation]]></category>

		<category><![CDATA[Geneva Server]]></category>

		<category><![CDATA[Identity]]></category>

		<category><![CDATA[Windows Identity Foundation]]></category>

		<guid isPermaLink="false">http://blogs.southworks.net/mwoloski/2010/03/05/claims-based-identity-and-access-control-guide-rtm/</guid>
		<description><![CDATA[I found myself posting more on twitter than my blog. However this deserved a post.     The RTM of the guide is finally out there in PDF version.

Book content online on MSDN. 
Book PDF download 
Final samples download 
Discuss at Codeplex 


Looking at my name in the cover of a book together [...]]]></description>
			<content:encoded><![CDATA[<p>I found myself posting more on <a href="http://twitter.com/woloski">twitter</a> than my blog. However this deserved a post.     <br />The RTM of the guide is finally out there in PDF version.</p>
<ul>
<li>Book content online <a href="http://msdn.microsoft.com/en-us/library/ff423674.aspx">on MSDN</a>. </li>
<li>Book <a href="http://download.microsoft.com/download/C/7/6/C7680C21-E148-4240-A8CA-4D810FD7B055/A Guide to Claims-based Identity.pdf">PDF download</a> </li>
<li>Final samples <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=33829bcf-f5ea-4650-b807-57c63a753753&amp;displaylang=en">download</a> </li>
<li>Discuss at <a href="http://claimsid.codeplex.com">Codeplex</a> </li>
</ul>
<p><a href="http://download.microsoft.com/download/C/7/6/C7680C21-E148-4240-A8CA-4D810FD7B055/A Guide to Claims-based Identity.pdf"><img border="0" alt="image" src="http://blogs.southworks.net/mwoloski/files/2010/03/image.png" width="345" height="422" /></a></p>
<p>Looking at my name in the cover of a book together with such a group of experts is really a significant milestone in my career. I want to specially thanks <a href="http://blogs.msdn.com/eugeniop">Eugenio</a> for trusting me and inviting me to participate in this project. Hope you find the content useful. If you have any questions or you want to discuss about claims, identity, federation towards your next project feel free to mail me at matias at southworks dot net.</p>
<p><em>Now heading towards the second book: Cloud Guidance! Stay tuned…</em></p>
<img src="http://feeds.feedburner.com/~r/mwoloski/~4/y3OSsCVK1rU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blogs.southworks.net/mwoloski/2010/03/05/claims-based-identity-and-access-control-guide-rtm/feed/</wfw:commentRss>
		<feedburner:origLink>http://blogs.southworks.net/mwoloski/2010/03/05/claims-based-identity-and-access-control-guide-rtm/</feedburner:origLink></item>
		<item>
		<title>PDC09 and the last 3 months…</title>
		<link>http://feeds.southworks.net/~r/mwoloski/~3/TfLv5zXZu2M/</link>
		<comments>http://blogs.southworks.net/mwoloski/2009/12/09/pdc09-and-the-last-3-months/#comments</comments>
		<pubDate>Wed, 09 Dec 2009 09:06:05 +0000</pubDate>
		<dc:creator>Matias Woloski</dc:creator>
		
		<category><![CDATA[Azure]]></category>

		<category><![CDATA[Geneva]]></category>

		<category><![CDATA[Identity]]></category>

		<category><![CDATA[PDC09]]></category>

		<category><![CDATA[Windows Identity Foundation]]></category>

		<guid isPermaLink="false">http://blogs.southworks.net/mwoloski/2009/12/09/pdc09-and-the-last-3-months/</guid>
		<description><![CDATA[Wow, 3 months since my last post… Lots of things happened. We’ve been working with James Conard’s team from Microsoft DPE on the PDC09 keynote demos, specifically the Platform Converge demo (Doug Pourdy) and the VS2010, AppFabric, NET4, WIF demo (by Cameron Skinner, read more in his post). We also helped delivering the training kits [...]]]></description>
			<content:encoded><![CDATA[<p>Wow, 3 months since my last post… Lots of things happened. We’ve been working with <a href="http://twitter.com/jamescon">James Conard</a>’s team from Microsoft<img style="margin-left: 0px;margin-right: 0px" align="right" src="http://www.greffdesign.com/images/PDC09-logo_1.jpg" width="149" height="149" /> DPE on the <a href="http://www.microsoftpdc.com">PDC09</a> keynote demos, specifically the Platform Converge demo (<a href="http://www.douglaspurdy.com/">Doug Pourdy</a>) and the VS2010, AppFabric, NET4, WIF demo (by <a href="http://blogs.msdn.com/camerons">Cameron Skinner</a>, <a href="http://blogs.msdn.com/camerons/archive/2009/11/20/pdc2009-what-a-ride.aspx">read more</a> in his post). We also helped delivering the training kits (<a href="http://www.microsoft.com/downloads/details.aspx?familyid=C3E315FA-94E2-4028-99CB-904369F177C0&amp;displaylang=en">identity</a>, <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=752CB725-969B-4732-A383-ED5740F02E93&amp;displaylang=en">vs2010</a>, <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=413e88f8-5966-4a83-b309-53b7b77edf78&amp;displaylang=en">azure</a>, etc.) and the labs that were available on PDC. <a href="http://blogs.southworks.net/tosborn/2009/11/19/southworks-pdc/">Tim</a> and <a href="http://blogs.southworks.net/jhalife/2009/11/19/pdc-09-tales-from-the-trenches/">Johnny</a> posted more details about this. </p>
<p>Being part of the making of a PDC keynote was very interesting. We had meetings with Partner Architects and Distinguished Engineers of the different Microsoft product groups. You get to learn a lot about politics in those meetings ;). </p>
<p>Once again we worked closely with <a href="http://blogs.msdn.com/vbertocci">Vittorio</a> on Windows Identity Foundation content which <a href="http://blogs.msdn.com/vbertocci/archive/2009/11/17/windows-identity-foundation-rtm.aspx">was RTMed</a>. <a href="http://www.davidaiken.com/">David</a> and <a href="http://dunnry.com">Ryan</a> on Azure and <a href="http://lostintangent.com/2009/11/17/tailspin-travel/">Jonathan Carter</a> on <a href="http://tailspin.codeplex.com">Tailspin</a> among other things. Finally, thanks all the team @ <a href="http://blogs.southworks.net/">Southworks</a> for the great support pre-PDC.</p>
<p>On a related note, the last month we worked hard with <a href="http://blogs.msdn.com/eugeniop">Eugenio</a>, <a href="http://blogs.msdn.com/erwinvandervalk/default.aspx">Erwin</a>, the team at patterns &amp; practices, <a href="http://blogs.southworks.net/fboerr">Fede Boerr</a>, <a href="http://www.pluralsight.com/community/blogs/keith/default.aspx">Keith</a>, <a href="http://www.leastprivilege.com/">Dominick</a> to deliver a printed preview of the <a href="http://claimsid.codeplex.com/">Claims Based Identity &amp; Access Control Guide</a>. Limited copies were distributed on the WIF booth and p&amp;p booth at PDC and the book was very well received. We’ll be soon reaching a milestone and publish the following chapters:</p>
<p>&#160;<a href="http://blogs.southworks.net/mwoloski/files/2009/12/image.png"><img border="0" alt="image" src="http://blogs.southworks.net/mwoloski/files/2009/12/image-thumb.png" width="454" height="480" /></a>&#160;</p>
<p>Well, I had to catch-up with the blog… hopefully will keep the pace now.</p>
<img src="http://feeds.feedburner.com/~r/mwoloski/~4/TfLv5zXZu2M" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blogs.southworks.net/mwoloski/2009/12/09/pdc09-and-the-last-3-months/feed/</wfw:commentRss>
		<feedburner:origLink>http://blogs.southworks.net/mwoloski/2009/12/09/pdc09-and-the-last-3-months/</feedburner:origLink></item>
		<item>
		<title>Claims based Authentication &amp; Authorization: The Guide</title>
		<link>http://feeds.southworks.net/~r/mwoloski/~3/cgp5j-KYq8E/</link>
		<comments>http://blogs.southworks.net/mwoloski/2009/08/15/federated-identity-the-guide/#comments</comments>
		<pubDate>Sat, 15 Aug 2009 04:22:52 +0000</pubDate>
		<dc:creator>Matias Woloski</dc:creator>
		
		<category><![CDATA[ADFS]]></category>

		<category><![CDATA[Claim-Based Identity]]></category>

		<category><![CDATA[Federation]]></category>

		<category><![CDATA[Geneva]]></category>

		<category><![CDATA[Geneva Server]]></category>

		<category><![CDATA[Identity]]></category>

		<category><![CDATA[Identity Management]]></category>

		<category><![CDATA[Windows Identity Foundation]]></category>

		<guid isPermaLink="false">http://blogs.southworks.net/mwoloski/2009/08/15/federated-identity-the-guide/</guid>
		<description><![CDATA[Eugenio announced yesterday the kickoff of a new guide from patterns &#38; practices in which I’m collaborating: Claims based Authentication &#38; Authorization Guide.
This is not a new topic as Eugenio suggests in his blog, but it’s getting more and more attention because:

Technology is more mature, hence it’s easier to implement claim-based identity 
Enterprises are failing [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blogs.msdn.com/eugeniop/archive/2009/08/11/announcing-new-project-patterns-practices-claims-based-authentication-authorization-guide.aspx">Eugenio announced yesterday</a> the kickoff of a new guide from patterns &amp; practices in which I’m collaborating: <strong>Claims based Authentication &amp; Authorization Guide</strong>.</p>
<p>This is not a new topic as Eugenio suggests in his blog, but it’s getting more and more attention because:</p>
<ul>
<li>Technology is more mature, hence it’s easier to implement claim-based identity </li>
<li>Enterprises are failing to control the amount of different identity repositories, leading to higher provisioning/deprovisioning costs, security problems, etc. </li>
<li>End users want simpler user experiences and less passwords</li>
<li>The cloud makes all these even more challenging</li>
</ul>
<p>We started with this project a couple of weeks ago planning the content. The approach we decided to use was heavily driven by scenarios (aka zero bulls**t). We used the visual metaphor of a tube map with scenarios being the stations separated in two main lines: </p>
<ul>
<li>The<font color="#70cde8"> <strong>blue one</strong></font>, the <strong>Enterprise track </strong>approaches the federated identity problem from the point of view of a company with many applications that wants to implement SSO and Federation. The main stations are SSO (within the enterprise), Federation (with partners), SOAP Web Services (and flow of identity across services), SSO with a third party cloud app and some variations like: what if the company decides to host an application on the cloud (namely Windows Azure); or what if the company needs to integrate with an application that talks SAML protocol (i.e. Salesforce, Google Apps)</li>
<li>The <font color="#e7e496"><strong>yellow one</strong></font>, <strong>ISV track </strong>on the other hand tackle the problem from the perspective of an ISV that wants to offer an application as a service (think about Salesforce or Dynamics CRM Online as the canonical examples). In this track we start by explaining how to implement federated identity for a cloud application. Then we show how to automate federation to on board new customers. We also show things like exposing a REST API and how that plays with claims; how to integrate with LiveID (or OpenID) for small customers that don’t have an Identity Provider in place; and we end up explaining how to do auditing/billing with claims.</li>
</ul>
<p><a href="http://blogs.southworks.net/mwoloski/files/2009/08/image.png"><img border="0" alt="image" src="http://blogs.southworks.net/mwoloski/files/2009/08/image-thumb.png" width="720" height="570" /></a></p>
<p>I’m very proud and excited about being part of such a great team including: <a href="http://www.leastprivilege.com/">Dominick Baier</a>, <a href="http://blogs.msdn.com/vbertocci/">Vittorio Bertocci</a>, <a href="http://www.pluralsight.com/community/blogs/keith/default.aspx">Keith Brown</a>, <a href="http://blogs.msdn.com/dphill/default.aspx">David Hill</a> and <a href="http://blogs.msdn.com/eugeniop">Eugenio Pace</a>. I’m sure that something great will come up from this team, the board of reviewers and the community that will help to prioritize and keep the focus!</p>
<img src="http://feeds.feedburner.com/~r/mwoloski/~4/cgp5j-KYq8E" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blogs.southworks.net/mwoloski/2009/08/15/federated-identity-the-guide/feed/</wfw:commentRss>
		<feedburner:origLink>http://blogs.southworks.net/mwoloski/2009/08/15/federated-identity-the-guide/</feedburner:origLink></item>
	</channel>
</rss>
