{"id":443,"date":"2009-06-16T14:36:00","date_gmt":"2009-06-16T23:36:00","guid":{"rendered":"http:\/\/www.cloudidentity.com\/blog\/2009\/06\/16\/announcing-fabrikamshipping-in-depth-semi-realistic-sample-for-geneva-framework\/"},"modified":"2009-06-16T14:36:00","modified_gmt":"2009-06-16T23:36:00","slug":"announcing-fabrikamshipping-in-depth-semi-realistic-sample-for-geneva-framework","status":"publish","type":"post","link":"https:\/\/www.cloudidentity.com\/blog\/2009\/06\/16\/announcing-fabrikamshipping-in-depth-semi-realistic-sample-for-geneva-framework\/","title":{"rendered":"Announcing FabrikamShipping, in-depth semi-realistic sample for Geneva Framework"},"content":{"rendered":"<div class=\"wlWriterHeaderFooter\" style=\"float:right;margin:0px;padding:0px 0px 4px 8px\">digg_url = &#8220;http:\/\/blogs.msdn.com\/vbertocci\/archive\/2009\/06\/16\/announcing-fabrikamshipping-in-depth-semi-realistic-sample-for-geneva-framework.aspx&#8221;;digg_title = &#8220;Announcing FabrikamShipping, in-depth semi-realistic sample for Geneva Framework&#8221;;digg_bgcolor = &#8220;#FFFFFF&#8221;;digg_skin = &#8220;normal&#8221;;digg_url = undefined;digg_title = undefined;digg_bgcolor = undefined;digg_skin = undefined;<\/div>\n<p>Do you remember the <a href=\"http:\/\/channel9.msdn.com\/pdc2008\/BB11\/\">PDC session<\/a> in which Kim announced all the new wave of identity products, including Geneva?<\/p>\n<p>During that session I showed a pretty comprehensive demo, where&#160; all the products &amp; services worked together for enabling a fairly realistic end-to-end scenario. You have seen demos based on the same scenario at TechEd EU, TechDays and in many presentations from my colleagues in the various subsidiaries; finally, if you came at the Geneva booth at RSA chances are that you got an detailed walkthrough of it. Since people liked it so much, we thought it would have been nice to extract just the main web application from that scenario, and make it available to everyone in form of an in-depth example. You can find the code in a handy self-installing file on code gallery, at <a title=\"http:\/\/code.msdn.microsoft.com\/FabrikamShipping\" href=\"http:\/\/code.msdn.microsoft.com\/FabrikamShipping\">http:\/\/code.msdn.microsoft.com\/FabrikamShipping<\/a> (direct link <a href=\"http:\/\/code.msdn.microsoft.com\/Project\/Download\/FileDownload.aspx?ProjectName=FabrikamShipping&amp;DownloadId=6204\">here<\/a>).<\/p>\n<p>The idea is that we bridge the gap between pure technical learning content (the <a href=\"http:\/\/www.microsoft.com\/downloads\/details.aspx?displaylang=en&amp;FamilyID=c3e315fa-94e2-4028-99cb-904369f177c0\">training kit<\/a>) and high level presentation (take your pick), by providing you with a demo that on one side you can use for explaining to non-technical people what\u2019s the point of claims-based identity, on the other side you can take the code apart and see what makes the application tick. You will see that we do little more than applying the solutions described in the identity developer training kit to the challenges that a real application requires: we comment the code here and there so you\u2019ll always know what is going on, if you want to go deeper we recommend you look up the specific solution you are focusing on in the <a href=\"http:\/\/www.microsoft.com\/downloads\/details.aspx?familyid=118C3588-9070-426A-B655-6CEC0A92C10B&amp;displaylang=en\">SDK<\/a> documentation and in the <a href=\"http:\/\/www.microsoft.com\/downloads\/details.aspx?displaylang=en&amp;FamilyID=c3e315fa-94e2-4028-99cb-904369f177c0\">training kit<\/a>.<\/p>\n<p>Below I am pasting the \u201creadme\u201d you will find in the package. We really appreciate your feedback! let us know what you like and what you don\u2019t like, what topics you\u2019d like covered in more depth, etc etc and as usual we\u2019ll do our best to make you happy.<\/p>\n<h1>Overview<\/h1>\n<p>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 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 Geneva Framework SDK and the Identity Developer Training Kit. <\/p>\n<p>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.<\/p>\n<h1>The FabrikamShipping Scenario<\/h1>\n<p><a href=\"http:\/\/blogs.msdn.com\/blogfiles\/vbertocci\/WindowsLiveWriter\/c326debcd08b_DBBE\/d4c2ae9e-ac50-43c0-a574-fe5250968485_2.png\"><img loading=\"lazy\" decoding=\"async\" style=\"border-top-width: 0px;border-left-width: 0px;border-bottom-width: 0px;border-right-width: 0px\" height=\"236\" alt=\"d4c2ae9e-ac50-43c0-a574-fe5250968485\" src=\"http:\/\/cloudidentity.com\/blog\/wp-content\/uploads\/2009\/06\/d4c2ae9e-ac50-43c0-a574-fe5250968485_2.png\" width=\"480\" border=\"0\" \/><\/a> <\/p>\n<p><b>Figure 1<\/b>     <br \/><i>FabrikamShipping\u2019s main actors<\/i><\/p>\n<p>The FabrikamShipping scenario has been originally designed as part of an end-to-end demo for PDC 2008 (video recording available at <a href=\"http:\/\/channel9.msdn.com\/pdc2008\/BB11\/\">http:\/\/channel9.msdn.com\/pdc2008\/BB11\/<\/a>, from 31\u201d 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.<\/p>\n<p>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.<\/p>\n<p>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.<\/p>\n<h4>A Brief Walkthrough<\/h4>\n<p>Let\u2019s 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.<\/p>\n<p>Pretend that you are John, and that you have a package to send. Open a browser and navigate to FabrikamShippings\u2019 URI: <a href=\"https:\/\/www.fabrikamshipping.com:8082\/FabrikamShipping\/\">https:\/\/www.fabrikamshipping.com:8082\/FabrikamShipping\/<\/a>. <\/p>\n<p>Since you are not authenticated yet, FabrikamShipping redirects you to the Adatum STS:<\/p>\n<p><a href=\"http:\/\/blogs.msdn.com\/blogfiles\/vbertocci\/WindowsLiveWriter\/c326debcd08b_DBBE\/ee9c617605ae4eecadc48302e2dd4afa3.png\"><img loading=\"lazy\" decoding=\"async\" style=\"border-right: 0px;border-top: 0px;border-left: 0px;border-bottom: 0px\" height=\"346\" alt=\"ee9c6176-05ae-4eec-adc4-8302e2dd4afa\" src=\"http:\/\/cloudidentity.com\/blog\/wp-content\/uploads\/2009\/06\/ee9c617605ae4eecadc48302e2dd4afa3.png\" width=\"457\" border=\"0\" \/><\/a> <\/p>\n<p><b>Figure 2<\/b>     <br \/><i>Adatum\u2019s STS UI<\/i><\/p>\n<p>Use the suggested credentials for John and hit Submit. You\u2019ll land on FabrikamShipping\u2019s main page:<\/p>\n<p><a href=\"http:\/\/blogs.msdn.com\/blogfiles\/vbertocci\/WindowsLiveWriter\/c326debcd08b_DBBE\/fe753d285b9744f7a3a1dc3610f012e3.png\"><img loading=\"lazy\" decoding=\"async\" style=\"border-right: 0px;border-top: 0px;border-left: 0px;border-bottom: 0px\" height=\"364\" alt=\"fe753d28-5b97-44f7-a3a1-dc3610f012e3\" src=\"http:\/\/cloudidentity.com\/blog\/wp-content\/uploads\/2009\/06\/fe753d285b9744f7a3a1dc3610f012e3.png\" width=\"513\" border=\"0\" \/><\/a> <\/p>\n<p><b>Figure 3<\/b>     <br \/><i>The main page of FabrikamShipping<\/i><\/p>\n<p>Click on the New Shipment icon.<\/p>\n<p><a href=\"http:\/\/blogs.msdn.com\/blogfiles\/vbertocci\/WindowsLiveWriter\/c326debcd08b_DBBE\/84d9ef413a18499eaf6977f08e4d1b09.png\"><img loading=\"lazy\" decoding=\"async\" style=\"border-right: 0px;border-top: 0px;border-left: 0px;border-bottom: 0px\" height=\"379\" alt=\"84d9ef41-3a18-499e-af69-77f08e4d1b09\" src=\"http:\/\/cloudidentity.com\/blog\/wp-content\/uploads\/2009\/06\/84d9ef413a18499eaf6977f08e4d1b09.png\" width=\"444\" border=\"0\" \/><\/a> <\/p>\n<p><b>Figure 4<\/b>     <br \/><i>The new shipment screen<\/i><\/p>\n<p>As you can see, the Sender area is already populated with John\u2019s data: this is thanks to the claims received directly from Adatum with the sign in token. For filling the Recipient form, click on \u201cSearch in CRM\u201d; you will get a small dialog, from where you can pick a customer (here I\u2019ll pick Dan Park).<\/p>\n<p>Click the green Submit button.<\/p>\n<p><a href=\"http:\/\/blogs.msdn.com\/blogfiles\/vbertocci\/WindowsLiveWriter\/c326debcd08b_DBBE\/029a88781e294596a842ac988fdc7e2b.png\"><img loading=\"lazy\" decoding=\"async\" style=\"border-right: 0px;border-top: 0px;border-left: 0px;border-bottom: 0px\" height=\"405\" alt=\"029a8878-1e29-4596-a842-ac988fdc7e2b\" src=\"http:\/\/cloudidentity.com\/blog\/wp-content\/uploads\/2009\/06\/029a88781e294596a842ac988fdc7e2b.png\" width=\"604\" border=\"0\" \/><\/a> <\/p>\n<p><b>Figure 5<\/b>     <br \/><i>The new shipment confirmation screen<\/i><\/p>\n<p>Everything seems in order: click the Ship It! button.<\/p>\n<p><a href=\"http:\/\/blogs.msdn.com\/blogfiles\/vbertocci\/WindowsLiveWriter\/c326debcd08b_DBBE\/b6cd586e6f474b6cbb3c1d04446c12cc.png\"><img loading=\"lazy\" decoding=\"async\" style=\"border-right: 0px;border-top: 0px;border-left: 0px;border-bottom: 0px\" height=\"410\" alt=\"b6cd586e-6f47-4b6c-bb3c-1d04446c12cc\" src=\"http:\/\/cloudidentity.com\/blog\/wp-content\/uploads\/2009\/06\/b6cd586e6f474b6cbb3c1d04446c12cc.png\" width=\"526\" border=\"0\" \/><\/a> <\/p>\n<p><b>Figure 6<\/b>     <br \/><i>The shipping label printing screen<\/i><\/p>\n<p>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.<\/p>\n<p>Let\u2019s take a look at what happens when we want to modify our shipment. Click the Go to Home button.<\/p>\n<p><a href=\"http:\/\/blogs.msdn.com\/blogfiles\/vbertocci\/WindowsLiveWriter\/c326debcd08b_DBBE\/4e1eb2bde9ee44529b1db46f5822e88e.png\"><img loading=\"lazy\" decoding=\"async\" style=\"border-right: 0px;border-top: 0px;border-left: 0px;border-bottom: 0px\" height=\"356\" alt=\"4e1eb2bd-e9ee-4452-9b1d-b46f5822e88e\" src=\"http:\/\/cloudidentity.com\/blog\/wp-content\/uploads\/2009\/06\/4e1eb2bde9ee44529b1db46f5822e88e.png\" width=\"526\" border=\"0\" \/><\/a> <\/p>\n<p><b>Figure 7<\/b>     <br \/><i>The main screen now shows our new shipment for Dan<\/i><\/p>\n<p>The list of shipments now includes the new entry we just created. Let\u2019s say that we want to reroute this shipment: click directly on the Dan Park entry.<\/p>\n<p><a href=\"http:\/\/blogs.msdn.com\/blogfiles\/vbertocci\/WindowsLiveWriter\/c326debcd08b_DBBE\/8e4c164a5f6a49a6abe2c08fe29afa1e.png\"><img loading=\"lazy\" decoding=\"async\" style=\"border-right: 0px;border-top: 0px;border-left: 0px;border-bottom: 0px\" height=\"292\" alt=\"8e4c164a-5f6a-49a6-abe2-c08fe29afa1e\" src=\"http:\/\/cloudidentity.com\/blog\/wp-content\/uploads\/2009\/06\/8e4c164a5f6a49a6abe2c08fe29afa1e.png\" width=\"515\" border=\"0\" \/><\/a> <\/p>\n<p><b>Figure 8<\/b>     <br \/><i>The shipping workflow<\/i><\/p>\n<p>This page shows the shipment workflow: we are currently in the Pickup state.<\/p>\n<p>Note: 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 \u201cmanually\u201d 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 \u201cRunning\u201d) you\u2019ll see that it changes into a hand: if you click, the workflow will advance one step.<\/p>\n<p>Click the Reroute Shipment button, change something and click on the Reroute button:<\/p>\n<p><a href=\"http:\/\/blogs.msdn.com\/blogfiles\/vbertocci\/WindowsLiveWriter\/c326debcd08b_DBBE\/75c40a33908949aea78aaade23944566.png\"><img loading=\"lazy\" decoding=\"async\" style=\"border-right: 0px;border-top: 0px;border-left: 0px;border-bottom: 0px\" height=\"414\" alt=\"75c40a33-9089-49ae-a78a-aade23944566\" src=\"http:\/\/cloudidentity.com\/blog\/wp-content\/uploads\/2009\/06\/75c40a33908949aea78aaade23944566.png\" width=\"469\" border=\"0\" \/><\/a> <\/p>\n<p><b>Figure 9<\/b>     <br \/><i>John cannot reroute existing shipments<\/i><\/p>\n<p>You will get an error: John does not have enough privileges for modifying existing shipments.<\/p>\n<p>Try to start over, this time using Mary\u2019s 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.<\/p>\n<p>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.<\/p>\n<p>In the next section we will see some details about what happens behind the scenes for making this possible.<\/p>\n<h1>Implementation Details<\/h1>\n<p><a href=\"http:\/\/blogs.msdn.com\/blogfiles\/vbertocci\/WindowsLiveWriter\/c326debcd08b_DBBE\/f23916896cba44d988bd1255622939ec.png\"><img loading=\"lazy\" decoding=\"async\" style=\"border-right: 0px;border-top: 0px;border-left: 0px;border-bottom: 0px\" height=\"403\" alt=\"f2391689-6cba-44d9-88bd-1255622939ec\" src=\"http:\/\/cloudidentity.com\/blog\/wp-content\/uploads\/2009\/06\/f23916896cba44d988bd1255622939ec.png\" width=\"625\" border=\"0\" \/><\/a> <\/p>\n<p><b>Figure 10<\/b>     <br \/><i>FabrikamShipping\u2019s Architecture<\/i><\/p>\n<p>FabrikamShipping is a classic web application, which authenticates its users via passive federation. <\/p>\n<p>The example includes a mock identity provider, <a href=\"http:\/\/www.adatumcorporation.com\/\">www.adatumcorporation.com<\/a>, 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.<\/p>\n<p>The main application, <a href=\"https:\/\/www.fabrikamshipping.com:8082\/FabrikamShipping\/\">https:\/\/www.fabrikamshipping.com:8082\/FabrikamShipping\/<\/a>, is configured in a similar way and it is set to accept tokens directly from Adatum.<\/p>\n<p>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.    <br \/>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.<\/p>\n<p>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\u2019s 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\u2019s code-behind with the token of the original user.<\/p>\n<h2>The Visual Studio Solution: What to Look For<\/h2>\n<p><a href=\"http:\/\/blogs.msdn.com\/blogfiles\/vbertocci\/WindowsLiveWriter\/c326debcd08b_DBBE\/39d8bb90-c131-40ea-9ddf-650cf6effcde_2.png\"><img loading=\"lazy\" decoding=\"async\" style=\"border-top-width: 0px;border-left-width: 0px;border-bottom-width: 0px;border-right-width: 0px\" height=\"274\" alt=\"39d8bb90-c131-40ea-9ddf-650cf6effcde\" src=\"http:\/\/cloudidentity.com\/blog\/wp-content\/uploads\/2009\/06\/39d8bb90-c131-40ea-9ddf-650cf6effcde_2.png\" width=\"346\" border=\"0\" \/><\/a> <\/p>\n<p><b>Figure 11<\/b>     <br \/><i>FabrikamShipping solution structure<\/i><\/p>\n<p>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:<\/p>\n<ul>\n<li>The <b>Adatum<\/b> folder contains only the <b>STS<\/b> subfolder with our mock identity provider, the web site <b>http:\/\/www.adatumcorporation.com\/FederationPassive\/<\/b>. All the identity content here is a mild customization of the default development STS offered by Geneva Framework Beta2 <\/li>\n<li>The <b>Fabrikam<\/b> folder contains the bulk of the sample\n<ul>\n<li>The <b>BackEnd<\/b> subfolder contains all the projects that constitute the business logic of the sample\n<ul>\n<li><b>FabrikamShipping.Services.Contracts<\/b> is a class library containing all the contract definitions for the services. No identity code here. <\/li>\n<li><b>FabrikamShipping.Services.Host<\/b> is the web application that hosts the services, which are all message-activated. The web.config shows how to configure the <i>ClaimsAuthorizationModule<\/i>, use the <i>ConfigureServiceHostBehaviorExtensionElement<\/i> for configuring WCF services for using the Geneva Framework, and assign policies via custom <i>claimsAuthorizationManager<\/i> class.The App_Code folder contains the definition of the custom claimsAuthorizationManager class, substantially the same sample found in the SDK. <\/li>\n<li><b>FabrikamShipping.Services<\/b> is a class library containing the services implementations. No identity code here. <\/li>\n<li><b>FabrikamShipping.Data<\/b> is a class library containing the data model for shipments, customers and all the entities used by the sample. No identity code here. <\/li>\n<\/ul>\n<\/li>\n<li>The <b>STS<\/b> folder contains the internal STS.\n<ul>\n<li><b>FabrikamShipping.RPSts<\/b> is the web application which contains the ActAs STS which issues tokens for the frontend to invoke the backend services.The <i>web.config<\/i> shows how to configure an active STS secured via X509 certificate; it also demonstrates how to use a custom <i>X509SecurityTokenHandler<\/i> class (defined in <i>SimpleX509SecurityTokenHandler.cs<\/i>, integrated by <i>SimpleCertificateValidator.cs<\/i>) for defining the list of acceptable certificates.The ST implementation in <i>ActAsSecurityTokenService.cs<\/i>, and the method <i>GetOutputClaimsIdentity<\/i> in particular, demonstrates how to drive issuance decisions on the basis of ActAs tokens <\/li>\n<\/ul>\n<\/li>\n<li>The <b>FrontEnd<\/b> folder contains the main web application.\n<ul>\n<li><b>http:\/\/www.fabrikamshipping.com\/FabrikamShipping\/<\/b> is the website of the main application.The <i>web.config<\/i> 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 <i>global.asax<\/i>, and specifically the <i>Session_start<\/i> handler, demonstrates how to use the token obtained from the identity provider as an ActAs token with <i>WSTrustClient<\/i> 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 <i>App_Code\/Clients<\/i> 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\u2019s 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 <\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h4>The Solution in IIS<\/h4>\n<p><a href=\"http:\/\/blogs.msdn.com\/blogfiles\/vbertocci\/WindowsLiveWriter\/c326debcd08b_DBBE\/a3756ce0-9556-4aee-9bf3-75354b93f967_2.png\"><img loading=\"lazy\" decoding=\"async\" style=\"border-top-width: 0px;border-left-width: 0px;border-bottom-width: 0px;border-right-width: 0px\" height=\"127\" alt=\"a3756ce0-9556-4aee-9bf3-75354b93f967\" src=\"http:\/\/cloudidentity.com\/blog\/wp-content\/uploads\/2009\/06\/a3756ce0-9556-4aee-9bf3-75354b93f967_2.png\" width=\"219\" border=\"0\" \/><\/a> <\/p>\n<p><b>Figure 12<\/b>     <\/p>\n<h2><i>FabrikamShipping structure in IIS<\/i><\/h2>\n<ul>\n<li>The structure that emerges in IIS matches the solution description above. Note that <\/li>\n<li>Both websites introduce their own SSL bindings (8081 for Adatum and 8082 for Fabrikam) <\/li>\n<li>The SSL certificates are self-signed, and configured as part of the overall setup script <\/li>\n<li>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 <\/li>\n<\/ul>\n<h1>Summary<\/h1>\n<p>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. Ta-daahhhhh!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>digg_url = &#8220;http:\/\/blogs.msdn.com\/vbertocci\/archive\/2009\/06\/16\/announcing-fabrikamshipping-in-depth-semi-realistic-sample-for-geneva-framework.aspx&#8221;;digg_title = &#8220;Announcing FabrikamShipping, in-depth semi-realistic sample for Geneva Framework&#8221;;digg_bgcolor = &#8220;#FFFFFF&#8221;;digg_skin = &#8220;normal&#8221;;digg_url = undefined;digg_title = undefined;digg_bgcolor = undefined;digg_skin = undefined; Do you remember the PDC session in which Kim announced all the new wave of identity products, including Geneva? During that session I showed a pretty comprehensive demo, where&#160;&#8230;<\/p>\n","protected":false},"author":1,"featured_media":1424,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"footnotes":""},"categories":[88,36,23,75,74,9],"tags":[],"class_list":["post-443","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-beta2","category-fabrikamshipping","category-federation","category-geneva","category-geneva-framework","category-identity"],"_links":{"self":[{"href":"https:\/\/www.cloudidentity.com\/blog\/wp-json\/wp\/v2\/posts\/443","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.cloudidentity.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.cloudidentity.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.cloudidentity.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.cloudidentity.com\/blog\/wp-json\/wp\/v2\/comments?post=443"}],"version-history":[{"count":0,"href":"https:\/\/www.cloudidentity.com\/blog\/wp-json\/wp\/v2\/posts\/443\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.cloudidentity.com\/blog\/wp-json\/wp\/v2\/media\/1424"}],"wp:attachment":[{"href":"https:\/\/www.cloudidentity.com\/blog\/wp-json\/wp\/v2\/media?parent=443"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.cloudidentity.com\/blog\/wp-json\/wp\/v2\/categories?post=443"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.cloudidentity.com\/blog\/wp-json\/wp\/v2\/tags?post=443"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}