<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Eugenio Pace : SaaS</title><link>http://blogs.msdn.com/eugeniop/archive/tags/SaaS/default.aspx</link><description>Tags: SaaS</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Exploring the Service Provider track – Fabrikam Shipping Part II (Solution)</title><link>http://blogs.msdn.com/eugeniop/archive/2009/09/03/exploring-the-service-provider-track-fabrikam-shipping-part-ii-solution.aspx</link><pubDate>Fri, 04 Sep 2009 07:45:10 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9891204</guid><dc:creator>eugeniop</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/eugeniop/comments/9891204.aspx</comments><wfw:commentRss>http://blogs.msdn.com/eugeniop/commentrss.aspx?PostID=9891204</wfw:commentRss><description>&lt;p&gt;Now that we presented the &lt;a href="http://blogs.msdn.com/eugeniop/archive/2009/09/01/exploring-the-service-provider-track-first-station-fabrikam-shipping-part-i-the-scenario-challenges.aspx"&gt;scenario &amp;amp; the requirements&lt;/a&gt;, let’s take a look at the solution. &lt;/p&gt;  &lt;h2&gt;What is conceptual solution we propose?&lt;/h2&gt;  &lt;p&gt;&lt;strong&gt;Fabrikam Shipping in the pre-Claims era: &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;This diagram shows &lt;strong&gt;Fabrikam Shipping&lt;/strong&gt; today if used by Adatum (no claims, no federation):&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/eugeniop/WindowsLiveWriter/ExploringtheServiceProvidertrackFabrikam_9DAE/image_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/eugeniop/WindowsLiveWriter/ExploringtheServiceProvidertrackFabrikam_9DAE/image_thumb.png" width="640" height="398" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;You will see the usual suspects for a typical .NET web application. Furthermore, Fabrikam is using standard providers for authentication, authorization and profile. In this configuration, everyone in Adatum must use, of course, user name &amp;amp; passwords. The username is the handle associated with a role in the roles database, which drives application behavior (what you can do).&lt;/p&gt;  &lt;p&gt;In the example, John from sales, can only Order New Shipments, but Peter from Customer Service, can Manage them.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Making Fabrikam Shipping Claims-Aware&lt;/h3&gt;  &lt;p&gt;What we want now, is Fabrikam to be claims aware and trust claims issued by Adatum. Claims issued by Adatum will be used for authentication and authorization. We also want to map Adatum &lt;em&gt;internal&lt;/em&gt; roles to Fabrikam’s for authorization purposes: who will be a “&lt;strong&gt;Shipment Creator&lt;/strong&gt;”? Who will be an “&lt;strong&gt;Administrator&lt;/strong&gt;”?&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/eugeniop/WindowsLiveWriter/ExploringtheServiceProvidertrackFabrikam_9DAE/image_4.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/eugeniop/WindowsLiveWriter/ExploringtheServiceProvidertrackFabrikam_9DAE/image_thumb_1.png" width="640" height="396" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Let’s see how this would work:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;When John attempts to use &lt;strong&gt;FS&lt;/strong&gt; for the first time (e.g. htt&lt;strong&gt;ps://adatum.fabrikamshipping.com&lt;/strong&gt;), because there’s no session established yet (John is un-authenticated from &lt;strong&gt;FS&lt;/strong&gt; point of view) he will be redirected to Fabrikam’s Issuer (e.g. &lt;strong&gt;https://login.fabrikam.com&lt;/strong&gt;). Fabrikam’s Issuer is trusted by the application. &lt;/li&gt;    &lt;li&gt;Again, John will be redirected to Adatum’s Issuer, because that is what Fabrikam’s Issuer trusts. &lt;/li&gt;    &lt;li&gt;If John uses a domain joined desktop, he’d already be authenticated in his network and will have a valid Kerberos token. This token is used by the Adatum’s Issuer to create Adatum’s claims: &lt;strong&gt;employee name&lt;/strong&gt;, &lt;strong&gt;employee address&lt;/strong&gt;, &lt;strong&gt;cost center&lt;/strong&gt;, and &lt;strong&gt;department&lt;/strong&gt; John works for.&amp;#160;&amp;#160; &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;The process unwinds then: &lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Adatum’s claims are sent back to Fabrikam’s Issuer, where they are transformed: &lt;/li&gt; &lt;/ol&gt;  &lt;blockquote&gt;   &lt;p&gt;- &lt;strong&gt;Name&lt;/strong&gt;, &lt;strong&gt;address&lt;/strong&gt; and &lt;strong&gt;cost center&lt;/strong&gt; are simply copied (no transformation)&lt;/p&gt;    &lt;p&gt;- Other rules are applied that will result in a “role” claims to be issued (any of the valid roles &lt;strong&gt;FS&lt;/strong&gt; understands)&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;More examples of mappings:&lt;/p&gt;    &lt;p&gt;&lt;em&gt;exists([issuer == &amp;quot;Adatum&amp;quot;]) =&amp;gt; issue(type = &amp;quot;Role&amp;quot;, value = &amp;quot;Shipment Creator&amp;quot;);&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;Which can be interpreted as:&lt;/p&gt;    &lt;p&gt;&lt;em&gt;“Any employee from Adatum can create shipment orders”&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&amp;#160;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;c:[type == “http://schemas.xmlsoap.org/claims/Group”, value == &amp;quot;Shipments&amp;quot;] =&amp;gt; issue(type = “Role”, value = “Shipment Manager”);&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;that would implement the rule:&lt;/p&gt;    &lt;p&gt;&lt;em&gt;“Any employee from Adatum in “Shipments” (indicated by group membership) department can manage shipment orders”&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;em&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/em&gt;2&lt;em&gt;. &lt;/em&gt;After these transformation happens, John is finally directed back to the application with the transformed claims.&lt;/p&gt;  &lt;table border="1" cellspacing="0" cellpadding="2" width="855"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="853"&gt;         &lt;blockquote style="margin-right: 0px" dir="ltr"&gt;           &lt;p&gt;Adatum &lt;em&gt;could&lt;/em&gt; issue Fabrikam’s specific claims, but we don’t want to pollute Adatum’s Issuer with Fabrikam specific concepts (like Fabrikam roles). Fabrikam will allow Adatum to issue any claims they want or can, and then will allow Adatum to configure the system to map these Adatum claims into Fabrikam claims.&amp;#160;&amp;#160; &lt;/p&gt;         &lt;/blockquote&gt;       &lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;Fabrikam will do this for &lt;em&gt;every new Customer&lt;/em&gt; using &lt;strong&gt;Fabrikam Shipping&lt;/strong&gt;. Yet, their application will always understand &lt;em&gt;the same&lt;/em&gt; set of claims: “&lt;strong&gt;Shipment Creator&lt;/strong&gt;”, etc. &lt;strong&gt;FS&lt;/strong&gt; stays decoupled.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;table border="1" cellspacing="0" cellpadding="2" width="856"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="854"&gt;&lt;strong&gt;Note 1:            &lt;br /&gt;&lt;/strong&gt;This scenario is almost identical to &lt;a href="http://blogs.msdn.com/eugeniop/archive/2009/03/09/architecting-cloud-applications-for-the-enterprise-part-iv-supercloudysoftware-sketches-issuetracker-enterprise-edition.aspx"&gt;IssueTracker&lt;/a&gt;. If you feel &lt;em&gt;deja-vu,&lt;/em&gt; don’t be surprised. Only in IssueTracker, we used .NET Services ACS as the Service Provider (Fabrikam) Issuer.           &lt;br /&gt;          &lt;br /&gt;&lt;strong&gt;Note 2:            &lt;br /&gt;&lt;/strong&gt;This scenario is also similar (but not quite the same) to &lt;a href="http://blogs.msdn.com/eugeniop/archive/2009/08/24/next-station-federation-between-adatum-its-customers.aspx"&gt;Adatum’s a-Order&lt;/a&gt;&lt;strong&gt;&lt;/strong&gt;. Some key differences: Fabrikam is a multi-tenant system, probably with a provisioning experience, that &lt;strong&gt;a-Order&lt;/strong&gt; lacked. This is because in our fictitious (but hopefully realistic) world, the Customer &lt;em&gt;churn&lt;/em&gt; in &lt;strong&gt;Fabrikam Shipping&lt;/strong&gt; is much higher than in &lt;strong&gt;a-Order. &lt;/strong&gt;That is, we assume the frequency customers join and leave Fabrikam is higher. Thus, Fabrikam needs to automate this as much as possible.&amp;#160; &lt;br /&gt;          &lt;br /&gt;&lt;strong&gt;Note 3:            &lt;br /&gt;&lt;/strong&gt;Yes, there will be another post with Adatum’s side of the story. But I’m sure by now you’ll guess what’s in there. &lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;I’ll cover provisioning in the next post, as it has some interesting discussion points. But you can see some hints &lt;a href="http://blogs.msdn.com/eugeniop/archive/2009/03/16/azure-issuetracker-enterprise-simple-demos.aspx"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Feedback very much welcome.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Post-post announcement:&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;We hope to have a some running code and much much polished chapters soon. We’ll probably upload those to a CodePlex site. Stay tuned!&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9891204" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/eugeniop/archive/tags/Architecture/default.aspx">Architecture</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/Web+Client/default.aspx">Web Client</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/SaaS/default.aspx">SaaS</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/Security/default.aspx">Security</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/Federated+Identity/default.aspx">Federated Identity</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/Claims/default.aspx">Claims</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/S_2B00_S/default.aspx">S+S</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/.NET+Services/default.aspx">.NET Services</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/IssueTracker/default.aspx">IssueTracker</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/Federation+Provider/default.aspx">Federation Provider</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/Identity+Provider/default.aspx">Identity Provider</category></item><item><title>Exploring the Service Provider track – First station: Fabrikam Shipping – Part I (the scenario &amp; challenges)</title><link>http://blogs.msdn.com/eugeniop/archive/2009/09/01/exploring-the-service-provider-track-first-station-fabrikam-shipping-part-i-the-scenario-challenges.aspx</link><pubDate>Wed, 02 Sep 2009 01:57:10 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9890115</guid><dc:creator>eugeniop</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/eugeniop/comments/9890115.aspx</comments><wfw:commentRss>http://blogs.msdn.com/eugeniop/commentrss.aspx?PostID=9890115</wfw:commentRss><description>&lt;p&gt;Once again, thanks everybody that wrote us with reviews, feedback and suggestions! Please keep it coming! Also: we hope to have soon a CodePlex site where we can start sharing more. We are still working out some details. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;As usual, the Disclaimer:&lt;/strong&gt; this post and the next ones are early drafts to share with you the direction we are taking. They might (and I hope they will) change quite a bit in the &lt;a href="http://blogs.msdn.com/eugeniop/archive/2009/08/11/announcing-new-project-patterns-practices-claims-based-authentication-authorization-guide.aspx"&gt;actual Guide&lt;/a&gt;! We might end up not covering one of these scenarios in the book. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;An additional disclaimer for this post:&lt;/strong&gt; I wrote the whole scenario following the same template of the previous posts and it resulted in a very loooong article. So I divided it into two parts. This is Part I –&amp;gt; the scenario, the challenges and the requirements. Part II will be the solution.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;An Ode to Simplification: &lt;/strong&gt;there’s been quite some debate internally to this project as how to name things, especially “STS” vs. “Issuer” vs. “I-STS” vs. “R-STS” vs. “FP”, etc. Keith has started this on &lt;a href="http://www.pluralsight.com/community/blogs/keith/archive/2009/07/14/issuer-vs-sts.aspx"&gt;his blog&lt;/a&gt; some time ago. We definitely want to keep things &lt;u&gt;simple&lt;/u&gt;. As simple as possible, but not simpler. For now we have settled on the term “Issuer”, independently of the logical role it takes part in. In simpler words: what we used to call “Identity Provider” is now an “Issuer”. What we called a “Federation provider” is also an “Issuer”.&lt;/p&gt;  &lt;p&gt;Keith is writing a whole section of our book on “Jargon” and meaning of the different terms.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Credits:&lt;/strong&gt; this scenario is largely inspired on Vittorio’s PDC demo. See &lt;a href="http://blogs.msdn.com/vbertocci/archive/2009/06/16/announcing-fabrikamshipping-in-depth-semi-realistic-sample-for-geneva-framework.aspx"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/eugeniop/WindowsLiveWriter/ExploringtheServiceProvidertrackFirststa_880A/image_6.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/eugeniop/WindowsLiveWriter/ExploringtheServiceProvidertrackFirststa_880A/image_thumb_2.png" width="189" height="131" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;The &lt;strong&gt;themes&lt;/strong&gt; for the first “Service Provider” scenario are:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Identity in a SaaS application &lt;/li&gt;    &lt;li&gt;Federation with multiple Customers &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;There’s 1 &lt;strong&gt;variations&lt;/strong&gt; in this scenario:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Automating the on-boarding process &lt;/li&gt; &lt;/ol&gt;  &lt;h2&gt;The Introduction&lt;/h2&gt;  &lt;p&gt;Fabrikam is a company that provides shipping services. As part of their offering, they have an application (&lt;strong&gt;Fabrikam Shipping&lt;/strong&gt; – &lt;strong&gt;FS&lt;/strong&gt;) that allows its customers to create new shipping orders, track them, etc. &lt;strong&gt;Fabrikam Shipping&lt;/strong&gt; is delivered as a service and runs in Fabrikam’s datacenter. Fabrikam Customers use a browser to access it.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;FS&lt;/strong&gt; is a fairly standard .NET web application: the web site is based on ASP.NET 3.5, the backend is SQL Server, etc. In the current version, users are required to authenticate using (guess what): username and password!!&lt;/p&gt;  &lt;p&gt;Fabrikam uses ASP.NET standard providers for authentication (Membership), authorization (Roles provider) and personalization (Profile).&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Fabrikam Shipping&lt;/strong&gt; is also a &lt;em&gt;multi-tenant&lt;/em&gt; application: the same instance of the app is used by many customers.&lt;/p&gt;  &lt;p&gt;One sunny day in Seattle, they sign a great deal with a marquee Customer: Adatum Corp. And Adatum doesn’t like the username and password, because they are &lt;a href="http://blogs.msdn.com/eugeniop/archive/2009/08/19/welcome-to-the-enterprise-line-our-next-stop-will-be-station-1-sso-mind-the-gap.aspx"&gt;working hard to get rid of identity silos&lt;/a&gt;. They have 3 concerns:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;&lt;strong&gt;Usability&lt;/strong&gt; for their employees. Lack of SSO, forgetting passwords, using sticky notes to remember them, etc. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Maintenance costs&lt;/strong&gt;: &lt;/li&gt;    &lt;ol&gt;     &lt;li&gt;What happens if an employee forgets his or her corporate password? He will probably call Adatum’s IT help desk. What happens if they use FS and they forget its password? who should they call? Consider this:&lt;/li&gt;      &lt;ol&gt;       &lt;li&gt;If they instruct employees to call &lt;strong&gt;Fabrikam’s&lt;/strong&gt; help desk, there would be a special procedure for IT guys, would probably require training, etc.&lt;/li&gt;        &lt;li&gt;If they instruct employees to call Fabrikam directly, they would impact #1 &lt;/li&gt;     &lt;/ol&gt;      &lt;li&gt;When a new employee is hired, he is already provisioned in Adatum’s systems. They don’t want special processes for &lt;strong&gt;FS.&lt;/strong&gt; &lt;/li&gt;   &lt;/ol&gt;    &lt;li&gt;&lt;strong&gt;Liability&lt;/strong&gt;:       &lt;ol&gt;       &lt;li&gt;Adatum has authentication policies that are there for a reason. They also want to retail control on who has access to what (regardless of where that is deployed) and &lt;strong&gt;FS&lt;/strong&gt; is no exception. &lt;/li&gt;        &lt;li&gt;If an employee leaves the company, he should &lt;u&gt;not&lt;/u&gt; have access to &lt;strong&gt;FS&lt;/strong&gt; anymore, effective immediately. If they used username / passwords, they could potentially access &lt;strong&gt;FS&lt;/strong&gt; from other places, even if they are not an Adatum employee anymore. &lt;/li&gt;     &lt;/ol&gt;   &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Back to &lt;strong&gt;FS&lt;/strong&gt;:&lt;/p&gt;  &lt;p&gt;Access Control to &lt;strong&gt;FS&lt;/strong&gt; is based on Roles. There are 3 roles:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;“&lt;strong&gt;Shipment Creators&lt;/strong&gt;”. Anyone in this role can create new orders. &lt;/li&gt;    &lt;li&gt;“&lt;strong&gt;Shipment Managers&lt;/strong&gt;”. Can create and modify existing shipment orders. &lt;/li&gt;    &lt;li&gt;“&lt;strong&gt;Administrators&lt;/strong&gt;”. Can configure the system (e.g. look and feel, shipping preferences, billing, etc). &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;&lt;strong&gt;FS&lt;/strong&gt; also keeps profile information for users, to avoid repeatedly entering common information and preferences. More concretely, &lt;strong&gt;FS&lt;/strong&gt; allows its users to store:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Package &lt;strong&gt;Sender&lt;/strong&gt; information (sender address) &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Cost Center&lt;/strong&gt; information for billing &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Fabrikam can open the bills to its Customers by Cost Center. With this, 2 employees from Adatum belonging to 2 different departments would get 2 different bills.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h2&gt;Key Requirements.&lt;/h2&gt;  &lt;p&gt;Adatum wants &lt;strong&gt;SSO&lt;/strong&gt; for its employees.&lt;/p&gt;  &lt;p&gt;Fabrikam wants to &lt;strong&gt;avoid storing configuration information&lt;/strong&gt; about the shipment that can become stale later on (e.g. the package sender information).&lt;/p&gt;  &lt;p&gt;Fabrikam wants to &lt;strong&gt;bill customers by Cost Center&lt;/strong&gt; if they supply one. &lt;/p&gt;  &lt;p&gt;Some assumptions:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Adatum has an &lt;strong&gt;Issuer&lt;/strong&gt; (see &lt;a href="http://blogs.msdn.com/eugeniop/archive/2009/08/19/welcome-to-the-enterprise-line-our-next-stop-will-be-station-1-sso-mind-the-gap.aspx"&gt;Scenario #1&lt;/a&gt;) &lt;/li&gt;    &lt;li&gt;Fabrikam can change anything in their application&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;We’ll look at the solution space in the next post.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9890115" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/eugeniop/archive/tags/Web+Client/default.aspx">Web Client</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/SaaS/default.aspx">SaaS</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/S_2B00_S_5F00_Run/default.aspx">S+S_Run</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/S_2B00_S_5F00_Build/default.aspx">S+S_Build</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/Security/default.aspx">Security</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/Federated+Identity/default.aspx">Federated Identity</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/Claims/default.aspx">Claims</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/Federation+Provider/default.aspx">Federation Provider</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/Identity+Provider/default.aspx">Identity Provider</category></item><item><title>Announcing new project – patterns &amp; practices - Claims based Authentication &amp; Authorization Guide</title><link>http://blogs.msdn.com/eugeniop/archive/2009/08/11/announcing-new-project-patterns-practices-claims-based-authentication-authorization-guide.aspx</link><pubDate>Tue, 11 Aug 2009 23:02:22 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9864880</guid><dc:creator>eugeniop</dc:creator><slash:comments>5</slash:comments><comments>http://blogs.msdn.com/eugeniop/comments/9864880.aspx</comments><wfw:commentRss>http://blogs.msdn.com/eugeniop/commentrss.aspx?PostID=9864880</wfw:commentRss><description>&lt;p&gt;For the next couple of months I’ll be working on a new project here at &lt;a href="http://msdn.microsoft.com/practices"&gt;patterns &amp;amp; practices&lt;/a&gt;, developing a new guide for claims based authentication and authorization.&lt;/p&gt;  &lt;p&gt;I’m personally very happy to be working on this project, for many reasons. I believe frameworks like “Geneva” (previously known as “Zermatt”, now Windows Identity Foundation), products like “Geneva Server” (now ADFS) are great platform additions to enable a new set of scenarios.&lt;/p&gt;  &lt;p&gt;I realize that SSO, Federated Identity and Claims are not &lt;u&gt;&lt;em&gt;new&lt;/em&gt;&lt;/u&gt;. It’s just that we have much better tools and higher abstractions to implement these scenarios much more easily than ever.&lt;/p&gt;  &lt;p&gt;I also feel privileged to work with such a great team. I’ll be sitting on giants shoulders: &lt;a href="http://www.leastprivilege.com/"&gt;Dominick Baier&lt;/a&gt;, &lt;a href="http://blogs.msdn.com/vbertocci/"&gt;Vittorio Bertocci&lt;/a&gt;, &lt;a href="http://www.pluralsight.com/community/blogs/keith/default.aspx"&gt;Keith Brown&lt;/a&gt;, &lt;a href="http://blogs.msdn.com/dphill/default.aspx"&gt;David Hill&lt;/a&gt; and &lt;a href="http://blogs.southworks.net/mwoloski/"&gt;Matias Woloski&lt;/a&gt;. Many others are joining as advisors and reviewers.&lt;/p&gt;  &lt;p&gt;As it is customary now in the patterns &amp;amp; practices team, we will be publishing our content often and very early. I’ll post details here soon.&lt;/p&gt;  &lt;p&gt;We also want to try a few new things in this project. In this guide we want to be very focused on the &lt;b&gt;&lt;i&gt;practices&lt;/i&gt;&lt;/b&gt; rather than on the “theory”, the “principles” or “philosophy” of claims based security.&lt;/p&gt;  &lt;p&gt;We want to have very concrete scenarios, with a high fidelity of what happens out there in the real world. Almost a “case study” approach in which we weave a story across the book that takes the reader into more ambitious requirements as he proceeds. &lt;/p&gt;  &lt;p&gt;With each chapter, we will introduce more complex solutions to address increasingly more ambitious requirements. &lt;/p&gt;  &lt;p&gt;The current backlog for the scenarios we want to cover is illustrated below. Each “station” is a core scenario. Some will have small variations (like Azure hosting in the first one).&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/eugeniop/WindowsLiveWriter/AnnouncingnewprojectpatternspracticesCla_E870/image_2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/eugeniop/WindowsLiveWriter/AnnouncingnewprojectpatternspracticesCla_E870/image_thumb.png" width="640" height="454" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;The two lines (yellow and light blue) refer to the two perspectives we plan to include: that of someone &lt;em&gt;consuming&lt;/em&gt; software (the blue), and that of some &lt;em&gt;building&lt;/em&gt; software (the yellow).&lt;/p&gt;  &lt;p&gt;Stay tuned!&lt;/p&gt;  &lt;p&gt;Eugenio&lt;/p&gt;  &lt;p&gt;Update: fixed image size.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9864880" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/eugeniop/archive/tags/SaaS/default.aspx">SaaS</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/Federated+Identity/default.aspx">Federated Identity</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/Claims/default.aspx">Claims</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/S_2B00_S/default.aspx">S+S</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/SSO/default.aspx">SSO</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/Azure/default.aspx">Azure</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/Federation+Provider/default.aspx">Federation Provider</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/WebSSO/default.aspx">WebSSO</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/Claims+Guide/default.aspx">Claims Guide</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/Geneva/default.aspx">Geneva</category></item><item><title>First experiments with (new) SQL Data Services</title><link>http://blogs.msdn.com/eugeniop/archive/2009/06/12/first-experiments-with-new-sql-data-services.aspx</link><pubDate>Fri, 12 Jun 2009 22:03:29 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9737543</guid><dc:creator>eugeniop</dc:creator><slash:comments>6</slash:comments><comments>http://blogs.msdn.com/eugeniop/comments/9737543.aspx</comments><wfw:commentRss>http://blogs.msdn.com/eugeniop/commentrss.aspx?PostID=9737543</wfw:commentRss><description>&lt;p&gt;Last week I got my new login to the new &lt;a href="http://www.microsoft.com/azure/data.mspx"&gt;SQL Data Services&lt;/a&gt;. As a reminder for all readers:&lt;/p&gt;  &lt;h5&gt;&lt;em&gt;SDS accelerates its plans to offer relational capabilities &lt;/em&gt;&lt;/h5&gt;  &lt;p&gt;&lt;em&gt;May 11, 2009 - Based on customer feedback, SDS has accelerated its plans and will be offering true relational capabilities through SQL Server’s existing network protocol, Tabular Data Stream (TDS) and existing query language Transact-SQL (T-SQL). This will provide customers direct access to the familiar relational model, T-SQL programming language and the existing development and management tools, while continuing to deliver on our key value props of fault tolerance, high availability, friction free provisioning and pay as you grow scaling. For more information, see the &lt;/em&gt;&lt;a href="http://www.microsoft.com/azure/data.mspx"&gt;&lt;em&gt;SDS product site&lt;/em&gt;&lt;/a&gt;&lt;em&gt; and the &lt;/em&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/dd557595.aspx"&gt;&lt;em&gt;MSDN Library&lt;/em&gt;&lt;/a&gt;&lt;em&gt;.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;What I’ve done? After some initial “hello world-ish” tests, I wanted to try something more interesting so I decided to port &lt;a href="http://www.codeplex.com/azureissuetracker"&gt;IssueTracker&lt;/a&gt; into SDS. &lt;/p&gt;  &lt;p&gt;As you know, &lt;strong&gt;&lt;em&gt;IssueTracker&lt;/em&gt;&lt;/strong&gt; was originally designed for SDS’ previous ACE model (Authority, Container, Entity), so my first task was to re-write the data access layer to use SQL Server. &lt;/p&gt;  &lt;p&gt;One of my goals in this experiment was to test SDS “&lt;a href="http://en.wikipedia.org/wiki/Impedance_matching"&gt;impedance match&lt;/a&gt;” with on-premises SQL Server. Also, I wanted to develop independently of the availability of SDS. Not that SDS is unreliable, but currently it is available only inside Microsoft’s corporate network. I didn’t want to VPN into corpnet for this when working from home.&lt;/p&gt;  &lt;p&gt;So I chose to develop exclusively against my local SQL Express instance first and then make a switch to the real SDS.&lt;/p&gt;  &lt;p&gt;Fortunately, the app was designed with a couple of layers that isolated the persistence details, so writing the new data tier was a fairly mechanical process. &lt;/p&gt;  &lt;p&gt;This diagram roughly captures the architecture:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.codeplex.com/azureissuetracker"&gt;&lt;/a&gt;&lt;a href="http://blogs.msdn.com/blogfiles/eugeniop/WindowsLiveWriter/FirstexperimentswithSQLDataServices_7AB8/clip_image001_2.gif"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image001" border="0" alt="clip_image001" src="http://blogs.msdn.com/blogfiles/eugeniop/WindowsLiveWriter/FirstexperimentswithSQLDataServices_7AB8/clip_image001_thumb.gif" width="3" height="3" /&gt;&lt;/a&gt;&lt;a href="http://blogs.msdn.com/blogfiles/eugeniop/WindowsLiveWriter/FirstexperimentswithSQLDataServices_7AB8/clip_image002_2.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image002" border="0" alt="clip_image002" src="http://blogs.msdn.com/blogfiles/eugeniop/WindowsLiveWriter/FirstexperimentswithSQLDataServices_7AB8/clip_image002_thumb.jpg" width="629" height="478" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The repository classes implement a common interface the app uses, the Model is just a collection of rather simple C# objects with no knowledge of the database being used. The Mappers are responsible for the transformations between the application model and the entities that do have knowledge of the database.&lt;/p&gt;  &lt;p&gt;In the diagram, classes marked with &lt;font color="#ff0000" size="4"&gt;&lt;strong&gt;*&lt;/strong&gt;&lt;/font&gt; are new, the numbers indicate variability points in the implementation, meaning that I can switch between one implementation and the other. Because I used LINQ to SQL, the types in the box labeled as “SQL Model” were generated     &lt;br /&gt;automatically by the LINQ to SQL designer.&lt;/p&gt;  &lt;p&gt;When my unit tests compiled again, I switched the connection string to point from the “.\SQLEXPRESS” to the SDS instance in our network and…it worked! First attempt!&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/eugeniop/WindowsLiveWriter/FirstexperimentswithSQLDataServices_7AB8/image_2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/eugeniop/WindowsLiveWriter/FirstexperimentswithSQLDataServices_7AB8/image_thumb.png" width="404" height="411" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Overall, it was a rather painless and pleasant experience. Of course the data model in the app is simple and I’m not using any advanced queries or any sophisticated features in SQL yet.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h2&gt;Things missing and Possible next steps:&lt;/h2&gt;  &lt;p&gt;&lt;b&gt;&lt;u&gt;&lt;/u&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;The original implementation had 2 requirements that leveraged features in SDS previous ACE model: &lt;/p&gt;  &lt;p&gt;1- &lt;b&gt;Multi-tenant isolation&lt;/b&gt;: achieved through containers. Each tenant got its own container.&lt;/p&gt;  &lt;p&gt;2- &lt;b&gt;Schema flexibility&lt;/b&gt;: tenants could customize the application, extending the schema of some core entities. Flexible entities made this very easy, because they are essentially property bags.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;For #1, I considered two options:&lt;/p&gt;  &lt;p&gt;1- Partitioning by tenant&lt;/p&gt;  &lt;p&gt;2- Do not partition at all and have all tenants on the same database (single-instance, multi-tenant)&lt;/p&gt;  &lt;p&gt;The first option is fairly straight forward. Each tenant gets its own database that is created at provisioning time. The “tenant id” is part of the calling context in the application, so I dynamically connect to each database as needed. Two advantages of this approach: there’s high isolation between tenants (no data from one can leak into another), and the application code is simpler, because from the data perspective, the application is “single-tenant”.&lt;/p&gt;  &lt;p&gt;I haven’t implemented the extensibility feature yet, but I’m planning on reusing some techniques we did some research on &lt;a href="http://msdn.microsoft.com/en-us/library/aa479086.aspx"&gt;in the past&lt;/a&gt;, probably through extension tables.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;There’re other interesting areas for research such as:&lt;/p&gt;  &lt;p&gt;1- &lt;b&gt;Strategies for partitioning&lt;/b&gt;: in discussions with &lt;a href="http://dunnry.com/blog/"&gt;Ryan&lt;/a&gt;, he suggested I should consider more sophisticated ways of partitioning the information: by tenant, by tenant + project, etc. and I agree this would be interesting .&lt;/p&gt;  &lt;p&gt;2- &lt;b&gt;Unit of Work&lt;/b&gt;: currently I’m simply reusing the original ACE implicit &lt;strong&gt;&lt;em&gt;UoW&lt;/em&gt;&lt;/strong&gt; that comes with each interaction. This is, each time you called Create, Delete or Update on SDS, the operation was completed in the context of a unit of work. You could not logically group multiple operation (say, 2 creates and 1 delete). This is suboptimal with the SQL implementation, because the new SDS supports transactions and I would like to leverage that.&lt;/p&gt;  &lt;p&gt;3- &lt;b&gt;Performance and scalability issues&lt;/b&gt;: I haven’t spent any time looking at the application’s “chattiness” with the database that might lead to degraded performance, or any other data access optimizations. This is a whole area in itself, but not very different from “regular” application development. The only exception perhaps is that, in theory at least, the app and the database can be hosted in different datacenters (say the app in Amazon and the data in SDS). I’m not sure that would be a good idea anyway, probably not for this scenario. If the app was hosted in Windows Azure &lt;em&gt;and&lt;/em&gt; used SDS, then they would be &lt;em&gt;close&lt;/em&gt; in terms of network distance (low latency &amp;amp; high bandwidth).&amp;#160; &lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9737543" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/eugeniop/archive/tags/SaaS/default.aspx">SaaS</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/S_2B00_S_5F00_Build/default.aspx">S+S_Build</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/SQL+Server+Data+Services/default.aspx">SQL Server Data Services</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/Azure+Services+Platform/default.aspx">Azure Services Platform</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/Azure/default.aspx">Azure</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/SDS/default.aspx">SDS</category></item><item><title>Windows Azure 101 – Primitives and Application Patterns – Playing Mendeleyev</title><link>http://blogs.msdn.com/eugeniop/archive/2009/03/18/windows-azure-101-primitives-and-application-patterns-playing-mendeleyev.aspx</link><pubDate>Thu, 19 Mar 2009 02:42:44 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9488478</guid><dc:creator>eugeniop</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/eugeniop/comments/9488478.aspx</comments><wfw:commentRss>http://blogs.msdn.com/eugeniop/commentrss.aspx?PostID=9488478</wfw:commentRss><description>&lt;p&gt;Windows Azure’s primitives are very simple, but as in many other things, the power comes from the combination of these simpler primitives to create more complex things. &lt;/p&gt;  &lt;p&gt;Look around and see how many things can be assembled from a little more than &lt;a href="http://en.wikipedia.org/wiki/Periodic_table"&gt;100 “simple” elements&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;In Windows Azure,&amp;#160; there are essentially 2 types of building blocks: code hosts blocks and persistent bocks&amp;#160;&amp;#160;&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/eugeniop/WindowsLiveWriter/WindowsAzure101PrimitivesandApplicationP_EAAC/image_4.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/eugeniop/WindowsLiveWriter/WindowsAzure101PrimitivesandApplicationP_EAAC/image_thumb_1.png" width="650" height="373" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;The code hosts run (your) code, the persistence blocks store data.&lt;/p&gt;  &lt;p&gt;There are 2 types of Code Hosts:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;&lt;strong&gt;Interactive&lt;/strong&gt;: ASP.NET &amp;amp; WCF &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Non-interactive&lt;/strong&gt;: Worker&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;The &lt;strong&gt;&lt;em&gt;interactive&lt;/em&gt;&lt;/strong&gt; building blocks, whether it is a human initiated interaction (ASP.NET) or a programmatic interaction (WCF), is what is referred in Windows Azure terminology as a &lt;strong&gt;“Web Role”&lt;/strong&gt;.&amp;#160; The web role is specialized in “request – response” types of interactions. A user or a program submits a requests, the request is received, analyzed and processed, then a response is sent back. The goal is to process a lot of these concurrent requests and to keep the time between a request and a response as small as possible.&lt;/p&gt;  &lt;p&gt;The non-interactive building block is known in Windows Azure as “&lt;strong&gt;Worker Role&lt;/strong&gt;”, and it is the classic background processor.&amp;#160; &lt;/p&gt;  &lt;p&gt;There are 3 persistence building blocks. All of them store information, but have specialized functions:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;&lt;strong&gt;Table&lt;/strong&gt;: stores records with properties&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Blobs&lt;/strong&gt;: stores “things” with associated metadata&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Queue&lt;/strong&gt;: stores strings with FIFO semantics for retrieval&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;That’s it.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;So let’s explore what you could do with this.&lt;/p&gt;  &lt;p&gt;A relatively simple web site, like a simple blog engine would be this:&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/eugeniop/WindowsLiveWriter/WindowsAzure101PrimitivesandApplicationP_EAAC/image_8.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/eugeniop/WindowsLiveWriter/WindowsAzure101PrimitivesandApplicationP_EAAC/image_thumb_3.png" width="596" height="427" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;The front end web role is the app itself: pages, views, controllers, (whatever you use for the logic of the app). All operations (reads/writes) against the store where posts, comments and images would be stored are &lt;u&gt;synchronous&lt;/u&gt;.&lt;/p&gt;  &lt;p&gt;Adding one block will give you an RSS feed (e.g. using Syndication APIs in WCF):&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/eugeniop/WindowsLiveWriter/WindowsAzure101PrimitivesandApplicationP_EAAC/image_10.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/eugeniop/WindowsLiveWriter/WindowsAzure101PrimitivesandApplicationP_EAAC/image_thumb_4.png" width="611" height="456" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;And now you can independently manage (e.g. scale) your web viewers from those using an aggregator. &lt;/p&gt;  &lt;p&gt;Now let’s imagine you’d like to create a heat map similar to the one you see in my blog, showing where are your readers are located. One possible way of solving this calling a components in the RSS or Web nodes providing as input the IP address of the requestor. The component would then lookup somewhere the country or region associated with the IP address and add one to the counter of that specific country/region. This computation will take penalize the request/response for something that the reader is not necessarily interested in. Besides the lookup IP/country might depend on an external call to another service, with even further penalties. &lt;/p&gt;  &lt;p&gt;A better solution would be to offload these to another (background) process that con compute the information with minimal cost to the original request:&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/eugeniop/WindowsLiveWriter/WindowsAzure101PrimitivesandApplicationP_EAAC/image_12.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/eugeniop/WindowsLiveWriter/WindowsAzure101PrimitivesandApplicationP_EAAC/image_thumb_5.png" width="612" height="478" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Now the front end nodes will only pay the cost of writing to a queue. The lookup/conversion/heat map generation is done in the background by the worker. You can imagine dynamically creating new instances of the worker if the queue gets too long. Anything that can be postponed for a while, can be pushed to an asynchronous worker for processing (e.g. reporting, analysis, etc)&lt;/p&gt;  &lt;p&gt;These are just 6 elements in Microsoft’s larger &lt;em&gt;table of elements&lt;/em&gt; for cloud development (.NET Services, SQL Data Services, etc).&lt;/p&gt;  &lt;p&gt;These patterns are of course well known (and old :-)), but are proven. Windows Azure gives us a nice way of implementing them plus a way of managing them once they are deployed.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;   &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:ef17d6a7-b199-4430-8fac-612e760e47e1" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Azure" rel="tag"&gt;Azure&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9488478" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/eugeniop/archive/tags/Architecture/default.aspx">Architecture</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/SaaS/default.aspx">SaaS</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/S_2B00_S_5F00_Build/default.aspx">S+S_Build</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/S_2B00_S/default.aspx">S+S</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/Azure+Services+Platform/default.aspx">Azure Services Platform</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/Azure/default.aspx">Azure</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/Windows+Azure/default.aspx">Windows Azure</category></item><item><title>Azure IssueTracker Enterprise - Simple Demos</title><link>http://blogs.msdn.com/eugeniop/archive/2009/03/16/azure-issuetracker-enterprise-simple-demos.aspx</link><pubDate>Mon, 16 Mar 2009 23:09:35 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9481891</guid><dc:creator>eugeniop</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/eugeniop/comments/9481891.aspx</comments><wfw:commentRss>http://blogs.msdn.com/eugeniop/commentrss.aspx?PostID=9481891</wfw:commentRss><description>&lt;p&gt;&lt;strong&gt;&lt;font size="3"&gt;Provisioning IssueTracker Enterprise:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Highlights:&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;There’s no direct interaction with Access Control Service. IssueTracker uses ACS API to create the scopes, rules and the issuer (Contoso). &lt;/li&gt;    &lt;li&gt;The provisioning form captures all the required information to setup the trust relationship between Access Controls Service and the tenant (certificate, etc) &lt;/li&gt; &lt;/ul&gt; &lt;iframe style="width: 825px; height: 617px" src="http://silverlight.services.live.com/invoke/5721/Provisioning%20IT%20Enterprise/iframe.html" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font size="3"&gt;Tenant (Contoso_Enterprise) uses IssueTracker Enterprise from a Smart Client (Active Profile):&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Highlights:&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Tenant STS is configured:      &lt;ul&gt;       &lt;li&gt;Tenant name that must be the same as the name used in the provisioning form. &lt;/li&gt;        &lt;li&gt;Signing certificate thumbprint: this is used internally to retrieve the certificate form the store. Thumbprint can be obtained from the certificate properties. &lt;/li&gt;        &lt;li&gt;&lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ul&gt; &lt;iframe style="width: 825px; height: 617px" src="http://silverlight.services.live.com/invoke/5721/IT%20Using%20Service/iframe.html" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font size="3"&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font size="3"&gt;Tenant Manages IssueTracker Enterprise from PowerShell scripts:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Highlights:&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;PowerShell CmdLets are registered &lt;/li&gt;    &lt;li&gt;Management User disables the application (passing a parameter to define reason) &lt;/li&gt;    &lt;li&gt;Business User attempts to use the system, gets an error message (with the above reason) &lt;/li&gt;    &lt;li&gt;Management user enables application back &lt;/li&gt; &lt;/ul&gt; &lt;iframe style="width: 825px; height: 617px" src="http://silverlight.services.live.com/invoke/5721/IT%20Management/iframe.html" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font size="3"&gt;Tenant changes STS configuration issuing different Claims:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Highlights:&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Tenant changes one of the output claims to “Program Manager”. In the real implementation this could be a user moving from group in Active Directory to another &lt;/li&gt;    &lt;li&gt;System rejects access as the claim is not recognized as input to any rule in ACS &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;iframe style="width: 825px; height: 617px" src="http://silverlight.services.live.com/invoke/5721/Changing%20STS%20claims/iframe.html" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9481891" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/eugeniop/archive/tags/SaaS/default.aspx">SaaS</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/S_2B00_S_5F00_Build/default.aspx">S+S_Build</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/Federated+Identity/default.aspx">Federated Identity</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/Claims/default.aspx">Claims</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/S_2B00_S/default.aspx">S+S</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/Azure+Services+Platform/default.aspx">Azure Services Platform</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/Access+Control+Service/default.aspx">Access Control Service</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/.NET+Services/default.aspx">.NET Services</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/IssueTracker/default.aspx">IssueTracker</category></item><item><title>Architecting Cloud Application for the Enterprise – Part V – Management</title><link>http://blogs.msdn.com/eugeniop/archive/2009/03/12/architecting-cloud-application-for-the-enterprise-part-v-management.aspx</link><pubDate>Fri, 13 Mar 2009 01:41:26 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9472297</guid><dc:creator>eugeniop</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/eugeniop/comments/9472297.aspx</comments><wfw:commentRss>http://blogs.msdn.com/eugeniop/commentrss.aspx?PostID=9472297</wfw:commentRss><description>&lt;p&gt;Having solved the identity issue, the &lt;strong&gt;&lt;em&gt;SuperCloudySoftware&lt;/em&gt;&lt;/strong&gt; team focuses then on the management requirements raised in the meeting with &lt;strong&gt;&lt;em&gt;VeryBigCorp&lt;/em&gt;&lt;/strong&gt; CIO.&lt;/p&gt;  &lt;p&gt;To recap, they want to:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Be able to to monitor &lt;strong&gt;&lt;em&gt;IssueTracker&lt;/em&gt;&lt;/strong&gt; from their existing infrastructure, that happens to be System Center Operations Manager (SCOM) and eventually author new rules to correlate &lt;strong&gt;&lt;em&gt;IssueTracker&lt;/em&gt;&lt;/strong&gt; specific events with other events that are generated inside their boundaries. &lt;/li&gt;    &lt;li&gt;Be able to logically disable and enable &lt;strong&gt;&lt;em&gt;IssueTracker&lt;/em&gt;&lt;/strong&gt; for users from SCOM and &lt;/li&gt;    &lt;li&gt;Be able to change claim mappings for authorization purposes from within standard tools (e.g. they don’t want to use a new web portal but would be happy with an &lt;a href="http://en.wikipedia.org/wiki/Microsoft_Management_Console"&gt;MMC Snap-In&lt;/a&gt;) &lt;/li&gt;    &lt;li&gt;As with their other (business) users, they want seamless integration for their IT staff: no login, no pop-up, etc. If an authenticated user of their network is authorized to do monitoring, he /she should be able to do it without any additional checks. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;John and his team realize that the Web dashboard for monitoring is not enough for these requirements. It is still a good thing for their smaller Customers that don’t care too much about it anyway except when there are problems, but it will not work for &lt;strong&gt;&lt;em&gt;VeryBigCorp&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;The team realizes that they need to do a couple of things:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Instrument the application to gather information and to provide some level of control (e.g. enable/disable) &lt;/li&gt;    &lt;li&gt;Create an external API for management &lt;/li&gt;    &lt;li&gt;Create common clients for that API (e.g. PowerShell CmdLets, SCOM Management pack, etc) &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Of course securing the API is relatively easy now that they have a claims based architecture as described in the previous post and can federate with consumers. They can leverage the same rules for granting access to this API: for example, &lt;strong&gt;&lt;em&gt;VeryBigCorp&lt;/em&gt;&lt;/strong&gt; would just need to define what claims will be mapped to the “Enable Application” claim that &lt;strong&gt;&lt;em&gt;IssueTracker&lt;/em&gt;&lt;/strong&gt; will expect.&lt;/p&gt;  &lt;p&gt;The high level solution is illustrated below:&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="mgmt-it" border="0" alt="mgmt-it" src="http://blogs.msdn.com/blogfiles/eugeniop/WindowsLiveWriter/ArchitectingCloudApplicationfortheEnterp_7F6E/mgmt-it_1.png" width="646" height="519" /&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;To simplify things even further, &lt;strong&gt;&lt;em&gt;SuperCloudySoftware&lt;/em&gt;&lt;/strong&gt; pre-configures the client library and the clients. So, just after provisioning, a client library will be automatically generated for the Customer with all the necessary information: more specifically, the information to setup WS-TRUST between &lt;strong&gt;&lt;em&gt;IssueTracker&lt;/em&gt;&lt;/strong&gt;, Access Control Service and the company (STS address, certificate, etc):&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/eugeniop/WindowsLiveWriter/ArchitectingCloudApplicationfortheEnterp_7F6E/image_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/eugeniop/WindowsLiveWriter/ArchitectingCloudApplicationfortheEnterp_7F6E/image_thumb.png" width="664" height="516" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;VeryBigCorp&lt;/em&gt;&lt;/strong&gt; IT staff can then download the (pre-configured) tools from IssueTracker web site and they will “just work” as long as the logged in user provides the right credentials:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/eugeniop/WindowsLiveWriter/ArchitectingCloudApplicationfortheEnterp_7F6E/image_4.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/eugeniop/WindowsLiveWriter/ArchitectingCloudApplicationfortheEnterp_7F6E/image_thumb_1.png" width="676" height="370" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/eugeniop/WindowsLiveWriter/ArchitectingCloudApplicationfortheEnterp_7F6E/image_6.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/eugeniop/WindowsLiveWriter/ArchitectingCloudApplicationfortheEnterp_7F6E/image_thumb_2.png" width="680" height="441" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Notice there’s no need to specify who the tenant is, where the IssueTracker Management endpoint is, etc. All of that is built into the client library that the CmdLet uses.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;strong&gt;SuperCloudySoftware&lt;/strong&gt; &lt;/em&gt;strategy is to supply 3 experiences: MMC, PowerShell CmdLets and a SCOM Management Pack, but if there’s a customer with special needs (e.g. they are using &lt;a href="http://www-01.ibm.com/software/tivoli/"&gt;Tivoli&lt;/a&gt; or &lt;a href="http://en.wikipedia.org/wiki/OpenView"&gt;HP OpenView&lt;/a&gt;), they also provide an API (secured with WS-TRUST).&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Next article we will dive deeper into some implementation details of both the security and management aspects. As mentioned before, all of these is available in the download &lt;a href="http://azureissuetracker.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=24479"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9472297" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/eugeniop/archive/tags/SaaS/default.aspx">SaaS</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/S_2B00_S_5F00_Run/default.aspx">S+S_Run</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/Federated+Identity/default.aspx">Federated Identity</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/Claims/default.aspx">Claims</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/S_2B00_S/default.aspx">S+S</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/Azure+Services+Platform/default.aspx">Azure Services Platform</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/Access+Control+Service/default.aspx">Access Control Service</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/.NET+Services/default.aspx">.NET Services</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/IssueTracker/default.aspx">IssueTracker</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/SaaS+Management/default.aspx">SaaS Management</category></item><item><title>Architecting Cloud Applications for the Enterprise – Part IV - SuperCloudySoftware sketches IssueTracker Enterprise Edition</title><link>http://blogs.msdn.com/eugeniop/archive/2009/03/09/architecting-cloud-applications-for-the-enterprise-part-iv-supercloudysoftware-sketches-issuetracker-enterprise-edition.aspx</link><pubDate>Tue, 10 Mar 2009 06:15:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9468609</guid><dc:creator>eugeniop</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/eugeniop/comments/9468609.aspx</comments><wfw:commentRss>http://blogs.msdn.com/eugeniop/commentrss.aspx?PostID=9468609</wfw:commentRss><description>&lt;P&gt;In the &lt;A href="http://blogs.msdn.com/eugeniop/archive/2008/12/10/architecting-cloud-applications-for-the-enterprise-part-iii-supercloudysoftware-meets-verybigcorp-cio.aspx" mce_href="http://blogs.msdn.com/eugeniop/archive/2008/12/10/architecting-cloud-applications-for-the-enterprise-part-iii-supercloudysoftware-meets-verybigcorp-cio.aspx"&gt;previous article&lt;/A&gt;, we explored the challenges of building services for an enterprise, illustrating those through a dialogue between &lt;STRONG&gt;&lt;EM&gt;VeryBigCorp &lt;/EM&gt;&lt;/STRONG&gt;CIO and a team from &lt;EM&gt;&lt;STRONG&gt;SuperCloudySoftware&lt;/STRONG&gt;&lt;/EM&gt;. &lt;/P&gt;
&lt;P&gt;VBC requirements can be summarized as:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Identity integration (including Single Sign On and management of access policies) &lt;/LI&gt;
&lt;LI&gt;Management integration (ability to monitor and act on &lt;STRONG&gt;&lt;EM&gt;IssueTracker&lt;/EM&gt;&lt;/STRONG&gt; from within VBC’s management environment) &lt;/LI&gt;
&lt;LI&gt;Application integration (ability to call &lt;STRONG&gt;&lt;EM&gt;IssueTracker&lt;/EM&gt;&lt;/STRONG&gt; programmatically from other VBC’s applications) &lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;Let’s start with the beginning and explore the Authentication and Authorization aspects of IssueTracker.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;In its current release, &lt;STRONG&gt;&lt;EM&gt;IssueTracker’s&lt;/EM&gt;&lt;/STRONG&gt; approach for user AuthN and AuthZ is straightforward username + passwords, and a user profile associated with it. This works ok for very small organizations (or even bigger organizations with a few people using it) but breaks quickly for companies like &lt;STRONG&gt;&lt;EM&gt;VeryBigCorp&lt;/EM&gt;&lt;/STRONG&gt; for many reasons: &lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;People forget passwords and &lt;STRONG&gt;&lt;EM&gt;VeryBigCorp’s&lt;/EM&gt;&lt;/STRONG&gt; help desks would add a new task of resetting credentials. &lt;/LI&gt;
&lt;LI&gt;People need to be retrained into new procedures. (&lt;EM&gt;“For IssueTracker password reset, please press 23”&lt;/EM&gt;) &lt;/LI&gt;
&lt;LI&gt;People get fired from &lt;STRONG&gt;&lt;EM&gt;VeryBigCorp’s&lt;/EM&gt;&lt;/STRONG&gt; and can the log on to the system from their homes and “creatively edit” the company’s information. &lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;&lt;EM&gt;VeryBigCorp’s&lt;/EM&gt;&lt;/STRONG&gt; wants a seamless experience for their users (no pop-up, no login, nothing). It should just work. &lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;Besides, &lt;STRONG&gt;&lt;EM&gt;VeryBigCorp&lt;/EM&gt;&lt;/STRONG&gt; already has a user repository (maybe more than one?) and they already have problems provisioning new users on it (them) when they hire new employees, etc. Adding a new repository for just 1 app is not going to happen.&lt;/P&gt;
&lt;P&gt;The team @ &lt;STRONG&gt;&lt;EM&gt;SuperCloudySoftware&lt;/EM&gt;&lt;/STRONG&gt; considers one option:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Synchronizing VBC existing user repository with &lt;STRONG&gt;&lt;EM&gt;IssueTracker’s&lt;/EM&gt;&lt;/STRONG&gt;. This certainly can be done but is too ad-hoc, complex, cumbersome, error prone, non-standard. it wouldn’t work with other Customers and &lt;STRONG&gt;&lt;EM&gt;SuperCloudySoftware&lt;/EM&gt;&lt;/STRONG&gt; would much rather build one solution for all, and not treat each case as an exception.&amp;nbsp; &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;A better solution is to use claims and federated identity. This allows the service to rely on somebody else that it trusts to authenticate users (&lt;STRONG&gt;&lt;EM&gt;VeryBigCorp&lt;/EM&gt;&lt;/STRONG&gt;) and deal with an abstracted set of facts (claims) about the requestor that are used for authorization. &lt;/P&gt;
&lt;P&gt;Fortunately, the team went to Microsoft PDC last year and learnt about some technologies that would be very appropriate for these scenario: &lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyID=1E3C3EFC-E980-4895-9095-86E51C1CD9D8&amp;amp;displaylang=en" mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyID=1E3C3EFC-E980-4895-9095-86E51C1CD9D8&amp;amp;displaylang=en"&gt;Geneva Framework&lt;/A&gt; and &lt;A href="http://www.microsoft.com/azure/accesscontrol.mspx" mce_href="http://www.microsoft.com/azure/accesscontrol.mspx"&gt;.NET Services Access Control Service&lt;/A&gt; and do all the heavy lifting of setting up federation and dealing with claims:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/eugeniop/WindowsLiveWriter/ArchitectingCloudApplicationsfortheEnter_E81F/image_2.png" mce_href="http://blogs.msdn.com/blogfiles/eugeniop/WindowsLiveWriter/ArchitectingCloudApplicationsfortheEnter_E81F/image_2.png"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/eugeniop/WindowsLiveWriter/ArchitectingCloudApplicationsfortheEnter_E81F/image_thumb.png" width=582 height=397 mce_src="http://blogs.msdn.com/blogfiles/eugeniop/WindowsLiveWriter/ArchitectingCloudApplicationsfortheEnter_E81F/image_thumb.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;In this architecture the web site (&lt;STRONG&gt;&lt;EM&gt;IssueTracker&lt;/EM&gt;&lt;/STRONG&gt;) defines a set of claims that are required to access its resources, for example perform certain operation such as "Create a Project”, “Delete an Issue”, etc. Whoever brings those claims will be allowed to access the resource (e.g. complete the operation). If you don’t provide the claims, then you would get “access denied”. Claims can be obtained from a&amp;nbsp; trusted issuer (&lt;STRONG&gt;&lt;EM&gt;VeryBigCorp’s&lt;/EM&gt;&lt;/STRONG&gt; identity provider such as Active Directory).&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;&lt;STRONG&gt;Simple analogy:&lt;/STRONG&gt; This is like going to a bar and providing the bartender with a valid ID that will attest to your age. The resource is the beer, the claim is your age, the issuer is the government department that gave you the ID, the rule is “beer is fine if you are &amp;gt; 21 years old” (in the US)&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;Now, each company will attest to different facts about its users (like their name, which organization they work for, who is their manager, where they are located, etc.). These facts are irrelevant for &lt;EM&gt;&lt;STRONG&gt;IssueTracker&lt;/STRONG&gt;&lt;/EM&gt;, so some sort of mapping the original claims to those understood by &lt;STRONG&gt;&lt;EM&gt;IssueTracker&lt;/EM&gt;&lt;/STRONG&gt; needs to happen.&lt;/P&gt;
&lt;P&gt;The translator allows &lt;STRONG&gt;&lt;EM&gt;VeryBigCorp&lt;/EM&gt;&lt;/STRONG&gt; to define rules of access. For example, they might say:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;“Any employee who is a Program Manager will be able to Create New Projects in IssueTracker” &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;This implies taking the “being a member of the Program Manager group” claim and transform it into a “Create New Project” claim. Other organizations might have completely different rules and &lt;STRONG&gt;&lt;EM&gt;IssueTracker&lt;/EM&gt;&lt;/STRONG&gt; wouldn’t care as long as what it receives is something it understands.&lt;/P&gt;
&lt;P&gt;That’s what Access Control Service is used for: convert claims from different issuers into others.&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;&lt;STRONG&gt;Following the bar analogy:&lt;/STRONG&gt; the resource is the beer, the claim is your age, but instead of the bartender having to verify all sorts of different issuers of claims (passports, driving licenses, birth certificates, identity cards, etc), you simply put a guy in the door that verifies that and then gives you a colored bracelet. The rule for the bartender becomes: “anyone with a colored bracelet can have beer”. How you obtain it is someone else’s responsibility (hint: bribe the guy in the door :-) ).&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;This solution is actually very scalable and has a nice bonus: Access Control Service is already federated with a very popular identity provider like &lt;A href="http://dev.live.com/liveid/" mce_href="http://dev.live.com/liveid/"&gt;LiveID&lt;/A&gt;. So, by implementing this, &lt;STRONG&gt;&lt;EM&gt;SuperCloudySoftware&lt;/EM&gt;&lt;/STRONG&gt; has a LiveID enabled website for its smaller Customers for “free”.&lt;/P&gt;
&lt;P&gt;The other nice thing is that this works with both Web Sites and Web Services (the so called “passive” and “active” profiles). So If &lt;STRONG&gt;&lt;EM&gt;IssueTracker&lt;/EM&gt;&lt;/STRONG&gt; exposes an API instead of a human readable web page, the same principles (and almost the same implementation) applies.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;U&gt;Note:&lt;/U&gt;&lt;/STRONG&gt; &lt;EM&gt;&lt;STRONG&gt;IssueTracker&lt;/STRONG&gt; &lt;/EM&gt;has an API because of requirement #2 of &lt;STRONG&gt;&lt;EM&gt;veryBigCorp&lt;/EM&gt;&lt;/STRONG&gt; –&amp;gt; being able to integrate with other systems.&lt;/P&gt;
&lt;P&gt;This is exactly what &lt;STRONG&gt;&lt;EM&gt;SuperCloudySoftware&lt;/EM&gt;&lt;/STRONG&gt; implemented and if you are curious about the details, then download the code and check for yourself!&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="http://azureissuetracker.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=22138" mce_href="http://azureissuetracker.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=22138"&gt;IssueTracker Standard Edition&lt;/A&gt; (with federation with LiveID) &lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://azureissuetracker.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=24479" mce_href="http://azureissuetracker.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=24479"&gt;IssueTracker Enterprise Edition&lt;/A&gt; (with federation with a custom identity provider) &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;I’ll expand on the implementation details in the next articles.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;U&gt;P.S.:&lt;/U&gt;&lt;/STRONG&gt; if you want to learn more about claims, federation and identity “theory” in general&amp;nbsp; (including the alcoholic analogy :-)) then you should bookmark and read from &lt;EM&gt;il Maestro&lt;/EM&gt; &lt;A href="http://blogs.msdn.com/vbertocci/" mce_href="http://blogs.msdn.com/vbertocci/"&gt;Vittorio Bertocci&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;Updates: fixed a few typos.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9468609" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/eugeniop/archive/tags/Architecture/default.aspx">Architecture</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/SaaS/default.aspx">SaaS</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/S_2B00_S_5F00_Build/default.aspx">S+S_Build</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/Federated+Identity/default.aspx">Federated Identity</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/Claims/default.aspx">Claims</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/S_2B00_S/default.aspx">S+S</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/Azure+Services+Platform/default.aspx">Azure Services Platform</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/Access+Control+Service/default.aspx">Access Control Service</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/.NET+Services/default.aspx">.NET Services</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/IssueTracker/default.aspx">IssueTracker</category></item><item><title>The need for “standards for application logic” in PaaS. Really?</title><link>http://blogs.msdn.com/eugeniop/archive/2009/02/24/the-need-for-standards-for-application-logic-in-paas-really.aspx</link><pubDate>Wed, 25 Feb 2009 03:37:41 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9443383</guid><dc:creator>eugeniop</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/eugeniop/comments/9443383.aspx</comments><wfw:commentRss>http://blogs.msdn.com/eugeniop/commentrss.aspx?PostID=9443383</wfw:commentRss><description>&lt;p&gt;In his &lt;a href="http://blogs.zdnet.com/SAAS/?p=668"&gt;latest post&lt;/a&gt; on Coghead’s demise, &lt;a href="http://blogs.zdnet.com/SAAS"&gt;Phil&lt;/a&gt; argues that:&lt;/p&gt;  &lt;p&gt;“&lt;em&gt;What this highlights is the lack of any standard for transferring not just data but application logic between such platforms.”&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;My argument is that those standards already exist and are widely adopted:&lt;/p&gt;  &lt;p&gt;&lt;em&gt;“Standards for capturing application logic already exist: Java &amp;amp; .NET (and COBOL). Coghead &amp;quot;mistake&amp;quot; was to try to develop their own development platform from scratch, instead of leveraging what already existed and provide value on top of that.”&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Phil replied that:&lt;/p&gt;  &lt;p&gt;&lt;/p&gt; &lt;dt&gt;&lt;em&gt;“Doesn't solve the problem &lt;/em&gt;    &lt;p&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;But you still can't *transfer* logic from one development platform to another, say from COBOL to Java, or from Java to .NET, without completely rewriting it. What I'm advocating would be helpful to people developing on established platforms too. My point is that it's essential in a PaaS context.”&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;My response was getting too long, so I decided to post here instead.&lt;/p&gt; &lt;/dt&gt;&lt;dt&gt;   &lt;p&gt;Sure, having an abstract model for your app logic and then deciding implementation details would be great. I buy the &lt;em&gt;attractiveness&lt;/em&gt; of such an approach and I understand why people would like this. (I’m sure it will sound familiar to my friends @ &lt;a href="http://www.genexus.com/portal/hgxpp001.aspx?2"&gt;ArTech&lt;/a&gt;), but there’re problems too (e.g. “minimum common denominator” syndrome, lack of finer grained control, not being able to take advantage of the latest features in a given implementation, etc).&lt;/p&gt;    &lt;p&gt;However, I certainly &lt;u&gt;don’t &lt;/u&gt;think it is *&lt;b&gt;essential*&lt;/b&gt; for PaaS. Nice, desirable, yes. Essential, I don’t think so.&lt;/p&gt;    &lt;p&gt;Phil says that &lt;em&gt;“With PaaS, the lack of such mechanisms could become a huge barrier to adoption as customers become fearful of which platform might be next to switch off the lights.”&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;True to some extent, but there are ways of mitigating this *&lt;b&gt;today&lt;/b&gt;* without waiting for the &lt;em&gt;uber-cross-platform-cross-cloud-ocean-boiling &lt;/em&gt;model.&lt;/p&gt;    &lt;p&gt;Coghead could have chosen to offer app hosting for .NET and/or Java based apps (or PHP or COBOL for that matter), and attract 10,000’s of ISVs that have already bet on those platforms. Instead, they created a &lt;strong&gt;*new*&lt;/strong&gt; platform from scratch. They not only required everybody to learn their new abstractions, their new language, their new tools, etc. Those by themselves are strong adoption barriers, not impossible to overcome, but quite tough.&lt;/p&gt; &lt;/dt&gt;&lt;dt&gt;   &lt;p&gt;But they also asked everybody to bet their operational business on them (the “aaS in “PaaS”), because nobody had access to their runtime except them. The lethality to the business viability is in the combination of these two factors. Platforms are catalysts, and as a consequence, they usually don’t do anything useful by themselves. They need to be bootstrapped.&amp;#160;&amp;#160; &lt;/p&gt; &lt;/dt&gt;&lt;dt&gt;   &lt;p&gt;So, if Coghead had chosen say .NET (I’m biased of course :-)) as their underlying programming model, barriers of entry would have been much lower for many reasons. Among them:&lt;/p&gt; &lt;/dt&gt;&lt;dt&gt;   &lt;ul&gt;     &lt;li&gt;ISV would have had less cost in creating a “Coghead” solution (they would have reused all their existing skills, tools, knowledge, etc).&lt;/li&gt;      &lt;li&gt;The cost of re-targeting their app would have been lower in the case the hoster goes out of business. Some work would have been required anyway, but not as high as with the current model. &lt;/li&gt;   &lt;/ul&gt;    &lt;p&gt;In this hypothetical scenario, instead of parsing the XML files, they would have a bunch of .NET (C# or VB.NET) assemblies.&lt;/p&gt;    &lt;p&gt;Some PaaS offerings, such as &lt;a href="http://apprenda.com/"&gt;Apprenda&lt;/a&gt;, have taken this path. In my opinion a much healthier and pragmatic path. &lt;/p&gt; &lt;/dt&gt;&lt;dt&gt;   &lt;p&gt;The other obvious way of addressing these risks is with a “reverse escrow” from PaaS providers to their ISVs: giving out the runtime to the ISVs if they go out of business. Worse case, ISVs would buy time to port the application into another runtime. (like .NET).&lt;/p&gt; &lt;/dt&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9443383" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/eugeniop/archive/tags/SaaS/default.aspx">SaaS</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/S_2B00_S_5F00_Run/default.aspx">S+S_Run</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/S_2B00_S_5F00_Build/default.aspx">S+S_Build</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/PaaS/default.aspx">PaaS</category></item><item><title>Architecting Cloud Applications for the Enterprise - Part III - SuperCloudySoftware meets VeryBigCorp CIO</title><link>http://blogs.msdn.com/eugeniop/archive/2008/12/10/architecting-cloud-applications-for-the-enterprise-part-iii-supercloudysoftware-meets-verybigcorp-cio.aspx</link><pubDate>Wed, 10 Dec 2008 20:50:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9191795</guid><dc:creator>eugeniop</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/eugeniop/comments/9191795.aspx</comments><wfw:commentRss>http://blogs.msdn.com/eugeniop/commentrss.aspx?PostID=9191795</wfw:commentRss><description>&lt;P&gt;&lt;STRONG&gt;Actors&lt;/STRONG&gt;: the CIO at &lt;STRONG&gt;&lt;EM&gt;VeryBigCorp&lt;/EM&gt;&lt;/STRONG&gt;, John (&lt;STRONG&gt;&lt;EM&gt;SuperCloudySoftware's&lt;/EM&gt;&lt;/STRONG&gt; CEO) and a bunch of senior developers and architects. &lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/eugeniop/WindowsLiveWriter/ArchitectingCloudApplicationsfortheEnter_7BA8/image_2.png" mce_href="http://blogs.msdn.com/blogfiles/eugeniop/WindowsLiveWriter/ArchitectingCloudApplicationsfortheEnter_7BA8/image_2.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" border=0 alt=image src="http://blogs.msdn.com/blogfiles/eugeniop/WindowsLiveWriter/ArchitectingCloudApplicationsfortheEnter_7BA8/image_thumb.png" width=390 height=248 mce_src="http://blogs.msdn.com/blogfiles/eugeniop/WindowsLiveWriter/ArchitectingCloudApplicationsfortheEnter_7BA8/image_thumb.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;CIO&lt;/STRONG&gt;: Gentlemen, welcome. Let me start by saying that our internal Customer is absolutely fascinated with your application. Believe me, they are hard to please and I've never seen them so excited. Congratulations!&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;John&lt;/STRONG&gt; (CEO): thank you! We are really committed to our customer satisfaction&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;CIO&lt;/STRONG&gt;: great to hear that. Now... the reason I wanted to meet with you is because we want to use the system for the entire division...&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;John (thinking):&lt;/STRONG&gt; yes! yes! yes! 10,000 seats...&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;CIO:&lt;/STRONG&gt; ...that would be 10,000 users approximately.&amp;nbsp; The thing is that the current authentication approach you guys have today, username and password, doesn't really work for us. I don't want yet another password to maintain, troubleshoot, etc. We have enough identities already as a result of our latest set of mergers and acquisitions...&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;John (Glancing at the other tech folks, nodding and still thinking about 10K seats):&lt;/STRONG&gt; Sounds completely reasonable to me...&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;CIO: &lt;/STRONG&gt;Besides the maintenance hassles of dealing with people forgetting passwords, provisioning new employees, etc. there is a serious liability in having you guys managing authentication this way. If any of these employees is fired, nothing prevents him to logon from his home and creatively edit the data in the system. That's too risky for us. So we want Single Sign On between our own identity infrastructure and yours...&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;John (carefully but confidently):&lt;/STRONG&gt; right, makes total sense...&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;CIO: &lt;/STRONG&gt;Great. The second thing I want to discuss with you is integration. Event though &lt;STRONG&gt;&lt;EM&gt;IssueTracker&lt;/EM&gt;&lt;/STRONG&gt; would actually replace a few systems that we host ourselves, there are still other applications that need to pull and push information to &lt;STRONG&gt;&lt;EM&gt;IssueTracker&lt;/EM&gt;&lt;/STRONG&gt;. In particular, our ISO9000 support system absolutely needs to be fully integrated in real time with &lt;STRONG&gt;&lt;EM&gt;IssueTracker&lt;/EM&gt;&lt;/STRONG&gt;. We cannot have people duplicating entries on these two different systems. &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;John (cautiously)&lt;/STRONG&gt;: mhm &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;CIO:&lt;/STRONG&gt; By the way, the ISO9000 system runs on our AS400 minicomputer...&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;John (thinking):&lt;/STRONG&gt; A...S...what?&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;John (suddenly excited):&lt;/STRONG&gt; well, there are export/import features in &lt;STRONG&gt;&lt;EM&gt;IssueTracker&lt;/EM&gt;&lt;/STRONG&gt;. Currently you could download or upload an Excel spreadsheet, and ....&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;CIO (interrupting John)&lt;/STRONG&gt;: sure, that might help, but what we need is that every time someone creates a new Issue in &lt;STRONG&gt;&lt;EM&gt;IssueTracker&lt;/EM&gt;&lt;/STRONG&gt;, the same information is replicated in the AS400 almost real-time...makes sense? Some delay is admissible, but it must be as online as possible. Couple of minutes at most...&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;John (worried):&lt;/STRONG&gt; mhm&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;CIO:&lt;/STRONG&gt; great we understand each other! You guys are really easy to work with! &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;John:&lt;/STRONG&gt; Sure. We are really committed to our customers satisfaction. I'd like to meet with my team and take a look at this requirements. I'm sure we can develop a proposal for you in the next week or so...&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;CIO (interrupting again):&lt;/STRONG&gt; ...wait, there's one more thing...&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;John:&lt;/STRONG&gt; oh! sorry... (thinking: what else could they possibly want...)&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;CIO:&lt;/STRONG&gt; &lt;STRONG&gt;&lt;EM&gt;IssueTracker&lt;/EM&gt;&lt;/STRONG&gt; will become a critical system for us. If something goes wrong, and believe me, it will; we need to know. We need our help desk to be fully integrated with yours. Our users are trained to call help desks for problems with any homologue system they interact with. So when a trouble ticket is generated here, we need that to be escalated to you. &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;The Architect (who had remained silent until then)&lt;/STRONG&gt;: hey, you could use &lt;STRONG&gt;&lt;EM&gt;IssueTracker&lt;/EM&gt;&lt;/STRONG&gt; to track issues with &lt;STRONG&gt;&lt;EM&gt;IssueTracker&lt;/EM&gt;&lt;/STRONG&gt;! To &lt;A href="http://users.rcn.com/jcoplien/Patterns/C++Report/SpaceIII-1.html" mce_href="http://users.rcn.com/jcoplien/Patterns/C++Report/SpaceIII-1.html"&gt;iterate is human, to recurse is divine&lt;/A&gt;...&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;John (piercing the architect with his eyes): &lt;/STRONG&gt;thanks for the "suggestion", now could you please expand on your needs?&lt;STRONG&gt;&amp;nbsp;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;CIO: &lt;/STRONG&gt;yeah...anyway, we recently invested on a new set management tools (we just deployed Microsoft System Center Operations manager), so ideally, we would like all administrative tasks to be launched from there...ok? I want to be able to track response time, correlate potential problems with other conditions...&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;John (Recovering): &lt;/STRONG&gt;ok... We need to look at this. Frankly, we don't have those things in place today, but we are &lt;EM&gt;very&lt;/EM&gt; interested in making this work for you. &lt;/P&gt;
&lt;P&gt;I'm very comfortable with the technical capabilities of my team so I'm sure we will find a solution. &lt;/P&gt;
&lt;P&gt;I'll come back to you next week with a proposal. ok?&lt;/P&gt;
&lt;P&gt;John and his team leaves &lt;STRONG&gt;&lt;EM&gt;VeryBigCorp&lt;/EM&gt;&lt;/STRONG&gt; offices. John is really wondering if this thing of expanding into the enterprise segment is really worth it. Why not just continue to sell to the SMB segment as they've been doing so far? Anyway, John wants to explore the options and make a decision on more than initial gut feeling. &lt;/P&gt;
&lt;P&gt;At the same time, his instincts tell him that VBC requirements are not really unique. If they solve them for VBC, they would solve them for all companies with that profile and position SCS competitively.&lt;/P&gt;
&lt;P&gt;Next chapter: &lt;STRONG&gt;&lt;EM&gt;SuperCloudySoftware&lt;/EM&gt;&lt;/STRONG&gt; whiteboards options to address &lt;STRONG&gt;&lt;EM&gt;VeryBigCorp&lt;/EM&gt;&lt;/STRONG&gt; challenges.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9191795" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/eugeniop/archive/tags/SaaS/default.aspx">SaaS</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/S_2B00_S_5F00_Build/default.aspx">S+S_Build</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/Federated+Identity/default.aspx">Federated Identity</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/S_2B00_S/default.aspx">S+S</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/IssueTracker/default.aspx">IssueTracker</category></item><item><title>Architecting Cloud Applications for the Enterprise - Part II - VeryBigCorp buys IssueTracker</title><link>http://blogs.msdn.com/eugeniop/archive/2008/12/07/architecting-cloud-applications-for-the-enterprise-part-ii-verybigcorp-buys-issuetracker.aspx</link><pubDate>Mon, 08 Dec 2008 08:02:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9183539</guid><dc:creator>eugeniop</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/eugeniop/comments/9183539.aspx</comments><wfw:commentRss>http://blogs.msdn.com/eugeniop/commentrss.aspx?PostID=9183539</wfw:commentRss><description>&lt;P&gt;Now that we have introduced our characters, we will start this story describing the acquisition process of &lt;STRONG&gt;&lt;EM&gt;IssueTracker&lt;/EM&gt;&lt;/STRONG&gt; in &lt;STRONG&gt;&lt;EM&gt;VeryBigCorp&lt;/EM&gt;&lt;/STRONG&gt;.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;EM&gt;IssueTracker&lt;/EM&gt;&lt;/STRONG&gt; was first used in VBC by a very limited number of people. Someone in some business unit somehow learnt about it and thought it would be a good tool to automate their work.&lt;/P&gt;
&lt;P&gt;A senior manager in that business unit approved the expense, a subscription was bought and &lt;STRONG&gt;&lt;EM&gt;IssueTracker&lt;/EM&gt;&lt;/STRONG&gt; became a new software asset in VBC. IT was not involved in this process and the acquisition happened in the "black market" of IT.&lt;/P&gt;
&lt;P&gt;And thus, &lt;STRONG&gt;&lt;EM&gt;IssueTracker&lt;/EM&gt;&lt;/STRONG&gt; became an "illegal immigrant" in VBC IT department: not everybody knows it is there, some people think it is great, other would like to get rid of it, most regulators (in IT) would simply ignore it, as long as it doesn't cause any trouble.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;This limbo status could last for a long time. Ironically, &lt;STRONG&gt;&lt;EM&gt;IssueTracker&lt;/EM&gt;&lt;/STRONG&gt; is&lt;EM&gt; so &lt;/EM&gt;useful that it gains notoriety. It becomes clear to the business unit managers that it this little service is actually the perfect solution for their needs. Moreover, users &lt;EM&gt;love&lt;/EM&gt; it. It's simple to use, it's intuitive and it does its job efficiently. Users productivity soars. &lt;STRONG&gt;&lt;EM&gt;IssueTracker&lt;/EM&gt;&lt;/STRONG&gt; is the little service that could.&lt;/P&gt;
&lt;P&gt;All this goodness eventually reaches the business unit senior manager and he decides it is something that must be used by everybody. Just imagine all the productivity gains for the entire division! Increasing the efficiency of 10,000 employees under his leadership will have a tremendous impact in his bottom line.&lt;/P&gt;
&lt;P&gt;So the senior manager calls the CIO and &lt;STRONG&gt;&lt;EM&gt;IssueTracker&lt;/EM&gt;&lt;/STRONG&gt; existence is made transparent. Not only the CIO learns about this "illegal immigrant", he now has to legalize it :-).&lt;/P&gt;
&lt;P&gt;The CIO calls &lt;EM&gt;&lt;STRONG&gt;SuperCloudySoftware&lt;/STRONG&gt;&lt;/EM&gt; sales department and requests a meeting with their technical folks to "sort out a few issues" of turning &lt;EM&gt;&lt;STRONG&gt;IssueTracker&lt;/STRONG&gt;&lt;/EM&gt; into a qualified citizen of VBC IT.&lt;/P&gt;
&lt;P&gt;On the other side of the line, &lt;STRONG&gt;&lt;EM&gt;SuperCloudySoftware&lt;/EM&gt;&lt;/STRONG&gt; just can't believe what has just happened. &lt;STRONG&gt;&lt;EM&gt;VeryBigCorp&lt;/EM&gt;&lt;/STRONG&gt; wants to buy 10,000 seats of &lt;STRONG&gt;&lt;EM&gt;Issuetracker&lt;/EM&gt;&lt;/STRONG&gt;.&amp;nbsp; 10,000 seats!&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/eugeniop/WindowsLiveWriter/ArchitectingCloudApplicationsfortheEnter_295A/image_2.png" mce_href="http://blogs.msdn.com/blogfiles/eugeniop/WindowsLiveWriter/ArchitectingCloudApplicationsfortheEnter_295A/image_2.png"&gt;&lt;IMG border=0 alt=image src="http://blogs.msdn.com/blogfiles/eugeniop/WindowsLiveWriter/ArchitectingCloudApplicationsfortheEnter_295A/image_thumb.png" width=160 height=240 mce_src="http://blogs.msdn.com/blogfiles/eugeniop/WindowsLiveWriter/ArchitectingCloudApplicationsfortheEnter_295A/image_thumb.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;The best technical guys in &lt;STRONG&gt;&lt;EM&gt;SuperCloudySoftware&lt;/EM&gt;&lt;/STRONG&gt; are sent to the meeting then. Their mission: do whatever it takes to win this Customer! Failure is not an option. &lt;/P&gt;
&lt;P&gt;Next chapter of this story is the meeting between the CIO and &lt;STRONG&gt;&lt;EM&gt;SuperCloudySoftware&lt;/EM&gt;&lt;/STRONG&gt;. &lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9183539" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/eugeniop/archive/tags/Architecture/default.aspx">Architecture</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/SaaS/default.aspx">SaaS</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/S_2B00_S_5F00_Build/default.aspx">S+S_Build</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/S_2B00_S/default.aspx">S+S</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/IssueTracker/default.aspx">IssueTracker</category></item><item><title>Architecting Cloud Applications for the Enterprise - Part I - Introducing the Actors</title><link>http://blogs.msdn.com/eugeniop/archive/2008/12/05/architecting-cloud-applications-for-the-enterprise-part-i-introducing-the-actors.aspx</link><pubDate>Fri, 05 Dec 2008 22:14:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9180512</guid><dc:creator>eugeniop</dc:creator><slash:comments>7</slash:comments><comments>http://blogs.msdn.com/eugeniop/comments/9180512.aspx</comments><wfw:commentRss>http://blogs.msdn.com/eugeniop/commentrss.aspx?PostID=9180512</wfw:commentRss><description>&lt;P&gt;I will start this series by introducing the main characters of our scenario.&lt;/P&gt;
&lt;P&gt;First, we have &lt;EM&gt;&lt;STRONG&gt;VeryBigCorp&lt;/STRONG&gt;&lt;/EM&gt;. VBC is a large corporation, with multiple branches and subsidiaries, thousands of employees, etc. VBC is the typical organization with a rather complex business environment: multiple business units, complex rules, regulations, etc.&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/eugeniop/WindowsLiveWriter/ArchitectingCloudApplicationsfortheEnter_2505/image_2.png" mce_href="http://blogs.msdn.com/blogfiles/eugeniop/WindowsLiveWriter/ArchitectingCloudApplicationsfortheEnter_2505/image_2.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" border=0 alt=image src="http://blogs.msdn.com/blogfiles/eugeniop/WindowsLiveWriter/ArchitectingCloudApplicationsfortheEnter_2505/image_thumb.png" width=339 height=259 mce_src="http://blogs.msdn.com/blogfiles/eugeniop/WindowsLiveWriter/ArchitectingCloudApplicationsfortheEnter_2505/image_thumb.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;VBC IT department is a reflection of this complexity: they have lots of legacy components, multiple networking stacks and a rich myriad of technologies coexist in its data centers. VBC develops custom applications for some of their business units, but they also buy packages from specialized vendors.&lt;/P&gt;
&lt;P&gt;VBC IT has multiple processes in place to deal with all these challenges: there are architecture and development guidelines that everyone is supposed to follow, there are software development lifecycle processes, standards, naming conventions, etc. All these are there for good reasons, but sometimes creates a perception of lack of agility and excessive bureaucracy. &lt;/P&gt;
&lt;P&gt;Most technology acquisitions in VBC are handled by the IT department following strict steps.&lt;/P&gt;
&lt;P&gt;The second character in our story is &lt;STRONG&gt;&lt;EM&gt;SuperCloudySoftware&lt;/EM&gt;&lt;/STRONG&gt;, a service provider (a "&lt;EM&gt;cloud ISV"&lt;/EM&gt; if you want)&lt;/P&gt;
&lt;P&gt;SCS has embraced the web since its foundation. SCS innovates very quickly, pushes updates on its service regularly based on customer feedback, focuses on user experience, etc. They are the ultimate "agilists". &lt;/P&gt;
&lt;P&gt;SCS focused initially on smaller businesses, even some consumers. Their flagship service is &lt;EM&gt;&lt;STRONG&gt;IssueTracker&lt;/STRONG&gt;&lt;/EM&gt; a task tracking service.&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;&lt;STRONG&gt;IssueTracker&lt;/STRONG&gt;&lt;/EM&gt; is only available as a service. That means that you can't buy a license of it and deploy it in your own data center.&lt;/P&gt;
&lt;P&gt;From the beginning SCS made the strategic decision of making &lt;STRONG&gt;&lt;EM&gt;IssueTracker&lt;/EM&gt;&lt;/STRONG&gt; available through "multiple heads":&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;There is a &lt;STRONG&gt;Web Client&lt;/STRONG&gt; that only requires a browser &lt;/LI&gt;
&lt;LI&gt;There's a &lt;STRONG&gt;Smart Client&lt;/STRONG&gt; that provides a richer UX and enhanced connectivity options (e.g. working offline) and &lt;/LI&gt;
&lt;LI&gt;There's also a &lt;STRONG&gt;Web Services API&lt;/STRONG&gt; for all functions, that allows anybody to create their own clients or want to integrate with other client environments such as Microsoft Office. &lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;&lt;EM&gt;&lt;STRONG&gt;IssueTracker&lt;/STRONG&gt;&lt;/EM&gt; itself relies on &lt;EM&gt;cloud building blocks.&lt;/EM&gt; For example, the persistence of the application is based on &lt;A href="http://www.microsoft.com/azure/data.mspx" mce_href="http://www.microsoft.com/azure/data.mspx"&gt;SQL Data Services&lt;/A&gt;. This of course is completely opaque to their customers.&lt;/P&gt;
&lt;P&gt;Next chapter will cover &lt;STRONG&gt;&lt;EM&gt;IssueTracker&lt;/EM&gt;&lt;/STRONG&gt; acquisition process in &lt;STRONG&gt;&lt;EM&gt;VeryBigCorp&lt;/EM&gt;&lt;/STRONG&gt;. &lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9180512" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/eugeniop/archive/tags/Architecture/default.aspx">Architecture</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/Web+Client/default.aspx">Web Client</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/SaaS/default.aspx">SaaS</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/S_2B00_S_5F00_Build/default.aspx">S+S_Build</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/SSDS/default.aspx">SSDS</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/S_2B00_S/default.aspx">S+S</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/IssueTracker/default.aspx">IssueTracker</category></item><item><title>Architecting Cloud Services for the Big Enterprise</title><link>http://blogs.msdn.com/eugeniop/archive/2008/12/04/architecting-cloud-services-for-the-big-enterprise.aspx</link><pubDate>Thu, 04 Dec 2008 15:08:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9174919</guid><dc:creator>eugeniop</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/eugeniop/comments/9174919.aspx</comments><wfw:commentRss>http://blogs.msdn.com/eugeniop/commentrss.aspx?PostID=9174919</wfw:commentRss><description>&lt;P&gt;For the last couple of months, we’ve been working on scenarios that involve consuming cloud services and applications from &lt;EM&gt;"Big Enterprise"&lt;/EM&gt;. The focus being the &lt;U&gt;technical&lt;/U&gt; obstacles for adopting cloud services.&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;Big Enterprise&lt;/EM&gt; is the moniker we use to describe an organization with rather heavy investments on on-premises software.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Not surprisingly then, the aspects we have explored are integration in these three areas: &lt;B&gt;&lt;I&gt;security&lt;/I&gt;&lt;/B&gt;, &lt;B&gt;&lt;I&gt;management&lt;/I&gt;&lt;/B&gt; and &lt;B&gt;&lt;I&gt;application&lt;/I&gt;&lt;/B&gt; integration.&lt;/P&gt;
&lt;P&gt;No important application in &lt;EM&gt;Big Enterprise&lt;/EM&gt; lives in isolation so integration of cloud service on these three levels is key.&lt;/P&gt;
&lt;P&gt;The good news is that there's new exciting tools, frameworks and services ISV can leverage today to address these requirements.&lt;/P&gt;
&lt;P&gt;My session at PDC was the first time we presented this work. In general there’s agreement that these are recurring, common and important challenges; which is good validation. &lt;/P&gt;
&lt;P&gt;Unfortunately not all demos @ PDC worked as I had expected (and endlessly practiced before), for various reasons. In retrospective, I’m glad we went through that pain, because there were lots of lessons learnt. Failure is a great teacher.&lt;/P&gt;
&lt;P&gt;Since PDC, we’ve been working on improving the reference implementations our demos were based on, by incorporating all this experience: obscure pitfalls, wrong assumptions, unexpected limitations, lack of complete symmetry between production and pre-production, pure randomness, etc.&lt;/P&gt;
&lt;P&gt;I'm certain many of you our there in the real world will face many of these same challenges, so I hope our pain will help you be more successful with the Azure Platform. &lt;/P&gt;
&lt;P&gt;Since PDC, we presented the same (updated) content on various events: Teched EMEA, TechDays in Milano a few days ago and RAF in Madrid. In general we've got great feedback and good validation of our assumptions.&lt;/P&gt;
&lt;P&gt;My plan is to drill down on each of these aspects in the next (several) couple of blog posts, so stay tuned!&lt;/P&gt;
&lt;P&gt;Last but not least, most of the sample code demonstrated will be available for you to download and explore in the upcoming weeks.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9174919" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/eugeniop/archive/tags/Architecture/default.aspx">Architecture</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/SaaS/default.aspx">SaaS</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/S_2B00_S_5F00_Run/default.aspx">S+S_Run</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/S_2B00_S_5F00_Build/default.aspx">S+S_Build</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/Claims/default.aspx">Claims</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/S_2B00_S/default.aspx">S+S</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/IssueTracker/default.aspx">IssueTracker</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/Federated+Ientity/default.aspx">Federated Ientity</category></item><item><title>Northwind Hosting exists, it's better than what you saw and it's called SaaSGrid</title><link>http://blogs.msdn.com/eugeniop/archive/2008/09/11/northwind-hosting-exists-it-s-better-than-what-you-saw-and-it-s-called-saasgrid.aspx</link><pubDate>Fri, 12 Sep 2008 06:32:09 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8945832</guid><dc:creator>eugeniop</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/eugeniop/comments/8945832.aspx</comments><wfw:commentRss>http://blogs.msdn.com/eugeniop/commentrss.aspx?PostID=8945832</wfw:commentRss><description>&lt;p&gt;&lt;a href="http://www.saasblogs.com/author/sinclair/"&gt;Sinclair Schuller&lt;/a&gt;, CEO of &lt;a href="http://www.apprenda.com"&gt;Apprenda&lt;/a&gt; was kind enough to demo &lt;a href="http://www.apprenda.com/saasgrid"&gt;SaaSGrid&lt;/a&gt; to me earlier this week, patient enough to answer all my questions and I have to say, that I'm really impressed. &lt;/p&gt;  &lt;p&gt;What is SaaSGrid? In their own words:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;If you're building an on-demand business application, using SaaSGrid as your foundation will help you build quickly and inexpensively, ensuring that your customers can access your application's value sooner rather than later. Furthermore, you&amp;#8217;ll then be able to deploy your SaaSGrid application to SaaSGrid itself, which provides a safe and robust virtual application container and hosting environment for your delivery needs. SaaSGrid's comprehensiveness ensures that your business and revenue approach will be able to flex and grow with changing market demands.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Sinclair walked me through the whole experience of building an app, on-boarding it, deploying it in different environments and then consuming it. &lt;/p&gt;  &lt;p&gt;SaaSGrid has some very nice properties for ISVs. Besides the whole value proposition of hosting the app, SaaSGrid offers higher value services such as application lifecycle management, billing and metering, tenant management, etc. All of this without requiring you to learn a new programming language, paradigm and/or platform: everything is based on standard .NET so if you are familiar, skilled and trained on the standard Microsoft platform, leveraging SaaSGrid should really be very easy. Furthermore, you retain the freedom to deploy your app in other ways: on-premises, on-demand, etc. &lt;/p&gt;  &lt;p&gt;This &amp;quot;non-intrusiveness&amp;quot; of SaaSGrid is a property of &lt;a href="http://en.wikipedia.org/wiki/Platform_as_a_service"&gt;PaaS&lt;/a&gt; offerings we have studied in the past. I personally believe that all offerings requiring an ISV to re-write an app, or re-learn a whole new development paradigm (custom language, non-mainstream storage, etc) will be at a disadvantage compared to PaaS offerings that will make the most of your existing investments and strengths, and therefore adoption will be hurt (probability +80% :-)).&lt;/p&gt;  &lt;p&gt;Last year we developed and wrote &amp;quot;&lt;a href="http://blogs.msdn.com/eugeniop/archive/2008/02/10/northwind-hosting-concept-demo.aspx"&gt;Northwind Hosting concept demo&lt;/a&gt;&amp;quot; with the intent of elevating concepts we believed were important in PaaS offerings. We also wrote a couple of white papers describing this topic (e.g. &lt;a href="http://msdn2.microsoft.com/en-us/library/bb891759.aspx"&gt;ISVs are from Mars, Hosters are from Venus&lt;/a&gt;; &lt;a href="http://msdn.microsoft.com/en-us/library/bb735303.aspx"&gt;Efficient Software Delivery Through Service Delivery Platforms&lt;/a&gt;).&lt;/p&gt;  &lt;p&gt;Many concepts discussed there are now implemented for real in SaaSGrid, but I also saw lots of new innovative features which I found extremely useful. &lt;/p&gt;  &lt;p&gt;Last, having an idea is great, but cheap :-). Writing about an idea takes some non-trivial effort (it is non-trivial for me at least). Turning an idea into a real offering is very hard. So kudos to Sinclair and his team for their hard work.&amp;#160; &lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8945832" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/eugeniop/archive/tags/Architecture/default.aspx">Architecture</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/SaaS/default.aspx">SaaS</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/S_2B00_S_5F00_Run/default.aspx">S+S_Run</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/S_2B00_S_5F00_Build/default.aspx">S+S_Build</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/S_2B00_S/default.aspx">S+S</category></item><item><title>End to end demo of LitwareHR on SSDS</title><link>http://blogs.msdn.com/eugeniop/archive/2008/04/27/end-to-end-demo-of-litwarehr-on-ssds.aspx</link><pubDate>Sun, 27 Apr 2008 23:51:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8432915</guid><dc:creator>eugeniop</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/eugeniop/comments/8432915.aspx</comments><wfw:commentRss>http://blogs.msdn.com/eugeniop/commentrss.aspx?PostID=8432915</wfw:commentRss><description>&lt;P&gt;Here's an end-to-end demo of LitwareHR using SSDS. The total demo lasts about 11 min and you will see:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;STRONG&gt;Tenant Provisioning and customization&lt;/STRONG&gt; (takes the first 5 min approximately). I show the initial tenant provisioning (creation of a new tenant in LitwareHR, initial configuration, etc) and then a basic customization (e.g. look &amp;amp; feel, position entity shape, etc). You'll notice that I switch back and forth between &lt;STRONG&gt;&lt;U&gt;www.litware.com&lt;/U&gt;&lt;/STRONG&gt; and SSDS to show how entities look like in the store. &lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Using the new created instance &lt;/STRONG&gt;(this takes the last 6 min). I show a hypothetical recruiter logging-in, opening new positions, then an applicant browsing the open positions and submitting a Resume and finally the recruiter browsing the posted applications. Again, you'll see how do these entities look like in SSDS. &lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;&lt;IFRAME style="WIDTH: 605px; HEIGHT: 453px" src="http://silverlight.services.live.com/invoke/5721/LitwareHR-SSDS/iframe.html" frameBorder=0 scrolling=no mce_src="http://silverlight.services.live.com/invoke/5721/LitwareHR-SSDS/iframe.html"&gt;&lt;/IFRAME&gt;&lt;/P&gt;
&lt;P&gt;If you want to see the video on a different window, click &lt;A href="http://silverlight.services.live.com/invoke/5721/LitwareHR-SSDS/iframe.html"&gt;here&lt;/A&gt;.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8432915" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/eugeniop/archive/tags/Architecture/default.aspx">Architecture</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/SaaS/default.aspx">SaaS</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/Sitka/default.aspx">Sitka</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/S_2B00_S_5F00_Build/default.aspx">S+S_Build</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/SQL+Server+Data+Services/default.aspx">SQL Server Data Services</category><category domain="http://blogs.msdn.com/eugeniop/archive/tags/SSDS/default.aspx">SSDS</category></item></channel></rss>