<?xml version="1.0"?><?xml-stylesheet type="text/xsl" href="http://code.msdn.microsoft.com/rss.xsl"?><rss version="2.0"><channel><title>FabrikamShipping</title><link>http://code.msdn.microsoft.com/FabrikamShipping/Project/ProjectRss.aspx</link><description>FabrikamShipping is a semi-realistic sample web application that demonstrates how to use the Geneva Framework for authentication, authorization and identity driven customization for a web frontend ...</description><item><title>UPDATED WIKI: Home</title><link>http://code.msdn.microsoft.com/FabrikamShipping/Wiki/View.aspx?title=Home&amp;version=9</link><description>&lt;div class="wikidoc"&gt;
&lt;img src="http://code.msdn.microsoft.com/Project/Download/FileDownload.aspx?ProjectName=FabrikamShipping&amp;amp;DownloadId=6181" alt="dpelog.png" /&gt;&lt;br /&gt;&lt;h1&gt;
Overview
&lt;/h1&gt; &lt;br /&gt;&lt;i&gt;updated for RTM&lt;/i&gt;&lt;br /&gt; &lt;br /&gt;FabrikamShipping is a semi-realistic sample web application that demonstrates how to use &lt;b&gt;Windows Identity Foundation&lt;/b&gt; for authentication, authorization and identity driven customization for a web frontend and a services backend. Its main goal is to show how to implement common tasks and features in web applications, combining the techniques presented separately in other technology learning material such as the &lt;a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=defd2019-a61f-4327-9332-6a4b6103527a" class="externalLink"&gt;Windows Identity Foundation SDK&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; and the &lt;a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=c3e315fa-94e2-4028-99cb-904369f177c0" class="externalLink"&gt;Identity Developer Training Kit&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;. &lt;br /&gt; &lt;br /&gt;Note that while all efforts have been made for following best practices whenever possible, FabrikamShipping is NOT a reference implementation since it is designed for readability and for making as clear as possible for the reader to understand what is happening, as opposed to efficiency and maintainability. You should NOT use FabrikamShipping code in production.&lt;br /&gt; &lt;br /&gt;&lt;h1&gt;
The FabrikamShipping Scenario
&lt;/h1&gt; &lt;br /&gt;&lt;img src="http://code.msdn.microsoft.com/Project/Download/FileDownload.aspx?ProjectName=FabrikamShipping&amp;amp;DownloadId=6182" alt="scenario.png" /&gt;&lt;br /&gt;&lt;i&gt;FabrikamShipping’s main actors&lt;/i&gt;&lt;br /&gt; &lt;br /&gt;The FabrikamShipping scenario has been originally designed as part of an end-to-end demo for PDC 2008 (video recording available at &lt;a href="http://channel9.msdn.com/pdc2008/BB11/" class="externalLink"&gt;http://channel9.msdn.com/pdc2008/BB11/&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;, from 31” on). While the general narrative remains largely unchanged, this example has been adapted to be a standalone web solution that you can install and examine on your machine without the need for virtual machines, services subscription or even internet connectivity.&lt;br /&gt; &lt;br /&gt;Fabrikam is an ISV that sells S+S solutions to business customers. FabrikamShipping is one of such solutions: it is a web application that allows users to ship packages. Shipments are created by entering details about sender and intended recipient. Once a shipment has been created, it will go through a workflow which represents the various shipment phases (pickup, package, transit, delivery); every phase will allow the user to perform specific actions, such as cancelling the shipment or rerouting to a different address.&lt;br /&gt; &lt;br /&gt;Adatum Corporation is a customer of Fabrikam, and subscribed to the FabrikamShipping application. John and Mary work for Adatum, and routinely use FabrikamShipping. John handles logistic in Manufacturing, while Mary is a manager: their different positions in the company translate in different privileges when using the application.&lt;br /&gt; &lt;br /&gt;&lt;h1&gt;
Implementation Details
&lt;/h1&gt; &lt;br /&gt; &lt;br /&gt;&lt;img src="http://code.msdn.microsoft.com/Project/Download/FileDownload.aspx?ProjectName=FabrikamShipping&amp;amp;DownloadId=6183" alt="implementation.png" /&gt;&lt;br /&gt;&lt;i&gt;FabrikamShipping’s Architecture&lt;/i&gt;&lt;br /&gt; &lt;br /&gt;FabrikamShipping is a classic web application, which authenticates its users via passive federation. &lt;br /&gt; &lt;br /&gt;The example includes a mock identity provider, www.adatumcorporation.com, which is a light customization of the default development STS template project provided with the RC of Windows Identity Foundation. Since the solution is designed to be able to run from a single machine, we make the STS available via HTTPS on a custom IIS binding (on port 8081) and we provide opportune entry on the local HOST file.&lt;br /&gt; &lt;br /&gt;The main application, https://www.fabrikamshipping.com:8082/FabrikamShipping/, is configured in a similar way and it is set to accept tokens directly from Adatum.&lt;br /&gt; &lt;br /&gt;Note: In a more realistic scenario, Fabrikam would have a resource STS that would be used to maintain the relationship with Adatum and all the other federated partners, and where any claims transformation that may be need would take place. Every Fabrikam applications, including FabrikamShipping, would then trust the resource STS instead of having to handle the relationship with the federated partner directly.&lt;br /&gt;In this sample we did not feature a resource STS at this level mainly because we wanted to keep thing simple and maintain smooth demo flow: there is a single application, that may even be running a hoster; there is a single federated partner in the picture; and for this application there is no need for claims transformation at the presentation layer. Unless you fall exactly in this category, there is a very high probability that your scenarios will indeed benefit from trusting your own resource STS rather than the partner directly.&lt;br /&gt; &lt;br /&gt;All FabrikamShipping business logic lives in a set of WCF services. The presentation layer invokes the services using a delegation mechanism: the access privileges are decided for every service call on the basis of the current web application’s user, as opposed to relying on trusted subsystem or full website impersonation approaches. The services are configured to accept tokens from an internal STS with ActAs capabilities: the STS is in turn invoked by the presentation layer’s code-behind with the token of the original user.&lt;br /&gt; &lt;br /&gt;&lt;h2&gt;
The Visual Studio Solution: What to Look For
&lt;/h2&gt; &lt;br /&gt;&lt;img src="http://code.msdn.microsoft.com/Project/Download/FileDownload.aspx?ProjectName=FabrikamShipping&amp;amp;DownloadId=6184" alt="vssol.png" /&gt;&lt;br /&gt;&lt;i&gt;FabrikamShipping solution structure&lt;/i&gt;&lt;br /&gt; &lt;br /&gt;The Visual Studio solution is pretty simple, and has been organized in a way that surfaces the main entities in the architecture and their component. At a glance, those are the projects and what to look from the identity management point of view:&lt;br /&gt; &lt;br /&gt;&lt;ul&gt;
&lt;li&gt;The Adatum folder contains only the STS subfolder with our mock identity provider, the web site http://www.adatumcorporation.com/FederationPassive/. All the identity content here is a mild customization of the default development STS offered by Windows Identity Foundation RC &lt;/li&gt;&lt;li&gt;The Fabrikam folder contains the bulk of the sample. The BackEnd subfolder contains all the projects that constitute the business logic of the sample&lt;/li&gt;&lt;ul&gt;
&lt;li&gt;FabrikamShipping.Services.Contracts is a class library containing all the contract definitions for the services. No identity code here.&lt;/li&gt;&lt;li&gt;FabrikamShipping.Services.Host is the web application that hosts the services, which are all message-activated. The web.config shows how to configure the ClaimsAuthorizationModule, use the ConfigureServiceHostBehaviorExtensionElement for configuring WCF services for using Windows Identity Foundation, and assign policies via custom claimsAuthorizationManager class.The App_Code folder contains the definition of the custom claimsAuthorizationManager class, substantially the same sample found in the SDK.&lt;/li&gt;&lt;li&gt;FabrikamShipping.Services is a class library containing the services implementations. No identity code here.&lt;/li&gt;&lt;li&gt;FabrikamShipping.Data is a class library containing the data model for shipments, customers and all the entities used by the sample. No identity code here.&lt;/li&gt;
&lt;/ul&gt;&lt;li&gt;The STS folder contains the internal STS.&lt;/li&gt;&lt;ul&gt;
&lt;li&gt;FabrikamShipping.RPSts is the web application which contains the ActAs STS which issues tokens for the frontend to invoke the backend services.The web.config shows how to configure an active STS secured via X509 certificate; it also demonstrates how to use a custom X509SecurityTokenHandler class (defined in SimpleX509SecurityTokenHandler.cs, integrated by SimpleCertificateValidator.cs) for defining the list of acceptable certificates.The ST implementation in ActAsSecurityTokenService.cs, and the method GetOutputClaimsIdentity in particular, demonstrates how to drive issuance decisions on the basis of ActAs tokens&lt;/li&gt;
&lt;/ul&gt;&lt;li&gt;The FrontEnd folder contains the main web application.&lt;/li&gt;&lt;ul&gt;
&lt;li&gt;http://www.fabrikamshipping.com/FabrikamShipping/ is the website of the main application.The web.config contains the classic settings that are the output of the federation wizard (or fedutil) when configuring a website to accept tokens from an identity provider. Furthermore, the web.config contains the binding that is needed for requesting a token from the ActAs STS.The global.asax, and specifically the Session&lt;i&gt;start handler, demonstrates how to use the token obtained from the identity provider as an ActAs token with WSTrustClient for invoking our internal ActAs STS. The resulting token is then stored in the HTTP session, where it will be available whenever the application will need to call a backend service (a real application may need to find a more solid solution for maintaining session state).The App&lt;/i&gt;Code/Clients folder contains utility classes for invoking WCF services by injecting in the call an issued token already in our possession: in our case, this will be the delegated token we stored in the HTTP session at the time of global.asax’s session_start execution.Most aspx pages will take advantage of IClaimsIdentity in the usual way for accessing claims from the identity provider; the calls to the backend services will be performed by taking advantage of the utility classes mentioned above&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h2&gt;
The Solution in IIS
&lt;/h2&gt; &lt;br /&gt;&lt;img src="http://code.msdn.microsoft.com/Project/Download/FileDownload.aspx?ProjectName=FabrikamShipping&amp;amp;DownloadId=6185" alt="iis.png" /&gt;&lt;br /&gt;&lt;i&gt;FabrikamShipping structure in IIS&lt;/i&gt;&lt;br /&gt; &lt;br /&gt;&lt;ul&gt;
&lt;li&gt;The structure that emerges in IIS matches the solution description above. Note that &lt;/li&gt;&lt;li&gt;Both websites introduce their own SSL bindings (8081 for Adatum and 8082 for Fabrikam) &lt;/li&gt;&lt;li&gt;The SSL certificates are self-signed, and configured as part of the overall setup script &lt;/li&gt;&lt;li&gt;In order to preserve your current settings, all web applications in the FabrikamShipping sample make use of a custom application pool, FabrikamShippingAppPool, which holds all the necessary permissions for accessing the private keys associated to the sample certificates above &lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h1&gt;
Summary
&lt;/h1&gt; &lt;br /&gt;FabrikamShipping is a learning tool designed for you to observe, take apart and experiment with Windows Identity Foundation and claims based identity. We tried to make it somewhat realistic in order to hint to the business value and to the solutions to some of the most common challenges you need to address when developing a web application; at the same time, we tried to keep things simple and to make sure you always know what is going on and which part does which function. We hope we managed to strike the right balance, and that FabrikamShipping will help you to enjoy the benefits of claims-based access. More details will be posted on &lt;a href="http://channel9.msdn.com/identity/" class="externalLink"&gt;http://channel9.msdn.com/identity/&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; and &lt;a href="http://blogs.msdn.com/vbertocci/" class="externalLink"&gt;http://blogs.msdn.com/vbertocci/&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;</description><author>Vittorio</author><pubDate>Tue, 17 Nov 2009 20:00:10 GMT</pubDate><guid isPermaLink="false">UPDATED WIKI: Home 20091117P</guid></item><item><title>CREATED RELEASE: FabrikamShipping Sample PDC09 (WIF RTM) (Nov 17, 2009)</title><link>http://code.msdn.microsoft.com/FabrikamShipping/Release/ProjectReleases.aspx?ReleaseId=3558</link><description></description><author></author><pubDate>Tue, 17 Nov 2009 18:21:35 GMT</pubDate><guid isPermaLink="false">CREATED RELEASE: FabrikamShipping Sample PDC09 (WIF RTM) (Nov 17, 2009) 20091117P</guid></item><item><title>UPDATED WIKI: Home</title><link>http://code.msdn.microsoft.com/FabrikamShipping/Wiki/View.aspx?title=Home&amp;version=8</link><description>&lt;div class="wikidoc"&gt;
&lt;img src="http://code.msdn.microsoft.com/Project/Download/FileDownload.aspx?ProjectName=FabrikamShipping&amp;amp;DownloadId=6181" alt="dpelog.png" /&gt;&lt;br /&gt;&lt;h1&gt;
Overview
&lt;/h1&gt; &lt;br /&gt;&lt;i&gt;updated for RC&lt;/i&gt;&lt;br /&gt; &lt;br /&gt;FabrikamShipping is a semi-realistic sample web application that demonstrates how to use &lt;b&gt;Windows Identity Foundation&lt;/b&gt; for authentication, authorization and identity driven customization for a web frontend and a services backend. Its main goal is to show how to implement common tasks and features in web applications, combining the techniques presented separately in other technology learning material such as the &lt;a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=defd2019-a61f-4327-9332-6a4b6103527a" class="externalLink"&gt;Windows Identity Foundation SDK&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; and the &lt;a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=c3e315fa-94e2-4028-99cb-904369f177c0" class="externalLink"&gt;Identity Developer Training Kit&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;. &lt;br /&gt; &lt;br /&gt;Note that while all efforts have been made for following best practices whenever possible, FabrikamShipping is NOT a reference implementation since it is designed for readability and for making as clear as possible for the reader to understand what is happening, as opposed to efficiency and maintainability. You should NOT use FabrikamShipping code in production.&lt;br /&gt; &lt;br /&gt;&lt;h1&gt;
The FabrikamShipping Scenario
&lt;/h1&gt; &lt;br /&gt;&lt;img src="http://code.msdn.microsoft.com/Project/Download/FileDownload.aspx?ProjectName=FabrikamShipping&amp;amp;DownloadId=6182" alt="scenario.png" /&gt;&lt;br /&gt;&lt;i&gt;FabrikamShipping’s main actors&lt;/i&gt;&lt;br /&gt; &lt;br /&gt;The FabrikamShipping scenario has been originally designed as part of an end-to-end demo for PDC 2008 (video recording available at &lt;a href="http://channel9.msdn.com/pdc2008/BB11/" class="externalLink"&gt;http://channel9.msdn.com/pdc2008/BB11/&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;, from 31” on). While the general narrative remains largely unchanged, this example has been adapted to be a standalone web solution that you can install and examine on your machine without the need for virtual machines, services subscription or even internet connectivity.&lt;br /&gt; &lt;br /&gt;Fabrikam is an ISV that sells S+S solutions to business customers. FabrikamShipping is one of such solutions: it is a web application that allows users to ship packages. Shipments are created by entering details about sender and intended recipient. Once a shipment has been created, it will go through a workflow which represents the various shipment phases (pickup, package, transit, delivery); every phase will allow the user to perform specific actions, such as cancelling the shipment or rerouting to a different address.&lt;br /&gt; &lt;br /&gt;Adatum Corporation is a customer of Fabrikam, and subscribed to the FabrikamShipping application. John and Mary work for Adatum, and routinely use FabrikamShipping. John handles logistic in Manufacturing, while Mary is a manager: their different positions in the company translate in different privileges when using the application.&lt;br /&gt; &lt;br /&gt;&lt;h1&gt;
Implementation Details
&lt;/h1&gt; &lt;br /&gt; &lt;br /&gt;&lt;img src="http://code.msdn.microsoft.com/Project/Download/FileDownload.aspx?ProjectName=FabrikamShipping&amp;amp;DownloadId=6183" alt="implementation.png" /&gt;&lt;br /&gt;&lt;i&gt;FabrikamShipping’s Architecture&lt;/i&gt;&lt;br /&gt; &lt;br /&gt;FabrikamShipping is a classic web application, which authenticates its users via passive federation. &lt;br /&gt; &lt;br /&gt;The example includes a mock identity provider, www.adatumcorporation.com, which is a light customization of the default development STS template project provided with the RC of Windows Identity Foundation. Since the solution is designed to be able to run from a single machine, we make the STS available via HTTPS on a custom IIS binding (on port 8081) and we provide opportune entry on the local HOST file.&lt;br /&gt; &lt;br /&gt;The main application, https://www.fabrikamshipping.com:8082/FabrikamShipping/, is configured in a similar way and it is set to accept tokens directly from Adatum.&lt;br /&gt; &lt;br /&gt;Note: In a more realistic scenario, Fabrikam would have a resource STS that would be used to maintain the relationship with Adatum and all the other federated partners, and where any claims transformation that may be need would take place. Every Fabrikam applications, including FabrikamShipping, would then trust the resource STS instead of having to handle the relationship with the federated partner directly.&lt;br /&gt;In this sample we did not feature a resource STS at this level mainly because we wanted to keep thing simple and maintain smooth demo flow: there is a single application, that may even be running a hoster; there is a single federated partner in the picture; and for this application there is no need for claims transformation at the presentation layer. Unless you fall exactly in this category, there is a very high probability that your scenarios will indeed benefit from trusting your own resource STS rather than the partner directly.&lt;br /&gt; &lt;br /&gt;All FabrikamShipping business logic lives in a set of WCF services. The presentation layer invokes the services using a delegation mechanism: the access privileges are decided for every service call on the basis of the current web application’s user, as opposed to relying on trusted subsystem or full website impersonation approaches. The services are configured to accept tokens from an internal STS with ActAs capabilities: the STS is in turn invoked by the presentation layer’s code-behind with the token of the original user.&lt;br /&gt; &lt;br /&gt;&lt;h2&gt;
The Visual Studio Solution: What to Look For
&lt;/h2&gt; &lt;br /&gt;&lt;img src="http://code.msdn.microsoft.com/Project/Download/FileDownload.aspx?ProjectName=FabrikamShipping&amp;amp;DownloadId=6184" alt="vssol.png" /&gt;&lt;br /&gt;&lt;i&gt;FabrikamShipping solution structure&lt;/i&gt;&lt;br /&gt; &lt;br /&gt;The Visual Studio solution is pretty simple, and has been organized in a way that surfaces the main entities in the architecture and their component. At a glance, those are the projects and what to look from the identity management point of view:&lt;br /&gt; &lt;br /&gt;&lt;ul&gt;
&lt;li&gt;The Adatum folder contains only the STS subfolder with our mock identity provider, the web site http://www.adatumcorporation.com/FederationPassive/. All the identity content here is a mild customization of the default development STS offered by Windows Identity Foundation RC &lt;/li&gt;&lt;li&gt;The Fabrikam folder contains the bulk of the sample. The BackEnd subfolder contains all the projects that constitute the business logic of the sample&lt;/li&gt;&lt;ul&gt;
&lt;li&gt;FabrikamShipping.Services.Contracts is a class library containing all the contract definitions for the services. No identity code here.&lt;/li&gt;&lt;li&gt;FabrikamShipping.Services.Host is the web application that hosts the services, which are all message-activated. The web.config shows how to configure the ClaimsAuthorizationModule, use the ConfigureServiceHostBehaviorExtensionElement for configuring WCF services for using Windows Identity Foundation, and assign policies via custom claimsAuthorizationManager class.The App_Code folder contains the definition of the custom claimsAuthorizationManager class, substantially the same sample found in the SDK.&lt;/li&gt;&lt;li&gt;FabrikamShipping.Services is a class library containing the services implementations. No identity code here.&lt;/li&gt;&lt;li&gt;FabrikamShipping.Data is a class library containing the data model for shipments, customers and all the entities used by the sample. No identity code here.&lt;/li&gt;
&lt;/ul&gt;&lt;li&gt;The STS folder contains the internal STS.&lt;/li&gt;&lt;ul&gt;
&lt;li&gt;FabrikamShipping.RPSts is the web application which contains the ActAs STS which issues tokens for the frontend to invoke the backend services.The web.config shows how to configure an active STS secured via X509 certificate; it also demonstrates how to use a custom X509SecurityTokenHandler class (defined in SimpleX509SecurityTokenHandler.cs, integrated by SimpleCertificateValidator.cs) for defining the list of acceptable certificates.The ST implementation in ActAsSecurityTokenService.cs, and the method GetOutputClaimsIdentity in particular, demonstrates how to drive issuance decisions on the basis of ActAs tokens&lt;/li&gt;
&lt;/ul&gt;&lt;li&gt;The FrontEnd folder contains the main web application.&lt;/li&gt;&lt;ul&gt;
&lt;li&gt;http://www.fabrikamshipping.com/FabrikamShipping/ is the website of the main application.The web.config contains the classic settings that are the output of the federation wizard (or fedutil) when configuring a website to accept tokens from an identity provider. Furthermore, the web.config contains the binding that is needed for requesting a token from the ActAs STS.The global.asax, and specifically the Session&lt;i&gt;start handler, demonstrates how to use the token obtained from the identity provider as an ActAs token with WSTrustClient for invoking our internal ActAs STS. The resulting token is then stored in the HTTP session, where it will be available whenever the application will need to call a backend service (a real application may need to find a more solid solution for maintaining session state).The App&lt;/i&gt;Code/Clients folder contains utility classes for invoking WCF services by injecting in the call an issued token already in our possession: in our case, this will be the delegated token we stored in the HTTP session at the time of global.asax’s session_start execution.Most aspx pages will take advantage of IClaimsIdentity in the usual way for accessing claims from the identity provider; the calls to the backend services will be performed by taking advantage of the utility classes mentioned above&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h2&gt;
The Solution in IIS
&lt;/h2&gt; &lt;br /&gt;&lt;img src="http://code.msdn.microsoft.com/Project/Download/FileDownload.aspx?ProjectName=FabrikamShipping&amp;amp;DownloadId=6185" alt="iis.png" /&gt;&lt;br /&gt;&lt;i&gt;FabrikamShipping structure in IIS&lt;/i&gt;&lt;br /&gt; &lt;br /&gt;&lt;ul&gt;
&lt;li&gt;The structure that emerges in IIS matches the solution description above. Note that &lt;/li&gt;&lt;li&gt;Both websites introduce their own SSL bindings (8081 for Adatum and 8082 for Fabrikam) &lt;/li&gt;&lt;li&gt;The SSL certificates are self-signed, and configured as part of the overall setup script &lt;/li&gt;&lt;li&gt;In order to preserve your current settings, all web applications in the FabrikamShipping sample make use of a custom application pool, FabrikamShippingAppPool, which holds all the necessary permissions for accessing the private keys associated to the sample certificates above &lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h1&gt;
Summary
&lt;/h1&gt; &lt;br /&gt;FabrikamShipping is a learning tool designed for you to observe, take apart and experiment with Windows Identity Foundation and claims based identity. We tried to make it somewhat realistic in order to hint to the business value and to the solutions to some of the most common challenges you need to address when developing a web application; at the same time, we tried to keep things simple and to make sure you always know what is going on and which part does which function. We hope we managed to strike the right balance, and that FabrikamShipping will help you to enjoy the benefits of claims-based access. More details will be posted on &lt;a href="http://channel9.msdn.com/identity/" class="externalLink"&gt;http://channel9.msdn.com/identity/&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; and &lt;a href="http://blogs.msdn.com/vbertocci/" class="externalLink"&gt;http://blogs.msdn.com/vbertocci/&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;</description><author>Vittorio</author><pubDate>Fri, 06 Nov 2009 18:48:01 GMT</pubDate><guid isPermaLink="false">UPDATED WIKI: Home 20091106P</guid></item><item><title>UPDATED WIKI: Home</title><link>http://code.msdn.microsoft.com/FabrikamShipping/Wiki/View.aspx?title=Home&amp;version=7</link><description>&lt;div class="wikidoc"&gt;
&lt;img src="http://code.msdn.microsoft.com/Project/Download/FileDownload.aspx?ProjectName=FabrikamShipping&amp;amp;DownloadId=6181" alt="dpelog.png" /&gt;&lt;br /&gt;&lt;h1&gt;
Overview
&lt;/h1&gt; &lt;br /&gt;&lt;a href="http://code.msdn.microsoft.com/FabrikamShipping/Wiki/View.aspx?title=updated%20for%20RC&amp;amp;referringTitle=Home"&gt;updated for RC&lt;/a&gt;&lt;br /&gt; &lt;br /&gt;FabrikamShipping is a semi-realistic sample web application that demonstrates how to use &lt;b&gt;Windows Identity Foundation&lt;/b&gt; for authentication, authorization and identity driven customization for a web frontend and a services backend. Its main goal is to show how to implement common tasks and features in web applications, combining the techniques presented separately in other technology learning material such as the &lt;a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=defd2019-a61f-4327-9332-6a4b6103527a" class="externalLink"&gt;Windows Identity Foundation SDK&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; and the &lt;a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=c3e315fa-94e2-4028-99cb-904369f177c0" class="externalLink"&gt;Identity Developer Training Kit&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;. &lt;br /&gt; &lt;br /&gt;Note that while all efforts have been made for following best practices whenever possible, FabrikamShipping is NOT a reference implementation since it is designed for readability and for making as clear as possible for the reader to understand what is happening, as opposed to efficiency and maintainability. You should NOT use FabrikamShipping code in production.&lt;br /&gt; &lt;br /&gt;&lt;h1&gt;
The FabrikamShipping Scenario
&lt;/h1&gt; &lt;br /&gt;&lt;img src="http://code.msdn.microsoft.com/Project/Download/FileDownload.aspx?ProjectName=FabrikamShipping&amp;amp;DownloadId=6182" alt="scenario.png" /&gt;&lt;br /&gt;&lt;i&gt;FabrikamShipping’s main actors&lt;/i&gt;&lt;br /&gt; &lt;br /&gt;The FabrikamShipping scenario has been originally designed as part of an end-to-end demo for PDC 2008 (video recording available at &lt;a href="http://channel9.msdn.com/pdc2008/BB11/" class="externalLink"&gt;http://channel9.msdn.com/pdc2008/BB11/&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;, from 31” on). While the general narrative remains largely unchanged, this example has been adapted to be a standalone web solution that you can install and examine on your machine without the need for virtual machines, services subscription or even internet connectivity.&lt;br /&gt; &lt;br /&gt;Fabrikam is an ISV that sells S+S solutions to business customers. FabrikamShipping is one of such solutions: it is a web application that allows users to ship packages. Shipments are created by entering details about sender and intended recipient. Once a shipment has been created, it will go through a workflow which represents the various shipment phases (pickup, package, transit, delivery); every phase will allow the user to perform specific actions, such as cancelling the shipment or rerouting to a different address.&lt;br /&gt; &lt;br /&gt;Adatum Corporation is a customer of Fabrikam, and subscribed to the FabrikamShipping application. John and Mary work for Adatum, and routinely use FabrikamShipping. John handles logistic in Manufacturing, while Mary is a manager: their different positions in the company translate in different privileges when using the application.&lt;br /&gt; &lt;br /&gt;&lt;h1&gt;
Implementation Details
&lt;/h1&gt; &lt;br /&gt; &lt;br /&gt;&lt;img src="http://code.msdn.microsoft.com/Project/Download/FileDownload.aspx?ProjectName=FabrikamShipping&amp;amp;DownloadId=6183" alt="implementation.png" /&gt;&lt;br /&gt;&lt;i&gt;FabrikamShipping’s Architecture&lt;/i&gt;&lt;br /&gt; &lt;br /&gt;FabrikamShipping is a classic web application, which authenticates its users via passive federation. &lt;br /&gt; &lt;br /&gt;The example includes a mock identity provider, www.adatumcorporation.com, which is a light customization of the default development STS template project provided with the RC of Windows Identity Foundation. Since the solution is designed to be able to run from a single machine, we make the STS available via HTTPS on a custom IIS binding (on port 8081) and we provide opportune entry on the local HOST file.&lt;br /&gt; &lt;br /&gt;The main application, https://www.fabrikamshipping.com:8082/FabrikamShipping/, is configured in a similar way and it is set to accept tokens directly from Adatum.&lt;br /&gt; &lt;br /&gt;Note: In a more realistic scenario, Fabrikam would have a resource STS that would be used to maintain the relationship with Adatum and all the other federated partners, and where any claims transformation that may be need would take place. Every Fabrikam applications, including FabrikamShipping, would then trust the resource STS instead of having to handle the relationship with the federated partner directly.&lt;br /&gt;In this sample we did not feature a resource STS at this level mainly because we wanted to keep thing simple and maintain smooth demo flow: there is a single application, that may even be running a hoster; there is a single federated partner in the picture; and for this application there is no need for claims transformation at the presentation layer. Unless you fall exactly in this category, there is a very high probability that your scenarios will indeed benefit from trusting your own resource STS rather than the partner directly.&lt;br /&gt; &lt;br /&gt;All FabrikamShipping business logic lives in a set of WCF services. The presentation layer invokes the services using a delegation mechanism: the access privileges are decided for every service call on the basis of the current web application’s user, as opposed to relying on trusted subsystem or full website impersonation approaches. The services are configured to accept tokens from an internal STS with ActAs capabilities: the STS is in turn invoked by the presentation layer’s code-behind with the token of the original user.&lt;br /&gt; &lt;br /&gt;&lt;h2&gt;
The Visual Studio Solution: What to Look For
&lt;/h2&gt; &lt;br /&gt;&lt;img src="http://code.msdn.microsoft.com/Project/Download/FileDownload.aspx?ProjectName=FabrikamShipping&amp;amp;DownloadId=6184" alt="vssol.png" /&gt;&lt;br /&gt;&lt;i&gt;FabrikamShipping solution structure&lt;/i&gt;&lt;br /&gt; &lt;br /&gt;The Visual Studio solution is pretty simple, and has been organized in a way that surfaces the main entities in the architecture and their component. At a glance, those are the projects and what to look from the identity management point of view:&lt;br /&gt; &lt;br /&gt;&lt;ul&gt;
&lt;li&gt;The Adatum folder contains only the STS subfolder with our mock identity provider, the web site http://www.adatumcorporation.com/FederationPassive/. All the identity content here is a mild customization of the default development STS offered by Windows Identity Foundation RC &lt;/li&gt;&lt;li&gt;The Fabrikam folder contains the bulk of the sample. The BackEnd subfolder contains all the projects that constitute the business logic of the sample&lt;/li&gt;&lt;ul&gt;
&lt;li&gt;FabrikamShipping.Services.Contracts is a class library containing all the contract definitions for the services. No identity code here.&lt;/li&gt;&lt;li&gt;FabrikamShipping.Services.Host is the web application that hosts the services, which are all message-activated. The web.config shows how to configure the ClaimsAuthorizationModule, use the ConfigureServiceHostBehaviorExtensionElement for configuring WCF services for using Windows Identity Foundation, and assign policies via custom claimsAuthorizationManager class.The App_Code folder contains the definition of the custom claimsAuthorizationManager class, substantially the same sample found in the SDK.&lt;/li&gt;&lt;li&gt;FabrikamShipping.Services is a class library containing the services implementations. No identity code here.&lt;/li&gt;&lt;li&gt;FabrikamShipping.Data is a class library containing the data model for shipments, customers and all the entities used by the sample. No identity code here.&lt;/li&gt;
&lt;/ul&gt;&lt;li&gt;The STS folder contains the internal STS.&lt;/li&gt;&lt;ul&gt;
&lt;li&gt;FabrikamShipping.RPSts is the web application which contains the ActAs STS which issues tokens for the frontend to invoke the backend services.The web.config shows how to configure an active STS secured via X509 certificate; it also demonstrates how to use a custom X509SecurityTokenHandler class (defined in SimpleX509SecurityTokenHandler.cs, integrated by SimpleCertificateValidator.cs) for defining the list of acceptable certificates.The ST implementation in ActAsSecurityTokenService.cs, and the method GetOutputClaimsIdentity in particular, demonstrates how to drive issuance decisions on the basis of ActAs tokens&lt;/li&gt;
&lt;/ul&gt;&lt;li&gt;The FrontEnd folder contains the main web application.&lt;/li&gt;&lt;ul&gt;
&lt;li&gt;http://www.fabrikamshipping.com/FabrikamShipping/ is the website of the main application.The web.config contains the classic settings that are the output of the federation wizard (or fedutil) when configuring a website to accept tokens from an identity provider. Furthermore, the web.config contains the binding that is needed for requesting a token from the ActAs STS.The global.asax, and specifically the Session&lt;i&gt;start handler, demonstrates how to use the token obtained from the identity provider as an ActAs token with WSTrustClient for invoking our internal ActAs STS. The resulting token is then stored in the HTTP session, where it will be available whenever the application will need to call a backend service (a real application may need to find a more solid solution for maintaining session state).The App&lt;/i&gt;Code/Clients folder contains utility classes for invoking WCF services by injecting in the call an issued token already in our possession: in our case, this will be the delegated token we stored in the HTTP session at the time of global.asax’s session_start execution.Most aspx pages will take advantage of IClaimsIdentity in the usual way for accessing claims from the identity provider; the calls to the backend services will be performed by taking advantage of the utility classes mentioned above&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h2&gt;
The Solution in IIS
&lt;/h2&gt; &lt;br /&gt;&lt;img src="http://code.msdn.microsoft.com/Project/Download/FileDownload.aspx?ProjectName=FabrikamShipping&amp;amp;DownloadId=6185" alt="iis.png" /&gt;&lt;br /&gt;&lt;i&gt;FabrikamShipping structure in IIS&lt;/i&gt;&lt;br /&gt; &lt;br /&gt;&lt;ul&gt;
&lt;li&gt;The structure that emerges in IIS matches the solution description above. Note that &lt;/li&gt;&lt;li&gt;Both websites introduce their own SSL bindings (8081 for Adatum and 8082 for Fabrikam) &lt;/li&gt;&lt;li&gt;The SSL certificates are self-signed, and configured as part of the overall setup script &lt;/li&gt;&lt;li&gt;In order to preserve your current settings, all web applications in the FabrikamShipping sample make use of a custom application pool, FabrikamShippingAppPool, which holds all the necessary permissions for accessing the private keys associated to the sample certificates above &lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h1&gt;
Summary
&lt;/h1&gt; &lt;br /&gt;FabrikamShipping is a learning tool designed for you to observe, take apart and experiment with Windows Identity Foundation and claims based identity. We tried to make it somewhat realistic in order to hint to the business value and to the solutions to some of the most common challenges you need to address when developing a web application; at the same time, we tried to keep things simple and to make sure you always know what is going on and which part does which function. We hope we managed to strike the right balance, and that FabrikamShipping will help you to enjoy the benefits of claims-based access. More details will be posted on &lt;a href="http://channel9.msdn.com/identity/" class="externalLink"&gt;http://channel9.msdn.com/identity/&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; and &lt;a href="http://blogs.msdn.com/vbertocci/" class="externalLink"&gt;http://blogs.msdn.com/vbertocci/&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;</description><author>Vittorio</author><pubDate>Fri, 06 Nov 2009 18:47:09 GMT</pubDate><guid isPermaLink="false">UPDATED WIKI: Home 20091106P</guid></item><item><title>CREATED RELEASE: FabrikamShipping 1.5 Identity Sample (WIF RC) (Nov 06, 2009)</title><link>http://code.msdn.microsoft.com/FabrikamShipping/Release/ProjectReleases.aspx?ReleaseId=3492</link><description></description><author></author><pubDate>Fri, 06 Nov 2009 18:42:35 GMT</pubDate><guid isPermaLink="false">CREATED RELEASE: FabrikamShipping 1.5 Identity Sample (WIF RC) (Nov 06, 2009) 20091106P</guid></item><item><title>NEW POST: Installation Prerequisites</title><link>http://code.msdn.microsoft.com/FabrikamShipping/Thread/View.aspx?ThreadId=2155</link><description>&lt;div class="wikidoc"&gt;
During the installation and configuration process, the prerequisites check is claiming that I do not have Visual Studio 2008 installed although I do (VS 2008 SP1).  As a result, the configuration can't continue.  Is there something else that it's looking for that may be missing?&lt;br /&gt; &lt;br /&gt;Thanks for the help,&lt;br /&gt;Garrett&lt;br /&gt;
&lt;/div&gt;</description><author>GarrettV</author><pubDate>Sun, 16 Aug 2009 18:08:55 GMT</pubDate><guid isPermaLink="false">NEW POST: Installation Prerequisites 20090816P</guid></item><item><title>Project License Changed</title><link>http://code.msdn.microsoft.com/FabrikamShipping/Project/License.aspx?LicenseHistoryId=3123</link><description>Different license terms apply to different file types&amp;#58;&amp;#10;&amp;#10;- Source code files are governed by the MICROSOFT LIMITED PUBLIC LICENSE &amp;#40;Ms-LPL&amp;#41; &amp;#40;INCLUDED BELOW&amp;#41;.&amp;#10;- Binary files are governed by MSDN CODE GALLERY BINARY LICENSE &amp;#40;INCLUDED BELOW&amp;#41;. &amp;#10;- Documentation files are governed by CREATIVE COMMONS ATTRIBUTION 3.0 LICENSE &amp;#40;INCLUDED BELOW&amp;#41;.&amp;#10;&amp;#10;Microsoft Limited Public License &amp;#40;Ms-LPL&amp;#41;&amp;#10;&amp;#10;This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software.&amp;#10;&amp;#10;1. Definitions&amp;#10;&amp;#10;The terms &amp;#8220;reproduce,&amp;#8221; &amp;#8220;reproduction,&amp;#8221; &amp;#8220;derivative works,&amp;#8221; and &amp;#8220;distribution&amp;#8221; have the same meaning here as under U.S. copyright law.&amp;#10;&amp;#10;A &amp;#8220;contribution&amp;#8221; is the original software, or any additions or changes to the software.&amp;#10;&amp;#10;A &amp;#8220;contributor&amp;#8221; is any person that distributes its contribution under this license.&amp;#10;&amp;#8220;Licensed patents&amp;#8221; are a contributor&amp;#8217;s patent claims that read directly on its contribution.&amp;#10;&amp;#10;2. Grant of Rights&amp;#10;&amp;#10;&amp;#40;A&amp;#41; Copyright Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create.&amp;#10;&amp;#10;&amp;#40;B&amp;#41; Patent Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and&amp;#47;or otherwise dispose of its contribution in the software or derivative works of the contribution in the software.&amp;#10;&amp;#10;3. Conditions and Limitations&amp;#10;&amp;#10;&amp;#40;A&amp;#41; No Trademark License- This license does not grant you rights to use any contributors&amp;#8217; name, logo, or trademarks.&amp;#10;&amp;#10;&amp;#40;B&amp;#41; If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically.&amp;#10;&amp;#10;&amp;#40;C&amp;#41; If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software.&amp;#10;&amp;#10;&amp;#40;D&amp;#41; If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license.&amp;#10;&amp;#10;&amp;#40;E&amp;#41; The software is licensed &amp;#8220;as-is.&amp;#8221; You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement.&amp;#10;&amp;#10;&amp;#40;F&amp;#41; Platform Limitation- The licenses granted in sections 2&amp;#40;A&amp;#41; &amp;#38; 2&amp;#40;B&amp;#41; extend only to the software or derivative works that you create that run on a Microsoft Windows operating system product.&amp;#10;&amp;#10;MSDN CODE GALLERY BINARY LICENSE &amp;#10;&amp;#10;You are free to install, use, copy and distribute any number of copies of the software, in object code form, provided that you retain&amp;#58;&amp;#10;&amp;#10;&amp;#8226; all copyright, patent, trademark, and attribution notices that are present in the software, &amp;#10;&amp;#8226; this list of conditions, and &amp;#10;&amp;#8226; the following disclaimer in the documentation and&amp;#47;or other materials provided with the software. &amp;#10;&amp;#10;The software is licensed &amp;#8220;as-is.&amp;#8221; You bear the risk of using it. No express warranties, guarantees or conditions are provided. To the extent permitted under your local laws, the implied warranties of merchantability, fitness for a particular purpose and non-infringement are excluded. &amp;#10;&amp;#10;This license does not grant you any rights to use any other party&amp;#8217;s name, logo, or trademarks. All rights not specifically granted herein are reserved. &amp;#10;&amp;#10;v061708&amp;#10;&amp;#10;&amp;#10;CREATIVE COMMONS ATTRIBUTION 3.0 LICENSE&amp;#10;&amp;#10;THE WORK &amp;#40;AS DEFINED BELOW&amp;#41; IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE &amp;#40;&amp;#34;CCPL&amp;#34; OR &amp;#34;LICENSE&amp;#34;&amp;#41;. THE WORK IS PROTECTED BY COPYRIGHT AND&amp;#47;OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.&amp;#10;&amp;#10;BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS.&amp;#10;&amp;#10;1. Definitions&amp;#10;&amp;#10;a. &amp;#34;Collective Work&amp;#34; means a work, such as a periodical issue, anthology or encyclopedia, in which the Work in its entirety in unmodified form, along with one or more other contributions, constituting separate and independent works in themselves, are assembled into a collective whole. A work that constitutes a Collective Work will not be considered a Derivative Work &amp;#40;as defined below&amp;#41; for the purposes of this License. &amp;#10;&amp;#10;b. &amp;#34;Derivative Work&amp;#34; means a work based upon the Work or upon the Work and other pre-existing works, such as a translation, musical arrangement, dramatization, fictionalization, motion picture version, sound recording, art reproduction, abridgment, condensation, or any other form in which the Work may be recast, transformed, or adapted, except that a work that constitutes a Collective Work will not be considered a Derivative Work for the purpose of this License. For the avoidance of doubt, where the Work is a musical composition or sound recording, the synchronization of the Work in timed-relation with a moving image &amp;#40;&amp;#34;synching&amp;#34;&amp;#41; will be considered a Derivative Work for the purpose of this License. &amp;#10;&amp;#10;c. &amp;#34;Licensor&amp;#34; means the individual, individuals, entity or entities that offers the Work under the terms of this License. &amp;#10;&amp;#10;d. &amp;#34;Original Author&amp;#34; means the individual, individuals, entity or entities who created the Work. &amp;#10;&amp;#10;e. &amp;#34;Work&amp;#34; means the copyrightable work of authorship offered under the terms of this License. &amp;#10;&amp;#10;f. &amp;#34;You&amp;#34; means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation. &amp;#10;&amp;#10;2. Fair Use Rights. Nothing in this license is intended to reduce, limit, or restrict any rights arising from fair use, first sale or other limitations on the exclusive rights of the copyright owner under copyright law or other applicable laws.&amp;#10;&amp;#10;3. License Grant. Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual &amp;#40;for the duration of the applicable copyright&amp;#41; license to exercise the rights in the Work as stated below&amp;#58;&amp;#10;&amp;#10;a. to reproduce the Work, to incorporate the Work into one or more Collective Works, and to reproduce the Work as incorporated in the Collective Works&amp;#59; &amp;#10;&amp;#10;b. to create and reproduce Derivative Works provided that any such Derivative Work, including any translation in any medium, takes reasonable steps to clearly label, demarcate or otherwise identify that changes were made to the original Work. For example, a translation could be marked &amp;#34;The original work was translated from English to Spanish,&amp;#34; or a modification could indicate &amp;#34;The original work has been modified.&amp;#34;&amp;#59;&amp;#59; &amp;#10;&amp;#10;c. to distribute copies or phonorecords of, display publicly, perform publicly, and perform publicly by means of a digital audio transmission the Work including as incorporated in Collective Works&amp;#59; &amp;#10;&amp;#10;d. to distribute copies or phonorecords of, display publicly, perform publicly, and perform publicly by means of a digital audio transmission Derivative Works. &amp;#10;&amp;#10;e. For the avoidance of doubt, where the Work is a musical composition&amp;#58;&amp;#10;&amp;#10;i. Performance Royalties Under Blanket Licenses. Licensor waives the exclusive right to collect, whether individually or, in the event that Licensor is a member of a performance rights society &amp;#40;e.g. ASCAP, BMI, SESAC&amp;#41;, via that society, royalties for the public performance or public digital performance &amp;#40;e.g. webcast&amp;#41; of the Work. &amp;#10;&amp;#10;ii. Mechanical Rights and Statutory Royalties. Licensor waives the exclusive right to collect, whether individually or via a music rights agency or designated agent &amp;#40;e.g. Harry Fox Agency&amp;#41;, royalties for any phonorecord You create from the Work &amp;#40;&amp;#34;cover version&amp;#34;&amp;#41; and distribute, subject to the compulsory license created by 17 USC Section 115 of the US Copyright Act &amp;#40;or the equivalent in other jurisdictions&amp;#41;. &amp;#10;&amp;#10;f. Webcasting Rights and Statutory Royalties. For the avoidance of doubt, where the Work is a sound recording, Licensor waives the exclusive right to collect, whether individually or via a performance-rights society &amp;#40;e.g. SoundExchange&amp;#41;, royalties for the public digital performance &amp;#40;e.g. webcast&amp;#41; of the Work, subject to the compulsory license created by 17 USC Section 114 of the US Copyright Act &amp;#40;or the equivalent in other jurisdictions&amp;#41;. &amp;#10;&amp;#10;The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats. All rights not expressly granted by Licensor are hereby reserved.&amp;#10;&amp;#10;4. Restrictions. The license granted in Section 3 above is expressly made subject to and limited by the following restrictions&amp;#58;&amp;#10;&amp;#10;a. You may distribute, publicly display, publicly perform, or publicly digitally perform the Work only under the terms of this License, and You must include a copy of, or the Uniform Resource Identifier for, this License with every copy or phonorecord of the Work You distribute, publicly display, publicly perform, or publicly digitally perform. You may not offer or impose any terms on the Work that restrict the terms of this License or the ability of a recipient of the Work to exercise the rights granted to that recipient under the terms of the License. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties. When You distribute, publicly display, publicly perform, or publicly digitally perform the Work, You may not impose any technological measures on the Work that restrict the ability of a recipient of the Work from You to exercise the rights granted to that recipient under the terms of the License. This Section 4&amp;#40;a&amp;#41; applies to the Work as incorporated in a Collective Work, but this does not require the Collective Work apart from the Work itself to be made subject to the terms of this License. If You create a Collective Work, upon notice from any Licensor You must, to the extent practicable, remove from the Collective Work any credit as required by Section 4&amp;#40;b&amp;#41;, as requested. If You create a Derivative Work, upon notice from any Licensor You must, to the extent practicable, remove from the Derivative Work any credit as required by Section 4&amp;#40;b&amp;#41;, as requested. &amp;#10;&amp;#10;b. If You distribute, publicly display, publicly perform, or publicly digitally perform the Work &amp;#40;as defined in Section 1 above&amp;#41; or any Derivative Works &amp;#40;as defined in Section 1 above&amp;#41; or Collective Works &amp;#40;as defined in Section 1 above&amp;#41;, You must, unless a request has been made pursuant to Section 4&amp;#40;a&amp;#41;, keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing&amp;#58; &amp;#40;i&amp;#41; the name of the Original Author &amp;#40;or pseudonym, if applicable&amp;#41; if supplied, and&amp;#47;or &amp;#40;ii&amp;#41; if the Original Author and&amp;#47;or Licensor designate another party or parties &amp;#40;e.g. a sponsor institute, publishing entity, journal&amp;#41; for attribution &amp;#40;&amp;#34;Attribution Parties&amp;#34;&amp;#41; in Licensor&amp;#39;s copyright notice, terms of service or by other reasonable means, the name of such party or parties&amp;#59; the title of the Work if supplied&amp;#59; to the extent reasonably practicable, the Uniform Resource Identifier, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work&amp;#59; and, consistent with Section 3&amp;#40;b&amp;#41; in the case of a Derivative Work, a credit identifying the use of the Work in the Derivative Work &amp;#40;e.g., &amp;#34;French translation of the Work by Original Author,&amp;#34; or &amp;#34;Screenplay based on original Work by Original Author&amp;#34;&amp;#41;. The credit required by this Section 4&amp;#40;b&amp;#41; may be implemented in any reasonable manner&amp;#59; provided, however, that in the case of a Derivative Work or Collective Work, at a minimum such credit will appear, if a credit for all contributing authors of the Derivative Work or Collective Work appears, then as part of these credits and in a manner at least as prominent as the credits for the other contributing authors. For the avoidance of doubt, You may only use the credit required by this Section for the purpose of attribution in the manner set out above and, by exercising Your rights under this License, You may not implicitly or explicitly assert or imply any connection with, sponsorship or endorsement by the Original Author, Licensor and&amp;#47;or Attribution Parties, as appropriate, of You or Your use of the Work, without the separate, express prior written permission of the Original Author, Licensor and&amp;#47;or Attribution Parties. &amp;#10;&amp;#10;5. Representations, Warranties and Disclaimer&amp;#10;&amp;#10;UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR OFFERS THE WORK AS-IS AND ONLY TO THE EXTENT OF ANY RIGHTS HELD IN THE LICENSED WORK BY THE LICENSOR. THE LICENSOR MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MARKETABILITY, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU.&amp;#10;&amp;#10;6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.&amp;#10;&amp;#10;7. Termination&amp;#10;&amp;#10;a. This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Derivative Works &amp;#40;as defined in Section 1 above&amp;#41; or Collective Works &amp;#40;as defined in Section 1 above&amp;#41; from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License. &amp;#10;&amp;#10;b. Subject to the above terms and conditions, the license granted here is perpetual &amp;#40;for the duration of the applicable copyright in the Work&amp;#41;. Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time&amp;#59; provided, however that any such election will not serve to withdraw this License &amp;#40;or any other license that has been, or is required to be, granted under the terms of this License&amp;#41;, and this License will continue in full force and effect unless terminated as stated above. &amp;#10;&amp;#10;8. Miscellaneous&amp;#10;&amp;#10;a. Each time You distribute or publicly digitally perform the Work &amp;#40;as defined in Section 1 above&amp;#41; or a Collective Work &amp;#40;as defined in Section 1 above&amp;#41;, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License. &amp;#10;&amp;#10;b. Each time You distribute or publicly digitally perform a Derivative Work, Licensor offers to the recipient a license to the original Work on the same terms and conditions as the license granted to You under this License. &amp;#10;&amp;#10;c. If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable. &amp;#10;&amp;#10;d. No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent. &amp;#10;&amp;#10;e. This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You. </description><author></author><pubDate>Wed, 08 Jul 2009 18:31:26 GMT</pubDate><guid isPermaLink="false">Project License Changed 20090708P</guid></item><item><title>Project License Changed</title><link>http://code.msdn.microsoft.com/FabrikamShipping/Project/License.aspx?LicenseHistoryId=3024</link><description>Different license terms apply to different file types&amp;#58;&amp;#10; &amp;#10;- Source code files are governed by the MICROSOFT LIMITED PUBLIC LICENSE &amp;#40;Ms-LPL&amp;#41; &amp;#40;INCLUDED BELOW&amp;#41;.&amp;#10;- Binary files are governed by MSDN CODE GALLERY BINARY LICENSE &amp;#40;INCLUDED BELOW&amp;#41;. &amp;#10;- Documentation files are governed by CREATIVE COMMONS ATTRIBUTION 3.0 LICENSE &amp;#40;INCLUDED BELOW&amp;#41;.&amp;#10; &amp;#10;Microsoft Limited Public License &amp;#40;Ms-LPL&amp;#41;&amp;#10;&amp;#10;This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software.&amp;#10;&amp;#10;1. Definitions&amp;#10;&amp;#10;The terms &amp;#8220;reproduce,&amp;#8221; &amp;#8220;reproduction,&amp;#8221; &amp;#8220;derivative works,&amp;#8221; and &amp;#8220;distribution&amp;#8221; have the same meaning here as under U.S. copyright law.&amp;#10;&amp;#10;A &amp;#8220;contribution&amp;#8221; is the original software, or any additions or changes to the software.&amp;#10;&amp;#10;A &amp;#8220;contributor&amp;#8221; is any person that distributes its contribution under this license.&amp;#10; &amp;#8220;Licensed patents&amp;#8221; are a contributor&amp;#8217;s patent claims that read directly on its contribution.&amp;#10;&amp;#10;2. Grant of Rights&amp;#10;&amp;#10;&amp;#40;A&amp;#41; Copyright Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create.&amp;#10;&amp;#10;&amp;#40;B&amp;#41; Patent Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and&amp;#47;or otherwise dispose of its contribution in the software or derivative works of the contribution in the software.&amp;#10;&amp;#10;3. Conditions and Limitations&amp;#10;&amp;#10; &amp;#40;A&amp;#41; No Trademark License- This license does not grant you rights to use any contributors&amp;#8217; name, logo, or trademarks.&amp;#10;&amp;#10;&amp;#40;B&amp;#41; If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically.&amp;#10;&amp;#10;&amp;#40;C&amp;#41; If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software.&amp;#10;&amp;#10;&amp;#40;D&amp;#41; If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license.&amp;#10;&amp;#10;&amp;#40;E&amp;#41; The software is licensed &amp;#8220;as-is.&amp;#8221; You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement.&amp;#10;&amp;#10;&amp;#40;F&amp;#41; Platform Limitation- The licenses granted in sections 2&amp;#40;A&amp;#41; &amp;#38; 2&amp;#40;B&amp;#41; extend only to the software or derivative works that you create that run on a Microsoft Windows operating system product.&amp;#10;&amp;#10;MSDN CODE GALLERY BINARY LICENSE &amp;#10; &amp;#10;You are free to install, use, copy and distribute any number of copies of the software, in object code form, provided that you retain&amp;#58;&amp;#10; &amp;#10;&amp;#8226; all copyright, patent, trademark, and attribution notices that are present in the software, &amp;#10;&amp;#8226; this list of conditions, and &amp;#10;&amp;#8226; the following disclaimer in the documentation and&amp;#47;or other materials provided with the software. &amp;#10; &amp;#10;The software is licensed &amp;#8220;as-is.&amp;#8221; You bear the risk of using it.  No express warranties, guarantees or conditions are provided. To the extent permitted under your local laws, the implied warranties of merchantability, fitness for a particular purpose and non-infringement are excluded.  &amp;#10; &amp;#10;This license does not grant you any rights to use any other party&amp;#8217;s name, logo, or trademarks. All rights not specifically granted herein are reserved. &amp;#10; &amp;#10;v061708&amp;#10; &amp;#10; &amp;#10;CREATIVE COMMONS ATTRIBUTION 3.0 LICENSE&amp;#10; &amp;#10;THE WORK &amp;#40;AS DEFINED BELOW&amp;#41; IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE &amp;#40;&amp;#34;CCPL&amp;#34; OR &amp;#34;LICENSE&amp;#34;&amp;#41;. THE WORK IS PROTECTED BY COPYRIGHT AND&amp;#47;OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.&amp;#10; &amp;#10;BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS.&amp;#10; &amp;#10;1. Definitions&amp;#10; &amp;#10;a. &amp;#34;Collective Work&amp;#34; means a work, such as a periodical issue, anthology or encyclopedia, in which the Work in its entirety in unmodified form, along with one or more other contributions, constituting separate and independent works in themselves, are assembled into a collective whole. A work that constitutes a Collective Work will not be considered a Derivative Work &amp;#40;as defined below&amp;#41; for the purposes of this License. &amp;#10; &amp;#10;b. &amp;#34;Derivative Work&amp;#34; means a work based upon the Work or upon the Work and other pre-existing works, such as a translation, musical arrangement, dramatization, fictionalization, motion picture version, sound recording, art reproduction, abridgment, condensation, or any other form in which the Work may be recast, transformed, or adapted, except that a work that constitutes a Collective Work will not be considered a Derivative Work for the purpose of this License. For the avoidance of doubt, where the Work is a musical composition or sound recording, the synchronization of the Work in timed-relation with a moving image &amp;#40;&amp;#34;synching&amp;#34;&amp;#41; will be considered a Derivative Work for the purpose of this License. &amp;#10; &amp;#10;c. &amp;#34;Licensor&amp;#34; means the individual, individuals, entity or entities that offers the Work under the terms of this License. &amp;#10; &amp;#10;d. &amp;#34;Original Author&amp;#34; means the individual, individuals, entity or entities who created the Work. &amp;#10; &amp;#10;e. &amp;#34;Work&amp;#34; means the copyrightable work of authorship offered under the terms of this License. &amp;#10; &amp;#10;f. &amp;#34;You&amp;#34; means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation. &amp;#10; &amp;#10;2. Fair Use Rights. Nothing in this license is intended to reduce, limit, or restrict any rights arising from fair use, first sale or other limitations on the exclusive rights of the copyright owner under copyright law or other applicable laws.&amp;#10; &amp;#10;3. License Grant. Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual &amp;#40;for the duration of the applicable copyright&amp;#41; license to exercise the rights in the Work as stated below&amp;#58;&amp;#10; &amp;#10;a. to reproduce the Work, to incorporate the Work into one or more Collective Works, and to reproduce the Work as incorporated in the Collective Works&amp;#59; &amp;#10; &amp;#10;b. to create and reproduce Derivative Works provided that any such Derivative Work, including any translation in any medium, takes reasonable steps to clearly label, demarcate or otherwise identify that changes were made to the original Work. For example, a translation could be marked &amp;#34;The original work was translated from English to Spanish,&amp;#34; or a modification could indicate &amp;#34;The original work has been modified.&amp;#34;&amp;#59;&amp;#59; &amp;#10; &amp;#10;c. to distribute copies or phonorecords of, display publicly, perform publicly, and perform publicly by means of a digital audio transmission the Work including as incorporated in Collective Works&amp;#59; &amp;#10; &amp;#10;d. to distribute copies or phonorecords of, display publicly, perform publicly, and perform publicly by means of a digital audio transmission Derivative Works. &amp;#10; &amp;#10;e. For the avoidance of doubt, where the Work is a musical composition&amp;#58;&amp;#10; &amp;#10;i. Performance Royalties Under Blanket Licenses. Licensor waives the exclusive right to collect, whether individually or, in the event that Licensor is a member of a performance rights society &amp;#40;e.g. ASCAP, BMI, SESAC&amp;#41;, via that society, royalties for the public performance or public digital performance &amp;#40;e.g. webcast&amp;#41; of the Work. &amp;#10; &amp;#10;ii. Mechanical Rights and Statutory Royalties. Licensor waives the exclusive right to collect, whether individually or via a music rights agency or designated agent &amp;#40;e.g. Harry Fox Agency&amp;#41;, royalties for any phonorecord You create from the Work &amp;#40;&amp;#34;cover version&amp;#34;&amp;#41; and distribute, subject to the compulsory license created by 17 USC Section 115 of the US Copyright Act &amp;#40;or the equivalent in other jurisdictions&amp;#41;. &amp;#10; &amp;#10;f. Webcasting Rights and Statutory Royalties. For the avoidance of doubt, where the Work is a sound recording, Licensor waives the exclusive right to collect, whether individually or via a performance-rights society &amp;#40;e.g. SoundExchange&amp;#41;, royalties for the public digital performance &amp;#40;e.g. webcast&amp;#41; of the Work, subject to the compulsory license created by 17 USC Section 114 of the US Copyright Act &amp;#40;or the equivalent in other jurisdictions&amp;#41;. &amp;#10; &amp;#10;The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats. All rights not expressly granted by Licensor are hereby reserved.&amp;#10; &amp;#10;4. Restrictions. The license granted in Section 3 above is expressly made subject to and limited by the following restrictions&amp;#58;&amp;#10; &amp;#10;a. You may distribute, publicly display, publicly perform, or publicly digitally perform the Work only under the terms of this License, and You must include a copy of, or the Uniform Resource Identifier for, this License with every copy or phonorecord of the Work You distribute, publicly display, publicly perform, or publicly digitally perform. You may not offer or impose any terms on the Work that restrict the terms of this License or the ability of a recipient of the Work to exercise the rights granted to that recipient under the terms of the License. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties. When You distribute, publicly display, publicly perform, or publicly digitally perform the Work, You may not impose any technological measures on the Work that restrict the ability of a recipient of the Work from You to exercise the rights granted to that recipient under the terms of the License. This Section 4&amp;#40;a&amp;#41; applies to the Work as incorporated in a Collective Work, but this does not require the Collective Work apart from the Work itself to be made subject to the terms of this License. If You create a Collective Work, upon notice from any Licensor You must, to the extent practicable, remove from the Collective Work any credit as required by Section 4&amp;#40;b&amp;#41;, as requested. If You create a Derivative Work, upon notice from any Licensor You must, to the extent practicable, remove from the Derivative Work any credit as required by Section 4&amp;#40;b&amp;#41;, as requested. &amp;#10; &amp;#10;b. If You distribute, publicly display, publicly perform, or publicly digitally perform the Work &amp;#40;as defined in Section 1 above&amp;#41; or any Derivative Works &amp;#40;as defined in Section 1 above&amp;#41; or Collective Works &amp;#40;as defined in Section 1 above&amp;#41;, You must, unless a request has been made pursuant to Section 4&amp;#40;a&amp;#41;, keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing&amp;#58; &amp;#40;i&amp;#41; the name of the Original Author &amp;#40;or pseudonym, if applicable&amp;#41; if supplied, and&amp;#47;or &amp;#40;ii&amp;#41; if the Original Author and&amp;#47;or Licensor designate another party or parties &amp;#40;e.g. a sponsor institute, publishing entity, journal&amp;#41; for attribution &amp;#40;&amp;#34;Attribution Parties&amp;#34;&amp;#41; in Licensor&amp;#39;s copyright notice, terms of service or by other reasonable means, the name of such party or parties&amp;#59; the title of the Work if supplied&amp;#59; to the extent reasonably practicable, the Uniform Resource Identifier, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work&amp;#59; and, consistent with Section 3&amp;#40;b&amp;#41; in the case of a Derivative Work, a credit identifying the use of the Work in the Derivative Work &amp;#40;e.g., &amp;#34;French translation of the Work by Original Author,&amp;#34; or &amp;#34;Screenplay based on original Work by Original Author&amp;#34;&amp;#41;. The credit required by this Section 4&amp;#40;b&amp;#41; may be implemented in any reasonable manner&amp;#59; provided, however, that in the case of a Derivative Work or Collective Work, at a minimum such credit will appear, if a credit for all contributing authors of the Derivative Work or Collective Work appears, then as part of these credits and in a manner at least as prominent as the credits for the other contributing authors. For the avoidance of doubt, You may only use the credit required by this Section for the purpose of attribution in the manner set out above and, by exercising Your rights under this License, You may not implicitly or explicitly assert or imply any connection with, sponsorship or endorsement by the Original Author, Licensor and&amp;#47;or Attribution Parties, as appropriate, of You or Your use of the Work, without the separate, express prior written permission of the Original Author, Licensor and&amp;#47;or Attribution Parties. &amp;#10; &amp;#10;5. Representations, Warranties and Disclaimer&amp;#10; &amp;#10;UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR OFFERS THE WORK AS-IS AND ONLY TO THE EXTENT OF ANY RIGHTS HELD IN THE LICENSED WORK BY THE LICENSOR. THE LICENSOR MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MARKETABILITY, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU.&amp;#10; &amp;#10;6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.&amp;#10; &amp;#10;7. Termination&amp;#10; &amp;#10;a. This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Derivative Works &amp;#40;as defined in Section 1 above&amp;#41; or Collective Works &amp;#40;as defined in Section 1 above&amp;#41; from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License. &amp;#10; &amp;#10;b. Subject to the above terms and conditions, the license granted here is perpetual &amp;#40;for the duration of the applicable copyright in the Work&amp;#41;. Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time&amp;#59; provided, however that any such election will not serve to withdraw this License &amp;#40;or any other license that has been, or is required to be, granted under the terms of this License&amp;#41;, and this License will continue in full force and effect unless terminated as stated above. &amp;#10; &amp;#10;8. Miscellaneous&amp;#10; &amp;#10;a. Each time You distribute or publicly digitally perform the Work &amp;#40;as defined in Section 1 above&amp;#41; or a Collective Work &amp;#40;as defined in Section 1 above&amp;#41;, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License. &amp;#10; &amp;#10;b. Each time You distribute or publicly digitally perform a Derivative Work, Licensor offers to the recipient a license to the original Work on the same terms and conditions as the license granted to You under this License. &amp;#10; &amp;#10;c. If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable. &amp;#10; &amp;#10;d. No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent. &amp;#10; &amp;#10;e. This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You.</description><author></author><pubDate>Thu, 18 Jun 2009 23:17:08 GMT</pubDate><guid isPermaLink="false">Project License Changed 20090618P</guid></item><item><title>RELEASED: FabrikamShipping 1.0 (Jun 16, 2009)</title><link>http://code.msdn.microsoft.com/FabrikamShipping/Release/ProjectReleases.aspx?ReleaseId=2846</link><description></description><author></author><pubDate>Tue, 16 Jun 2009 17:49:00 GMT</pubDate><guid isPermaLink="false">RELEASED: FabrikamShipping 1.0 (Jun 16, 2009) 20090616P</guid></item><item><title>CREATED RELEASE: FabrikamShipping 1.0 (Jun 16, 2009)</title><link>http://code.msdn.microsoft.com/FabrikamShipping/Release/ProjectReleases.aspx?ReleaseId=2846</link><description></description><author></author><pubDate>Tue, 16 Jun 2009 17:49:00 GMT</pubDate><guid isPermaLink="false">CREATED RELEASE: FabrikamShipping 1.0 (Jun 16, 2009) 20090616P</guid></item><item><title>UPDATED WIKI: Home</title><link>http://code.msdn.microsoft.com/FabrikamShipping/Wiki/View.aspx?title=Home&amp;version=6</link><description>&lt;div class="wikidoc"&gt;
&lt;img src="http://code.msdn.microsoft.com/Project/Download/FileDownload.aspx?ProjectName=FabrikamShipping&amp;amp;DownloadId=6181" alt="dpelog.png" /&gt;&lt;br /&gt;&lt;h1&gt;
Overview
&lt;/h1&gt; &lt;br /&gt;FabrikamShipping is a semi-realistic sample web application that demonstrates how to use the &lt;b&gt;Geneva Framework&lt;/b&gt; for authentication, authorization and identity driven customization for a web frontend and a services backend. Its main goal is to show how to implement common tasks and features in web applications, combining the techniques presented separately in other technology learning material such as the &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=118C3588-9070-426A-B655-6CEC0A92C10B&amp;amp;displaylang=en" class="externalLink"&gt;Geneva Framework SDK&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; and the &lt;a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=c3e315fa-94e2-4028-99cb-904369f177c0" class="externalLink"&gt;Identity Developer Training Kit&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;. &lt;br /&gt; &lt;br /&gt;Note that while all efforts have been made for following best practices whenever possible, FabrikamShipping is NOT a reference implementation since it is designed for readability and for making as clear as possible for the reader to understand what is happening, as opposed to efficiency and maintainability. You should NOT use FabrikamShipping code in production.&lt;br /&gt; &lt;br /&gt;&lt;h1&gt;
The FabrikamShipping Scenario
&lt;/h1&gt; &lt;br /&gt;&lt;img src="http://code.msdn.microsoft.com/Project/Download/FileDownload.aspx?ProjectName=FabrikamShipping&amp;amp;DownloadId=6182" alt="scenario.png" /&gt;&lt;br /&gt;&lt;i&gt;FabrikamShipping’s main actors&lt;/i&gt;&lt;br /&gt; &lt;br /&gt;The FabrikamShipping scenario has been originally designed as part of an end-to-end demo for PDC 2008 (video recording available at &lt;a href="http://channel9.msdn.com/pdc2008/BB11/" class="externalLink"&gt;http://channel9.msdn.com/pdc2008/BB11/&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;, from 31” on). While the general narrative remains largely unchanged, this example has been adapted to be a standalone web solution that you can install and examine on your machine without the need for virtual machines, services subscription or even internet connectivity.&lt;br /&gt; &lt;br /&gt;Fabrikam is an ISV that sells S+S solutions to business customers. FabrikamShipping is one of such solutions: it is a web application that allows users to ship packages. Shipments are created by entering details about sender and intended recipient. Once a shipment has been created, it will go through a workflow which represents the various shipment phases (pickup, package, transit, delivery); every phase will allow the user to perform specific actions, such as cancelling the shipment or rerouting to a different address.&lt;br /&gt; &lt;br /&gt;Adatum Corporation is a customer of Fabrikam, and subscribed to the FabrikamShipping application. John and Mary work for Adatum, and routinely use FabrikamShipping. John handles logistic in Manufacturing, while Mary is a manager: their different positions in the company translate in different privileges when using the application.&lt;br /&gt; &lt;br /&gt;&lt;h1&gt;
Implementation Details
&lt;/h1&gt; &lt;br /&gt; &lt;br /&gt;&lt;img src="http://code.msdn.microsoft.com/Project/Download/FileDownload.aspx?ProjectName=FabrikamShipping&amp;amp;DownloadId=6183" alt="implementation.png" /&gt;&lt;br /&gt;&lt;i&gt;FabrikamShipping’s Architecture&lt;/i&gt;&lt;br /&gt; &lt;br /&gt;FabrikamShipping is a classic web application, which authenticates its users via passive federation. &lt;br /&gt; &lt;br /&gt;The example includes a mock identity provider, www.adatumcorporation.com, which is a light customization of the default development STS template project provided with the beta 2 of the Geneva Framework. Since the solution is designed to be able to run from a single machine, we make the STS available via HTTPS on a custom IIS binding (on port 8081) and we provide opportune entry on the local HOST file.&lt;br /&gt; &lt;br /&gt;The main application, https://www.fabrikamshipping.com:8082/FabrikamShipping/, is configured in a similar way and it is set to accept tokens directly from Adatum.&lt;br /&gt; &lt;br /&gt;Note: In a more realistic scenario, Fabrikam would have a resource STS that would be used to maintain the relationship with Adatum and all the other federated partners, and where any claims transformation that may be need would take place. Every Fabrikam applications, including FabrikamShipping, would then trust the resource STS instead of having to handle the relationship with the federated partner directly.&lt;br /&gt;In this sample we did not feature a resource STS at this level mainly because we wanted to keep thing simple and maintain smooth demo flow: there is a single application, that may even be running a hoster; there is a single federated partner in the picture; and for this application there is no need for claims transformation at the presentation layer. Unless you fall exactly in this category, there is a very high probability that your scenarios will indeed benefit from trusting your own resource STS rather than the partner directly.&lt;br /&gt; &lt;br /&gt;All FabrikamShipping business logic lives in a set of WCF services. The presentation layer invokes the services using a delegation mechanism: the access privileges are decided for every service call on the basis of the current web application’s user, as opposed to relying on trusted subsystem or full website impersonation approaches. The services are configured to accept tokens from an internal STS with ActAs capabilities: the STS is in turn invoked by the presentation layer’s code-behind with the token of the original user.&lt;br /&gt; &lt;br /&gt;&lt;h2&gt;
The Visual Studio Solution: What to Look For
&lt;/h2&gt; &lt;br /&gt;&lt;img src="http://code.msdn.microsoft.com/Project/Download/FileDownload.aspx?ProjectName=FabrikamShipping&amp;amp;DownloadId=6184" alt="vssol.png" /&gt;&lt;br /&gt;&lt;i&gt;FabrikamShipping solution structure&lt;/i&gt;&lt;br /&gt; &lt;br /&gt;The Visual Studio solution is pretty simple, and has been organized in a way that surfaces the main entities in the architecture and their component. At a glance, those are the projects and what to look from the identity management point of view:&lt;br /&gt; &lt;br /&gt;&lt;ul&gt;
&lt;li&gt;The Adatum folder contains only the STS subfolder with our mock identity provider, the web site http://www.adatumcorporation.com/FederationPassive/. All the identity content here is a mild customization of the default development STS offered by Geneva Framework Beta2 &lt;/li&gt;&lt;li&gt;The Fabrikam folder contains the bulk of the sample. The BackEnd subfolder contains all the projects that constitute the business logic of the sample&lt;/li&gt;&lt;ul&gt;
&lt;li&gt;FabrikamShipping.Services.Contracts is a class library containing all the contract definitions for the services. No identity code here.&lt;/li&gt;&lt;li&gt;FabrikamShipping.Services.Host is the web application that hosts the services, which are all message-activated. The web.config shows how to configure the ClaimsAuthorizationModule, use the ConfigureServiceHostBehaviorExtensionElement for configuring WCF services for using the Geneva Framework, and assign policies via custom claimsAuthorizationManager class.The App_Code folder contains the definition of the custom claimsAuthorizationManager class, substantially the same sample found in the SDK.&lt;/li&gt;&lt;li&gt;FabrikamShipping.Services is a class library containing the services implementations. No identity code here.&lt;/li&gt;&lt;li&gt;FabrikamShipping.Data is a class library containing the data model for shipments, customers and all the entities used by the sample. No identity code here.&lt;/li&gt;
&lt;/ul&gt;&lt;li&gt;The STS folder contains the internal STS.&lt;/li&gt;&lt;ul&gt;
&lt;li&gt;FabrikamShipping.RPSts is the web application which contains the ActAs STS which issues tokens for the frontend to invoke the backend services.The web.config shows how to configure an active STS secured via X509 certificate; it also demonstrates how to use a custom X509SecurityTokenHandler class (defined in SimpleX509SecurityTokenHandler.cs, integrated by SimpleCertificateValidator.cs) for defining the list of acceptable certificates.The ST implementation in ActAsSecurityTokenService.cs, and the method GetOutputClaimsIdentity in particular, demonstrates how to drive issuance decisions on the basis of ActAs tokens&lt;/li&gt;
&lt;/ul&gt;&lt;li&gt;The FrontEnd folder contains the main web application.&lt;/li&gt;&lt;ul&gt;
&lt;li&gt;http://www.fabrikamshipping.com/FabrikamShipping/ is the website of the main application.The web.config contains the classic settings that are the output of the federation wizard (or fedutil) when configuring a website to accept tokens from an identity provider. Furthermore, the web.config contains the binding that is needed for requesting a token from the ActAs STS.The global.asax, and specifically the Session&lt;i&gt;start handler, demonstrates how to use the token obtained from the identity provider as an ActAs token with WSTrustClient for invoking our internal ActAs STS. The resulting token is then stored in the HTTP session, where it will be available whenever the application will need to call a backend service (a real application may need to find a more solid solution for maintaining session state).The App&lt;/i&gt;Code/Clients folder contains utility classes for invoking WCF services by injecting in the call an issued token already in our possession: in our case, this will be the delegated token we stored in the HTTP session at the time of global.asax’s session_start execution.Most aspx pages will take advantage of IClaimsIdentity in the usual way for accessing claims from the identity provider; the calls to the backend services will be performed by taking advantage of the utility classes mentioned above&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h2&gt;
The Solution in IIS
&lt;/h2&gt; &lt;br /&gt;&lt;img src="http://code.msdn.microsoft.com/Project/Download/FileDownload.aspx?ProjectName=FabrikamShipping&amp;amp;DownloadId=6185" alt="iis.png" /&gt;&lt;br /&gt;&lt;i&gt;FabrikamShipping structure in IIS&lt;/i&gt;&lt;br /&gt; &lt;br /&gt;&lt;ul&gt;
&lt;li&gt;The structure that emerges in IIS matches the solution description above. Note that &lt;/li&gt;&lt;li&gt;Both websites introduce their own SSL bindings (8081 for Adatum and 8082 for Fabrikam) &lt;/li&gt;&lt;li&gt;The SSL certificates are self-signed, and configured as part of the overall setup script &lt;/li&gt;&lt;li&gt;In order to preserve your current settings, all web applications in the FabrikamShipping sample make use of a custom application pool, FabrikamShippingAppPool, which holds all the necessary permissions for accessing the private keys associated to the sample certificates above &lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h1&gt;
Summary
&lt;/h1&gt; &lt;br /&gt;FabrikamShipping is a learning tool designed for you to observe, take apart and experiment with Geneva Framework and claims based identity. We tried to make it somewhat realistic in order to hint to the business value and to the solutions to some of the most common challenges you need to address when developing a web application; at the same time, we tried to keep things simple and to make sure you always know what is going on and which part does which function. We hope we managed to strike the right balance, and that FabrikamShipping will help you to enjoy the benefits of claims-based access. More details will be posted on &lt;a href="http://channel9.msdn.com/identity/" class="externalLink"&gt;http://channel9.msdn.com/identity/&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; and &lt;a href="http://blogs.msdn.com/vbertocci/" class="externalLink"&gt;http://blogs.msdn.com/vbertocci/&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;</description><author>Vittorio</author><pubDate>Mon, 15 Jun 2009 22:02:12 GMT</pubDate><guid isPermaLink="false">UPDATED WIKI: Home 20090615P</guid></item><item><title>UPDATED WIKI: Home</title><link>http://code.msdn.microsoft.com/FabrikamShipping/Wiki/View.aspx?title=Home&amp;version=5</link><description>&lt;div class="wikidoc"&gt;
&lt;img src="http://code.msdn.microsoft.com/Project/Download/FileDownload.aspx?ProjectName=FabrikamShipping&amp;amp;DownloadId=6181" alt="dpelog.png" /&gt;&lt;br /&gt;&lt;h1&gt;
Overview
&lt;/h1&gt; &lt;br /&gt;FabrikamShipping is a semi-realistic sample web application that demonstrates how to use the &lt;b&gt;Geneva Framework&lt;/b&gt; for authentication, authorization and identity driven customization for a web frontend and a services backend. Its main goal is to show how to implement common tasks and features in web applications, combining the techniques presented separately in other technology learning material such as the &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=118C3588-9070-426A-B655-6CEC0A92C10B&amp;amp;displaylang=en" class="externalLink"&gt;Geneva Framework SDK&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; and the &lt;a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=c3e315fa-94e2-4028-99cb-904369f177c0" class="externalLink"&gt;Identity Developer Training Kit&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;. &lt;br /&gt; &lt;br /&gt;Note that while all efforts have been made for following best practices whenever possible, FabrikamShipping is NOT a reference implementation since it is designed for readability and for making as clear as possible for the reader to understand what is happening, as opposed to efficiency and maintainability. You should NOT use FabrikamShipping code in production.&lt;br /&gt; &lt;br /&gt;&lt;h1&gt;
The FabrikamShipping Scenario
&lt;/h1&gt; &lt;br /&gt;&lt;img src="http://code.msdn.microsoft.com/Project/Download/FileDownload.aspx?ProjectName=FabrikamShipping&amp;amp;DownloadId=6182" alt="scenario.png" /&gt;&lt;br /&gt;&lt;i&gt;FabrikamShipping’s main actors&lt;/i&gt;&lt;br /&gt; &lt;br /&gt;The FabrikamShipping scenario has been originally designed as part of an end-to-end demo for PDC 2008 (video recording available at &lt;a href="http://channel9.msdn.com/pdc2008/BB11/" class="externalLink"&gt;http://channel9.msdn.com/pdc2008/BB11/&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;, from 31” on). While the general narrative remains largely unchanged, this example has been adapted to be a standalone web solution that you can install and examine on your machine without the need for virtual machines, services subscription or even internet connectivity.&lt;br /&gt; &lt;br /&gt;Fabrikam is an ISV that sells S+S solutions to business customers. FabrikamShipping is one of such solutions: it is a web application that allows users to ship packages. Shipments are created by entering details about sender and intended recipient. Once a shipment has been created, it will go through a workflow which represents the various shipment phases (pickup, package, transit, delivery); every phase will allow the user to perform specific actions, such as cancelling the shipment or rerouting to a different address.&lt;br /&gt; &lt;br /&gt;Adatum Corporation is a customer of Fabrikam, and subscribed to the FabrikamShipping application. John and Mary work for Adatum, and routinely use FabrikamShipping. John handles logistic in Manufacturing, while Mary is a manager: their different positions in the company translate in different privileges when using the application.&lt;br /&gt; &lt;br /&gt;&lt;h1&gt;
Implementation Details
&lt;/h1&gt; &lt;br /&gt; &lt;br /&gt;&lt;img src="http://code.msdn.microsoft.com/Project/Download/FileDownload.aspx?ProjectName=FabrikamShipping&amp;amp;DownloadId=6183" alt="implementation.png" /&gt;&lt;br /&gt;&lt;i&gt;FabrikamShipping’s Architecture&lt;/i&gt;&lt;br /&gt; &lt;br /&gt;FabrikamShipping is a classic web application, which authenticates its users via passive federation. &lt;br /&gt; &lt;br /&gt;The example includes a mock identity provider, www.adatumcorporation.com, which is a light customization of the default development STS template project provided with the beta 2 of the Geneva Framework. Since the solution is designed to be able to run from a single machine, we make the STS available via HTTPS on a custom IIS binding (on port 8081) and we provide opportune entry on the local HOST file.&lt;br /&gt; &lt;br /&gt;The main application, https://www.fabrikamshipping.com:8082/FabrikamShipping/, is configured in a similar way and it is set to accept tokens directly from Adatum.&lt;br /&gt; &lt;br /&gt;Note: In a more realistic scenario, Fabrikam would have a resource STS that would be used to maintain the relationship with Adatum and all the other federated partners, and where any claims transformation that may be need would take place. Every Fabrikam applications, including FabrikamShipping, would then trust the resource STS instead of having to handle the relationship with the federated partner directly.&lt;br /&gt;In this sample we did not feature a resource STS at this level mainly because we wanted to keep thing simple and maintain smooth demo flow: there is a single application, that may even be running a hoster; there is a single federated partner in the picture; and for this application there is no need for claims transformation at the presentation layer. Unless you fall exactly in this category, there is a very high probability that your scenarios will indeed benefit from trusting your own resource STS rather than the partner directly.&lt;br /&gt; &lt;br /&gt;All FabrikamShipping business logic lives in a set of WCF services. The presentation layer invokes the services using a delegation mechanism: the access privileges are decided for every service call on the basis of the current web application’s user, as opposed to relying on trusted subsystem or full website impersonation approaches. The services are configured to accept tokens from an internal STS with ActAs capabilities: the STS is in turn invoked by the presentation layer’s code-behind with the token of the original user.&lt;br /&gt; &lt;br /&gt;&lt;h2&gt;
The Visual Studio Solution: What to Look For
&lt;/h2&gt; &lt;br /&gt;&lt;img src="http://code.msdn.microsoft.com/Project/Download/FileDownload.aspx?ProjectName=FabrikamShipping&amp;amp;DownloadId=6184" alt="vssol.png" /&gt;&lt;br /&gt;&lt;i&gt;FabrikamShipping solution structure&lt;/i&gt;&lt;br /&gt; &lt;br /&gt;The Visual Studio solution is pretty simple, and has been organized in a way that surfaces the main entities in the architecture and their component. At a glance, those are the projects and what to look from the identity management point of view:&lt;br /&gt; &lt;br /&gt;&lt;ul&gt;
&lt;li&gt;The Adatum folder contains only the STS subfolder with our mock identity provider, the web site http://www.adatumcorporation.com/FederationPassive/. All the identity content here is a mild customization of the default development STS offered by Geneva Framework Beta2 &lt;/li&gt;&lt;li&gt;The Fabrikam folder contains the bulk of the sample. The BackEnd subfolder contains all the projects that constitute the business logic of the sample&lt;/li&gt;&lt;ul&gt;
&lt;li&gt;FabrikamShipping.Services.Contracts is a class library containing all the contract definitions for the services. No identity code here.&lt;/li&gt;&lt;li&gt;FabrikamShipping.Services.Host is the web application that hosts the services, which are all message-activated. The web.config shows how to configure the ClaimsAuthorizationModule, use the ConfigureServiceHostBehaviorExtensionElement for configuring WCF services for using the Geneva Framework, and assign policies via custom claimsAuthorizationManager class.The App_Code folder contains the definition of the custom claimsAuthorizationManager class, substantially the same sample found in the SDK.&lt;/li&gt;&lt;li&gt;FabrikamShipping.Services is a class library containing the services implementations. No identity code here.&lt;/li&gt;&lt;li&gt;FabrikamShipping.Data is a class library containing the data model for shipments, customers and all the entities used by the sample. No identity code here.&lt;/li&gt;
&lt;/ul&gt;&lt;li&gt;The STS folder contains the internal STS.&lt;/li&gt;&lt;ul&gt;
&lt;li&gt;FabrikamShipping.RPSts is the web application which contains the ActAs STS which issues tokens for the frontend to invoke the backend services.The web.config shows how to configure an active STS secured via X509 certificate; it also demonstrates how to use a custom X509SecurityTokenHandler class (defined in SimpleX509SecurityTokenHandler.cs, integrated by SimpleCertificateValidator.cs) for defining the list of acceptable certificates.The ST implementation in ActAsSecurityTokenService.cs, and the method GetOutputClaimsIdentity in particular, demonstrates how to drive issuance decisions on the basis of ActAs tokens&lt;/li&gt;
&lt;/ul&gt;&lt;li&gt;The FrontEnd folder contains the main web application.&lt;/li&gt;&lt;ul&gt;
&lt;li&gt;http://www.fabrikamshipping.com/FabrikamShipping/ is the website of the main application.The web.config contains the classic settings that are the output of the federation wizard (or fedutil) when configuring a website to accept tokens from an identity provider. Furthermore, the web.config contains the binding that is needed for requesting a token from the ActAs STS.The global.asax, and specifically the Session&lt;i&gt;start handler, demonstrates how to use the token obtained from the identity provider as an ActAs token with WSTrustClient for invoking our internal ActAs STS. The resulting token is then stored in the HTTP session, where it will be available whenever the application will need to call a backend service (a real application may need to find a more solid solution for maintaining session state).The App&lt;/i&gt;Code/Clients folder contains utility classes for invoking WCF services by injecting in the call an issued token already in our possession: in our case, this will be the delegated token we stored in the HTTP session at the time of global.asax’s session_start execution.Most aspx pages will take advantage of IClaimsIdentity in the usual way for accessing claims from the identity provider; the calls to the backend services will be performed by taking advantage of the utility classes mentioned above&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h2&gt;
The Solution in IIS
&lt;/h2&gt; &lt;br /&gt;&lt;img src="http://code.msdn.microsoft.com/Project/Download/FileDownload.aspx?ProjectName=FabrikamShipping&amp;amp;DownloadId=6185" alt="iis.png" /&gt;&lt;br /&gt;FabrikamShipping structure in IIS &lt;br /&gt; &lt;br /&gt;&lt;ul&gt;
&lt;li&gt;The structure that emerges in IIS matches the solution description above. Note that &lt;/li&gt;&lt;li&gt;Both websites introduce their own SSL bindings (8081 for Adatum and 8082 for Fabrikam) &lt;/li&gt;&lt;li&gt;The SSL certificates are self-signed, and configured as part of the overall setup script &lt;/li&gt;&lt;li&gt;In order to preserve your current settings, all web applications in the FabrikamShipping sample make use of a custom application pool, FabrikamShippingAppPool, which holds all the necessary permissions for accessing the private keys associated to the sample certificates above &lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h1&gt;
Summary
&lt;/h1&gt; &lt;br /&gt;FabrikamShipping is a learning tool designed for you to observe, take apart and experiment with Geneva Framework and claims based identity. We tried to make it somewhat realistic in order to hint to the business value and to the solutions to some of the most common challenges you need to address when developing a web application; at the same time, we tried to keep things simple and to make sure you always know what is going on and which part does which function. We hope we managed to strike the right balance, and that FabrikamShipping will help you to enjoy the benefits of claims-based access. More details will be posted on &lt;a href="http://channel9.msdn.com/identity/" class="externalLink"&gt;http://channel9.msdn.com/identity/&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; and &lt;a href="http://blogs.msdn.com/vbertocci/" class="externalLink"&gt;http://blogs.msdn.com/vbertocci/&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;</description><author>Vittorio</author><pubDate>Mon, 15 Jun 2009 22:01:25 GMT</pubDate><guid isPermaLink="false">UPDATED WIKI: Home 20090615P</guid></item><item><title>UPDATED WIKI: Home</title><link>http://code.msdn.microsoft.com/FabrikamShipping/Wiki/View.aspx?title=Home&amp;version=4</link><description>&lt;div class="wikidoc"&gt;
&lt;img src="http://code.msdn.microsoft.com/Project/Download/FileDownload.aspx?ProjectName=FabrikamShipping&amp;amp;DownloadId=6181" alt="dpelog.png" /&gt;&lt;br /&gt;&lt;h1&gt;
Overview
&lt;/h1&gt; &lt;br /&gt;FabrikamShipping is a semi-realistic sample web application that demonstrates how to use the &lt;b&gt;Geneva Framework&lt;/b&gt; for authentication, authorization and identity driven customization for a web frontend and a services backend. Its main goal is to show how to implement common tasks and features in web applications, combining the techniques presented separately in other technology learning material such as the &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=118C3588-9070-426A-B655-6CEC0A92C10B&amp;amp;displaylang=en" class="externalLink"&gt;Geneva Framework SDK&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; and the &lt;a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=c3e315fa-94e2-4028-99cb-904369f177c0" class="externalLink"&gt;Identity Developer Training Kit&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;. &lt;br /&gt; &lt;br /&gt;Note that while all efforts have been made for following best practices whenever possible, FabrikamShipping is NOT a reference implementation since it is designed for readability and for making as clear as possible for the reader to understand what is happening, as opposed to efficiency and maintainability. You should NOT use FabrikamShipping code in production.&lt;br /&gt; &lt;br /&gt;&lt;h1&gt;
The FabrikamShipping Scenario
&lt;/h1&gt; &lt;br /&gt;&lt;img src="http://code.msdn.microsoft.com/Project/Download/FileDownload.aspx?ProjectName=FabrikamShipping&amp;amp;DownloadId=6182" alt="scenario.png" /&gt;&lt;br /&gt;FabrikamShipping’s main actors &lt;br /&gt; &lt;br /&gt;The FabrikamShipping scenario has been originally designed as part of an end-to-end demo for PDC 2008 (video recording available at &lt;a href="http://channel9.msdn.com/pdc2008/BB11/" class="externalLink"&gt;http://channel9.msdn.com/pdc2008/BB11/&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;, from 31” on). While the general narrative remains largely unchanged, this example has been adapted to be a standalone web solution that you can install and examine on your machine without the need for virtual machines, services subscription or even internet connectivity.&lt;br /&gt; &lt;br /&gt;Fabrikam is an ISV that sells S+S solutions to business customers. FabrikamShipping is one of such solutions: it is a web application that allows users to ship packages. Shipments are created by entering details about sender and intended recipient. Once a shipment has been created, it will go through a workflow which represents the various shipment phases (pickup, package, transit, delivery); every phase will allow the user to perform specific actions, such as cancelling the shipment or rerouting to a different address.&lt;br /&gt; &lt;br /&gt;Adatum Corporation is a customer of Fabrikam, and subscribed to the FabrikamShipping application. John and Mary work for Adatum, and routinely use FabrikamShipping. John handles logistic in Manufacturing, while Mary is a manager: their different positions in the company translate in different privileges when using the application.&lt;br /&gt; &lt;br /&gt;&lt;h1&gt;
Implementation Details
&lt;/h1&gt; &lt;br /&gt; &lt;br /&gt;&lt;img src="http://code.msdn.microsoft.com/Project/Download/FileDownload.aspx?ProjectName=FabrikamShipping&amp;amp;DownloadId=6183" alt="implementation.png" /&gt;&lt;br /&gt;FabrikamShipping’s Architecture &lt;br /&gt; &lt;br /&gt;FabrikamShipping is a classic web application, which authenticates its users via passive federation. &lt;br /&gt; &lt;br /&gt;The example includes a mock identity provider, www.adatumcorporation.com, which is a light customization of the default development STS template project provided with the beta 2 of the Geneva Framework. Since the solution is designed to be able to run from a single machine, we make the STS available via HTTPS on a custom IIS binding (on port 8081) and we provide opportune entry on the local HOST file.&lt;br /&gt; &lt;br /&gt;The main application, https://www.fabrikamshipping.com:8082/FabrikamShipping/, is configured in a similar way and it is set to accept tokens directly from Adatum.&lt;br /&gt; &lt;br /&gt;Note: _In a more realistic scenario, Fabrikam would have a resource STS that would be used to maintain the relationship with Adatum and all the other federated partners, and where any claims transformation that may be need would take place. Every Fabrikam applications, including FabrikamShipping, would then trust the resource STS instead of having to handle the relationship with the federated partner directly.&lt;br /&gt;In this sample we did not feature a resource STS at this level mainly because we wanted to keep thing simple and maintain smooth demo flow: there is a single application, that may even be running a hoster; there is a single federated partner in the picture; and for this application there is no need for claims transformation at the presentation layer. Unless you fall exactly in this category, there is a very high probability that your scenarios will indeed benefit from trusting your own resource STS rather than the partner directly._&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;All FabrikamShipping business logic lives in a set of WCF services. The presentation layer invokes the services using a delegation mechanism: the access privileges are decided for every service call on the basis of the current web application’s user, as opposed to relying on trusted subsystem or full website impersonation approaches. The services are configured to accept tokens from an internal STS with ActAs capabilities: the STS is in turn invoked by the presentation layer’s code-behind with the token of the original user.&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;br /&gt;&lt;h2&gt;
The Visual Studio Solution: What to Look For
&lt;/h2&gt; &lt;br /&gt; &lt;br /&gt;&lt;span class="unresolved"&gt;Cannot resolve link: &lt;/span&gt;[image:vssol]&lt;br /&gt;FabrikamShipping solution structure &lt;br /&gt; &lt;br /&gt;The Visual Studio solution is pretty simple, and has been organized in a way that surfaces the main entities in the architecture and their component. At a glance, those are the projects and what to look from the identity management point of view:&lt;br /&gt; &lt;br /&gt;The Adatum folder contains only the STS subfolder with our mock identity provider, the web site http://www.adatumcorporation.com/FederationPassive/. All the identity content here is a mild customization of the default development STS offered by Geneva Framework Beta2 &lt;br /&gt;The Fabrikam folder contains the bulk of the sample&lt;br /&gt;The BackEnd subfolder contains all the projects that constitute the business logic of the sample&lt;br /&gt;FabrikamShipping.Services.Contracts is a class library containing all the contract definitions for the services. No identity code here.&lt;br /&gt;FabrikamShipping.Services.Host is the web application that hosts the services, which are all message-activated. The web.config shows how to configure the ClaimsAuthorizationModule, use the ConfigureServiceHostBehaviorExtensionElement for configuring WCF services for using the Geneva Framework, and assign policies via custom claimsAuthorizationManager class.The App_Code folder contains the definition of the custom claimsAuthorizationManager class, substantially the same sample found in the SDK.&lt;br /&gt;FabrikamShipping.Services is a class library containing the services implementations. No identity code here.&lt;br /&gt;FabrikamShipping.Data is a class library containing the data model for shipments, customers and all the entities used by the sample. No identity code here.&lt;br /&gt;The STS folder contains the internal STS.&lt;br /&gt;FabrikamShipping.RPSts is the web application which contains the ActAs STS which issues tokens for the frontend to invoke the backend services.The web.config shows how to configure an active STS secured via X509 certificate; it also demonstrates how to use a custom X509SecurityTokenHandler class (defined in SimpleX509SecurityTokenHandler.cs, integrated by SimpleCertificateValidator.cs) for defining the list of acceptable certificates.The ST implementation in ActAsSecurityTokenService.cs, and the method GetOutputClaimsIdentity in particular, demonstrates how to drive issuance decisions on the basis of ActAs tokens&lt;br /&gt;The FrontEnd folder contains the main web application.&lt;br /&gt;http://www.fabrikamshipping.com/FabrikamShipping/ is the website of the main application.The web.config contains the classic settings that are the output of the federation wizard (or fedutil) when configuring a website to accept tokens from an identity provider. Furthermore, the web.config contains the binding that is needed for requesting a token from the ActAs STS.The global.asax, and specifically the Session&lt;i&gt;start handler, demonstrates how to use the token obtained from the identity provider as an ActAs token with WSTrustClient for invoking our internal ActAs STS. The resulting token is then stored in the HTTP session, where it will be available whenever the application will need to call a backend service (a real application may need to find a more solid solution for maintaining session state).The App&lt;/i&gt;Code/Clients folder contains utility classes for invoking WCF services by injecting in the call an issued token already in our possession: in our case, this will be the delegated token we stored in the HTTP session at the time of global.asax’s session_start execution.Most aspx pages will take advantage of IClaimsIdentity in the usual way for accessing claims from the identity provider; the calls to the backend services will be performed by taking advantage of the utility classes mentioned above&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;&lt;h2&gt;
The Solution in IIS
&lt;/h2&gt; &lt;br /&gt;&lt;img src="http://code.msdn.microsoft.com/Project/Download/FileDownload.aspx?ProjectName=FabrikamShipping&amp;amp;DownloadId=6185" alt="iis.png" /&gt;&lt;br /&gt;FabrikamShipping structure in IIS &lt;br /&gt; &lt;br /&gt;&lt;ul&gt;
&lt;li&gt;The structure that emerges in IIS matches the solution description above. Note that &lt;/li&gt;&lt;li&gt;Both websites introduce their own SSL bindings (8081 for Adatum and 8082 for Fabrikam) &lt;/li&gt;&lt;li&gt;The SSL certificates are self-signed, and configured as part of the overall setup script &lt;/li&gt;&lt;li&gt;In order to preserve your current settings, all web applications in the FabrikamShipping sample make use of a custom application pool, FabrikamShippingAppPool, which holds all the necessary permissions for accessing the private keys associated to the sample certificates above &lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt; &lt;br /&gt; &lt;br /&gt;&lt;h1&gt;
Summary
&lt;/h1&gt; &lt;br /&gt;FabrikamShipping is a learning tool designed for you to observe, take apart and experiment with Geneva Framework and claims based identity. We tried to make it somewhat realistic in order to hint to the business value and to the solutions to some of the most common challenges you need to address when developing a web application; at the same time, we tried to keep things simple and to make sure you always know what is going on and which part does which function. We hope we managed to strike the right balance, and that FabrikamShipping will help you to enjoy the benefits of claims-based access. More details will be posted on &lt;a href="http://channel9.msdn.com/identity/" class="externalLink"&gt;http://channel9.msdn.com/identity/&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; and &lt;a href="http://blogs.msdn.com/vbertocci/" class="externalLink"&gt;http://blogs.msdn.com/vbertocci/&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;</description><author>Vittorio</author><pubDate>Mon, 15 Jun 2009 21:56:43 GMT</pubDate><guid isPermaLink="false">UPDATED WIKI: Home 20090615P</guid></item><item><title>UPDATED WIKI: Home</title><link>http://code.msdn.microsoft.com/FabrikamShipping/Wiki/View.aspx?title=Home&amp;version=3</link><description>&lt;div class="wikidoc"&gt;
&lt;img src="http://code.msdn.microsoft.com/Project/Download/FileDownload.aspx?ProjectName=FabrikamShipping&amp;amp;DownloadId=6180" alt="ef4a5067-1f99-4f8e-9af6-286ce8a3ef0c.png" /&gt;&lt;br /&gt;&lt;h1&gt;
Overview
&lt;/h1&gt; &lt;br /&gt;FabrikamShipping is a semi-realistic sample web application that demonstrates how to use the &lt;b&gt;Geneva Framework&lt;/b&gt; for authentication, authorization and identity driven customization for a web frontend and a services backend. Its main goal is to show how to implement common tasks and features in web applications, combining the techniques presented separately in other technology learning material such as the &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=118C3588-9070-426A-B655-6CEC0A92C10B&amp;amp;displaylang=en" class="externalLink"&gt;Geneva Framework SDK&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; and the &lt;a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=c3e315fa-94e2-4028-99cb-904369f177c0" class="externalLink"&gt;Identity Developer Training Kit&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;. &lt;br /&gt; &lt;br /&gt;Note that while all efforts have been made for following best practices whenever possible, FabrikamShipping is NOT a reference implementation since it is designed for readability and for making as clear as possible for the reader to understand what is happening, as opposed to efficiency and maintainability. You should NOT use FabrikamShipping code in production.&lt;br /&gt; &lt;br /&gt;&lt;h1&gt;
The FabrikamShipping Scenario
&lt;/h1&gt; &lt;br /&gt; &lt;br /&gt;Figure 1 &lt;br /&gt;FabrikamShipping’s main actors &lt;br /&gt; &lt;br /&gt;The FabrikamShipping scenario has been originally designed as part of an end-to-end demo for PDC 2008 (video recording available at http://channel9.msdn.com/pdc2008/BB11/, from 31” on). While the general narrative remains largely unchanged, this example has been adapted to be a standalone web solution that you can install and examine on your machine without the need for virtual machines, services subscription or even internet connectivity.&lt;br /&gt; &lt;br /&gt;Fabrikam is an ISV that sells S+S solutions to business customers. FabrikamShipping is one of such solutions: it is a web application that allows users to ship packages. Shipments are created by entering details about sender and intended recipient. Once a shipment has been created, it will go through a workflow which represents the various shipment phases (pickup, package, transit, delivery); every phase will allow the user to perform specific actions, such as cancelling the shipment or rerouting to a different address.&lt;br /&gt; &lt;br /&gt;Adatum Corporation is a customer of Fabrikam, and subscribed to the FabrikamShipping application. John and Mary work for Adatum, and routinely use FabrikamShipping. John handles logistic in Manufacturing, while Mary is a manager: their different positions in the company translate in different privileges when using the application.&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;br /&gt;A Brief Walkthrough&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;Let’s take a quick look at how to use the application, without worrying about how it works for now: we will take care of the implementation details in the next section.&lt;br /&gt; &lt;br /&gt;Pretend that you are John, and that you have a package to send. Open a browser and navigate to FabrikamShippings’ URI: https://www.fabrikamshipping.com:8082/FabrikamShipping/. &lt;br /&gt; &lt;br /&gt;Since you are not authenticated yet, FabrikamShipping redirects you to the Adatum STS:&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;br /&gt;Figure 2 &lt;br /&gt;Adatum’s STS UI &lt;br /&gt; &lt;br /&gt;Use the suggested credentials for John and hit Submit. You’ll land on FabrikamShipping’s main page:&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;br /&gt;Figure 3 &lt;br /&gt;The main page of FabrikamShipping &lt;br /&gt; &lt;br /&gt;Click on the New Shipment icon.&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;br /&gt;Figure 4 &lt;br /&gt;The new shipment screen &lt;br /&gt; &lt;br /&gt;As you can see, the Sender area is already populated with John’s data: this is thanks to the claims received directly from Adatum with the sign in token. For filling the Recipient form, click on “Search in CRM”; you will get a small dialog, from where you can pick a customer (here I’ll pick Dan Park).&lt;br /&gt; &lt;br /&gt;Click the green Submit button.&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;br /&gt;Figure 5 &lt;br /&gt;The new shipment confirmation screen &lt;br /&gt; &lt;br /&gt;Everything seems in order: click the Ship It! button.&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;br /&gt;Figure 6 &lt;br /&gt;The shipping label printing screen &lt;br /&gt; &lt;br /&gt;Our new shipment has been created! Here there is the label that, once printed, will have to be attached to the package we want to send.&lt;br /&gt; &lt;br /&gt;Let’s take a look at what happens when we want to modify our shipment. Click the Go to Home button.&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;br /&gt;Figure 7 &lt;br /&gt;The main screen now shows our new shipment for Dan &lt;br /&gt; &lt;br /&gt;The list of shipments now includes the new entry we just created. Let’s say that we want to reroute this shipment: click directly on the Dan Park entry.&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;br /&gt;Figure 8 &lt;br /&gt;The shipping workflow &lt;br /&gt; &lt;br /&gt;This page shows the shipment workflow: we are currently in the Pickup state.&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;Note: &lt;br /&gt;FabrikamShipping does not really provide any meaningful backend workflow logic, since the point of this sample is demonstrating identity capabilities rather than how to handle business processes. If for demo purposes you want to advance the state of the shipment, you can do so “manually” by clicking on a hidden button. If you hover the mouse pointer under the state label of the current stage (in this case the label “Running”) you’ll see that it changes into a hand: if you click, the workflow will advance one step. &lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;br /&gt;Click the Reroute Shipment button, change something and click on the Reroute button:&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;br /&gt;Figure 9 &lt;br /&gt;John cannot reroute existing shipments &lt;br /&gt; &lt;br /&gt;You will get an error: John does not have enough privileges for modifying existing shipments.&lt;br /&gt; &lt;br /&gt;Try to start over, this time using Mary’s credentials. Remember to use a different browser instance, otherwise the Adatum STS will recognize you as John and will issue you a token without even presenting you the credentials gathering UI.&lt;br /&gt; &lt;br /&gt;If you try to reroute a shipment, you will discover that you can do it without issues: this is because Mary belongs to the Managers group, and the system takes that into account when assigning privileges.&lt;br /&gt; &lt;br /&gt;In the next section we will see some details about what happens behind the scenes for making this possible.&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;br /&gt;Implementation Details&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;br /&gt;Figure 10 &lt;br /&gt;FabrikamShipping’s Architecture &lt;br /&gt; &lt;br /&gt;FabrikamShipping is a classic web application, which authenticates its users via passive federation. &lt;br /&gt; &lt;br /&gt;The example includes a mock identity provider, www.adatumcorporation.com, which is a light customization of the default development STS template project provided with the beta 2 of the Geneva Framework. Since the solution is designed to be able to run from a single machine, we make the STS available via HTTPS on a custom IIS binding (on port 8081) and we provide opportune entry on the local HOST file.&lt;br /&gt; &lt;br /&gt;The main application, https://www.fabrikamshipping.com:8082/FabrikamShipping/, is configured in a similar way and it is set to accept tokens directly from Adatum.&lt;br /&gt; &lt;br /&gt;Note: &lt;br /&gt;In a more realistic scenario, Fabrikam would have a resource STS that would be used to maintain the relationship with Adatum and all the other federated partners, and where any claims transformation that may be need would take place. Every Fabrikam applications, including FabrikamShipping, would then trust the resource STS instead of having to handle the relationship with the federated partner directly.&lt;br /&gt;In this sample we did not feature a resource STS at this level mainly because we wanted to keep thing simple and maintain smooth demo flow: there is a single application, that may even be running a hoster; there is a single federated partner in the picture; and for this application there is no need for claims transformation at the presentation layer. Unless you fall exactly in this category, there is a very high probability that your scenarios will indeed benefit from trusting your own resource STS rather than the partner directly. &lt;br /&gt; &lt;br /&gt; &lt;br /&gt;All FabrikamShipping business logic lives in a set of WCF services. The presentation layer invokes the services using a delegation mechanism: the access privileges are decided for every service call on the basis of the current web application’s user, as opposed to relying on trusted subsystem or full website impersonation approaches. The services are configured to accept tokens from an internal STS with ActAs capabilities: the STS is in turn invoked by the presentation layer’s code-behind with the token of the original user.&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;br /&gt;The Visual Studio Solution: What to Look For&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;br /&gt;Figure 11 &lt;br /&gt;FabrikamShipping solution structure &lt;br /&gt; &lt;br /&gt;The Visual Studio solution is pretty simple, and has been organized in a way that surfaces the main entities in the architecture and their component. At a glance, those are the projects and what to look from the identity management point of view:&lt;br /&gt; &lt;br /&gt;The Adatum folder contains only the STS subfolder with our mock identity provider, the web site http://www.adatumcorporation.com/FederationPassive/. All the identity content here is a mild customization of the default development STS offered by Geneva Framework Beta2 &lt;br /&gt;The Fabrikam folder contains the bulk of the sample&lt;br /&gt;The BackEnd subfolder contains all the projects that constitute the business logic of the sample&lt;br /&gt;FabrikamShipping.Services.Contracts is a class library containing all the contract definitions for the services. No identity code here.&lt;br /&gt;FabrikamShipping.Services.Host is the web application that hosts the services, which are all message-activated. The web.config shows how to configure the ClaimsAuthorizationModule, use the ConfigureServiceHostBehaviorExtensionElement for configuring WCF services for using the Geneva Framework, and assign policies via custom claimsAuthorizationManager class.The App_Code folder contains the definition of the custom claimsAuthorizationManager class, substantially the same sample found in the SDK.&lt;br /&gt;FabrikamShipping.Services is a class library containing the services implementations. No identity code here.&lt;br /&gt;FabrikamShipping.Data is a class library containing the data model for shipments, customers and all the entities used by the sample. No identity code here.&lt;br /&gt;The STS folder contains the internal STS.&lt;br /&gt;FabrikamShipping.RPSts is the web application which contains the ActAs STS which issues tokens for the frontend to invoke the backend services.The web.config shows how to configure an active STS secured via X509 certificate; it also demonstrates how to use a custom X509SecurityTokenHandler class (defined in SimpleX509SecurityTokenHandler.cs, integrated by SimpleCertificateValidator.cs) for defining the list of acceptable certificates.The ST implementation in ActAsSecurityTokenService.cs, and the method GetOutputClaimsIdentity in particular, demonstrates how to drive issuance decisions on the basis of ActAs tokens&lt;br /&gt;The FrontEnd folder contains the main web application.&lt;br /&gt;http://www.fabrikamshipping.com/FabrikamShipping/ is the website of the main application.The web.config contains the classic settings that are the output of the federation wizard (or fedutil) when configuring a website to accept tokens from an identity provider. Furthermore, the web.config contains the binding that is needed for requesting a token from the ActAs STS.The global.asax, and specifically the Session&lt;i&gt;start handler, demonstrates how to use the token obtained from the identity provider as an ActAs token with WSTrustClient for invoking our internal ActAs STS. The resulting token is then stored in the HTTP session, where it will be available whenever the application will need to call a backend service (a real application may need to find a more solid solution for maintaining session state).The App&lt;/i&gt;Code/Clients folder contains utility classes for invoking WCF services by injecting in the call an issued token already in our possession: in our case, this will be the delegated token we stored in the HTTP session at the time of global.asax’s session_start execution.Most aspx pages will take advantage of IClaimsIdentity in the usual way for accessing claims from the identity provider; the calls to the backend services will be performed by taking advantage of the utility classes mentioned above&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;The Solution in IIS&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;br /&gt;Figure 12 &lt;br /&gt;FabrikamShipping structure in IIS &lt;br /&gt; &lt;br /&gt;The structure that emerges in IIS matches the solution description above. Note that &lt;br /&gt;Both websites introduce their own SSL bindings (8081 for Adatum and 8082 for Fabrikam) &lt;br /&gt;The SSL certificates are self-signed, and configured as part of the overall setup script &lt;br /&gt;In order to preserve your current settings, all web applications in the FabrikamShipping sample make use of a custom application pool, FabrikamShippingAppPool, which holds all the necessary permissions for accessing the private keys associated to the sample certificates above &lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;br /&gt;Summary&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;FabrikamShipping is a learning tool designed for you to observe, take apart and experiment with Geneva Framework and claims based identity. We tried to make it somewhat realistic in order to hint to the business value and to the solutions to some of the most common challenges you need to address when developing a web application; at the same time, we tried to keep things simple and to make sure you always know what is going on and which part does which function. We hope we managed to strike the right balance, and that FabrikamShipping will help you to enjoy the benefits of claims-based access.&lt;br /&gt;
&lt;/div&gt;</description><author>Vittorio</author><pubDate>Mon, 15 Jun 2009 21:45:20 GMT</pubDate><guid isPermaLink="false">UPDATED WIKI: Home 20090615P</guid></item><item><title>UPDATED WIKI: Home</title><link>http://code.msdn.microsoft.com/FabrikamShipping/Wiki/View.aspx?title=Home&amp;version=2</link><description>&lt;div class="wikidoc"&gt;
&lt;h1&gt;
Overview
&lt;/h1&gt; &lt;br /&gt;FabrikamShipping is a semi-realistic sample web application that demonstrates how to use the &lt;b&gt;Geneva Framework&lt;/b&gt; for authentication, authorization and identity driven customization for a web frontend and a services backend. Its main goal is to show how to implement common tasks and features in web applications, combining the techniques presented separately in other technology learning material such as the &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=118C3588-9070-426A-B655-6CEC0A92C10B&amp;amp;displaylang=en" class="externalLink"&gt;Geneva Framework SDK&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; and the &lt;a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=c3e315fa-94e2-4028-99cb-904369f177c0" class="externalLink"&gt;Identity Developer Training Kit&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;. &lt;br /&gt; &lt;br /&gt;Note that while all efforts have been made for following best practices whenever possible, FabrikamShipping is NOT a reference implementation since it is designed for readability and for making as clear as possible for the reader to understand what is happening, as opposed to efficiency and maintainability. You should NOT use FabrikamShipping code in production.&lt;br /&gt; &lt;br /&gt;
&lt;/div&gt;</description><author>Vittorio</author><pubDate>Mon, 15 Jun 2009 21:35:16 GMT</pubDate><guid isPermaLink="false">UPDATED WIKI: Home 20090615P</guid></item><item><title>CREATED RELEASE: FabrikamShipping 1.0 (Jun 15, 2009)</title><link>http://code.msdn.microsoft.com/FabrikamShipping/Release/ProjectReleases.aspx?ReleaseId=2837</link><description></description><author></author><pubDate>Mon, 15 Jun 2009 19:05:26 GMT</pubDate><guid isPermaLink="false">CREATED RELEASE: FabrikamShipping 1.0 (Jun 15, 2009) 20090615P</guid></item></channel></rss>