<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="https://www.w3.org/2005/Atom" xmlns:sy="https://purl.org/rss/1.0/modules/syndication/" xmlns:dc="https://purl.org/dc/elements/1.1/" xmlns:content="https://purl.org/rss/1.0/modules/content/" xmlns:wfw="https://wellformedweb.org/CommentAPI/" xmlns:slash="https://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>Eugenio Pace</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/eugeniop/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/eugeniop/feed.xml</link>
    <description>Preparing to be wrong</description>
    <lastBuildDate>Wed, 17 Apr 2019 03:21:10 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>Eugenio’s Next Adventure</title>
      <link>https://docs.microsoft.com/archive/blogs/eugeniop/eugenios-next-adventure</link>
      <pubDate>Thu, 31 Jan 2013 17:00:53 GMT</pubDate>
      <dc:creator><![CDATA[Eugenio Pace - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/eugeniop/2013/01/31/eugenios-next-adventure/</guid>
      <description><![CDATA[The Symposium is now behind us and I’m very pleased at how it went. Overall feedback was very...]]></description>
      <content:encoded><![CDATA[<p>The <a href="https://pnp.azurewebsites.net/en-us/events.htm">Symposium</a> is now behind us and I’m very pleased at how it went. Overall feedback was very positive! Even the weather seemed to have joined us, with unusual sunny days. Thanks very much again to everyone who joined us in Redmond, speakers and attendees. We certainly hope you come again next year. Planning for the next Symposium has already started. Stay tuned!</p>  <p>The event was of a special importance to me, as it was my last contribution to p&amp;p and to Microsoft. The time has come for me to do something different.</p>  <p>Microsoft in general, and p&amp;p in particular have been the experience of my life and the best place I’ve ever worked for. I would undoubtedly do exactly the same if I went back 12 years and was presented with the opportunity to join Microsoft again. It has been very much like a home, and I will miss it a lot.</p>  <p>I’ve been privileged to meet and work with exceptional people. I’ve traveled the world. I’ve worked on really great projects. Working for Microsoft is demanding, but it’s a very generous company on many dimensions, and I’ve grown an all aspects. Thanks Microsoft and thanks to my many colleagues, mentors and friends! </p>  <p>In everything I’ve done, my personal guiding principle has always been to “<em>leave behind something better than what I’ve received</em>”. I have had many failures, but also many successes, and I hope I have lived up to that principle.</p>  <p>So what’s next?</p>  <p>I want to put all that experience and learning into action, by starting a new company. I’m joining <a href="https://www.qraftlabs.com">QraftLabs</a> with a pretty amazing group of friends. As many of you know, I’ve invested quite a bit of my time in the last few years into cloud computing and identity management. Our first product will be in the identity management space and it is called “<a href="https://beta.auth0.com/">Auth0</a>” (AuthZero). Our goal is to dramatically simplify identity federation for cloud apps. Especially for those that are selling their services to enterprises with their own identity infrastructure (like AD) or using Office 365.</p>  <p>Identity Federation is still hard. We published <a href="https://msdn.microsoft.com/en-us/library/ff423674.aspx">two guides</a> on it, but there are still quite a few moving parts and my experience is that there’s room for improvement. So that is what we will be focusing on first. (Remember my “IssueTracker” <a href="https://blogs.msdn.com/b/eugeniop/archive/tags/issuetracker/">series</a> 4 years ago? wow…4 years…)</p>  <p>And you might think: wait! Isn’t Windows Azure Active Directory supposed to address that? Sure, it is an important part of the equation (and we will fully support it), but there are other aspects and challenges we want to address also, that complement WAAD: other protocols, a wider variety of identity providers, tools for troubleshooting, etc.</p>  <p>Obviously, this blog will freeze with this last post. It might or might not stay, I don’t know. If you want to continue to follow me and the next chapter of my journey go to: <a href="https://blog.qraftlabs.com">https://blog.qraftlabs.com</a> and/or <a href="https://blog.auth0.com">https://blog.auth0.com</a> </p>  <p>Thanks again!</p>  <p>Eugenio</p>]]></content:encoded>
    </item>
    <item>
      <title>patterns &amp; practices Symposium 2013</title>
      <link>https://docs.microsoft.com/archive/blogs/eugeniop/patterns-practices-symposium-2013</link>
      <pubDate>Thu, 25 Oct 2012 14:01:06 GMT</pubDate>
      <dc:creator><![CDATA[Eugenio Pace - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/eugeniop/2012/10/25/patterns-practices-symposium-2013/</guid>
      <description><![CDATA[I’m happy to announce the next p&amp;p Symposium here in Redmond. Details below....]]></description>
      <content:encoded><![CDATA[<p> I’m happy to announce the next p&amp;p Symposium here in Redmond. Details below.</p>  <table cellspacing="0" cellpadding="0" border="0"><tbody>     <tr>       <td valign="top" width="19">&#160;</td>        <td valign="top" width="603">&#160;</td>        <td valign="top" width="16">&#160;</td>     </tr>      <tr>       <td valign="top" width="19">&#160;</td>        <td valign="top" width="603">         <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/38/15/metablogapi/4645.clip_image002_1834B010.gif" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-38-15-metablogapi/4645.clip_5F00_image002_5F00_1834B010.gif"><img title="clip_image002" style="display: inline;" border="0" alt="clip_image002" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/38/15/metablogapi/7217.clip_image002_thumb_7D2A8380.gif" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-38-15-metablogapi/7217.clip_5F00_image002_5F00_thumb_5F00_7D2A8380.gif" width="479" height="66" /></a></p>       </td>        <td valign="top" width="16">&#160;</td>     </tr>      <tr>       <td valign="top" width="19">&#160;</td>        <td valign="top" width="603">         <p>The <b><i>patterns &amp; practices Symposium </i></b>is <b><u>the</u> </b>event for software developers and architects to have engaging and meaningful discussions with the people creating technologies and guidance at Microsoft. </p>          <p>This year’s Symposium topics span the spectrum of technology, architecture, and teamwork.&#160; You will learn about practices, patterns, and technologies that will save you time and reduce risk when creating Cloud, Web, and Windows-based solutions. The Symposium is also an opportunity to influence p&amp;p and other product teams face-to-face to address the scenarios most important to you.</p>          <p><b>Symposium Highlights</b></p>          <ul>           <li>This year’s theme is exploration—reflecting software development as a journey of discovery.</li>            <li>Keynote Sessions by senior Microsoft executives including <b>Scott Guthrie</b> &amp; <b>Ales Holecek.</b></li>            <li>Special keynote sessions delivered by <b>Felicity Aston</b>, the first woman to ski across Antarctica alone, and <b>Adam Steltzner</b>, NASA lead engineer for Curiosity’s Entry, Descent and Landing.</li>            <li>18 thought-provoking sessions. </li>            <li>Symposium Party on Wednesday night.</li>            <li>Scott Hanselman’s Coding Game show—back by popular demand!</li>         </ul>          <p>Registration for the three day Symposium is <b>$498</b>.&#160; <b>Register before November 9, 2012 </b>to receive a discounted early bird rate of <b>$398</b>. </p>          <p>Register now!</p>       </td>        <td valign="top" width="16">&#160;</td>     </tr>      <tr>       <td valign="top" width="19">&#160;</td>        <td valign="top" width="603"><a href="https://www.regonline.com/Register/Checkin.aspx?EventID=1150970"><img title="clip_image004" style="display: inline;" border="0" alt="clip_image004" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/38/15/metablogapi/4403.clip_image004_1B3733F4.gif" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-38-15-metablogapi/4403.clip_5F00_image004_5F00_1B3733F4.gif" width="153" height="75" /></a></td>        <td valign="top" width="16">&#160;</td>     </tr>   </tbody></table>]]></content:encoded>
    </item>
    <item>
      <title>p&amp;p roadmap for the next few months</title>
      <link>https://docs.microsoft.com/archive/blogs/eugeniop/pp-roadmap-for-the-next-few-months</link>
      <pubDate>Tue, 01 Nov 2011 11:33:00 GMT</pubDate>
      <dc:creator><![CDATA[Eugenio Pace - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/eugeniop/2011/11/01/pp-roadmap-for-the-next-few-months/</guid>
      <description><![CDATA[Update: the same roadmap is now published on MSDN. I adjusted the slide below to make timelines...]]></description>
      <content:encoded><![CDATA[<p><strong>Update: </strong>the same roadmap is now <a href="https://msdn.microsoft.com/en-us/practices/bb232643">published on MSDN</a>. I adjusted the slide below to make timelines clearer. No other changes.</p>  <p>We wanted to share with you all the projects we are either working on or we have identified as potential areas of investment in the current Fiscal Year (that started past July and ends next June 2012). The red dashed line is roughly the present. At this time, any project that has not been started (e.g. all the Windows 8 related projects and CQRS) is just a placeholder with just some rough ideas on their scope. We don’t know yet what that content will look like, how it will be packaged (a book? code? samples? all of the above?, etc.). But as usual, we’d very much welcome your input! All our projects end up on MSDN eventually, but have a corresponding community site on CodePlex where we post drafts and early versions.</p>  <p>&#160;</p>  <p><img src="https://msdn.microsoft.com/en-us/practices/bb190332.PnP-FY12-Roadmap-2011-11-2(l=en-us).png" width="640" height="480" /></p>  <p>&#160;</p>  <p>Some extra information:</p>  <p>&#160;</p>  <p><b>1. </b><b>Developing Immersive Windows 8 Windows Applications </b></p>  <ul>   <li><b>Focus:</b> Provides guidance on building end-to-end immersive Win8 applications using the HTML5/ JavaScript,and XAML and C++/C# application stacks. </li>    <li><b>Candidate App Scenario:</b> B2C/Connected-consumer. Windows 8 Metro-Style applications. </li>    <li><b>Candidate Sub-Scenarios:</b> Application Design &amp; Structure; UI – Controls, Form Factor Considerations, Interactivity, Touch &amp; Gestures, Styling, Transitions, Animation, Media, Data Visualization, Rendering, Effects; Data Binding; UI Patterns (such as MVVM); Navigation; Sensor and local device access; Security – inside/outside the sandbox; Interacting with remote services; Accessing data; Local data storage and caching; Testing, debugging and performance tuning; Deployment, updates, and versioning; App Marketplace, leveraging legacy components. </li>    <li><b>Note:</b> This project’s start and end will likely be impacted by Windows 8 ship dates. </li> </ul>    <p><b>2. </b><b>Enterprise Library 6 Platform Re-alignment and Integration Pack for Windows8</b></p>  <ul>   <li><b>Focus:</b> EntLib provides guidance and re-usable code blocks for addressing cross-cutting-concerns such as caching, data access, cross-tier validation, etc. Over the years, many scenarios supported by EntLib are now better supported by the .NET platform. This project is focused on ensuring EntLib’s close alignment to the current platform (.NET 4.5) with a goal of reducing EntLib’s footprint by leveraging platform capabilities and improvements. EntLib will remain focused on filling gaps in order to support real-world end-to-end enterprise application development. In order to ensure this, the project will focus on desktop client applications as a core scenario and will deliver an Integration Pack for Windows 8. This will provide specific guidance on building enterprise LOB desktop applications for Windows 8. We may also update the EntLib Silverlight integration pack during this project to support Silverlight 5.0. </li>    <li><b>Candidate App Scenario:</b> LOB/Enterprise Windows 8 desktop applications. </li>    <li><b>Candidate Sub-Scenarios:</b> Configuration management; Logging, diagnostics and telemetry; Exception Handling; Data access and caching; Cross-tier data validation; Security &amp; Cryptography; </li>    <li><b>Note:</b> This project’s start and end will likely be impacted by Windows 8 ship dates. </li> </ul>  <p>&#160;</p>  <p><b>3. </b><b>Developing Modular MVVM Applications using WPF and Silverlight (Prism 4.1)</b></p>  <ul>   <li><b>Focus:</b> An update to our existing content that provides guidance on building end-to-end applications using the managed code WPF and Silverlight 5.0 application stacks. We will likely update Prism to 4.1 to cover the RTM release of Silverlight 5.0 and the beta release of WPF 4.5. </li>    <li><b>Candidate App Scenario:</b> Modular LOB/Enterprise Windows desktop applications. </li>    <li><b>Candidate Sub-Scenarios</b>: As outlined in the existing Prism documentation – UI design patterns (MVVM); UI composition; Modularity; Navigation; Dependency Injection, Loosely coupled inter-component communication; Deployment and updates, etc. An interesting component of this project will explore its relationship with Win8 and harvesting patterns demonstrated in Prism that apply to Win8 apps. </li>    <li><b>Note:</b> This project’s start and end will likely be impacted by Windows 8 ship dates. </li> </ul>  <p>&#160;</p>  <p><b>4. </b><b>Developing Windows Phone 7 Applications using Silverlight – 2<sup>nd</sup> Edition Update – Phase I &amp; Phase II</b></p>  <ul>   <li><b>Focus:</b> Phase I is an update to our existing guidance on the development of Silverlight-based Windows Phone 7 applications. This update is to showcase the new capabilities in the WP7 Mango release and to address feedback on the first edition. The Prism MVVM library for the Phone will also be update for any platform updates. Phase II is focused on making WP7 more testable. We intend to produce some artifacts to help write simpler unit tests (e.g. adapters &amp; mocks) </li>    <li><strong>Project community site</strong>: <a href="https://wp7guide.codeplex.com">https://wp7guide.codeplex.com</a> </li>    <li><b>Candidate App Scenario:</b> Cloud-connected consumer oriented mobile phone applications.<b></b> </li>    <li><b>Candidate Sub-Scenarios: </b>Application Design &amp; Structure; UI Design – Form Factor Considerations, Interactivity, Touch &amp; Gestures, Styling, Transitions, Animation, Media; Tomb-stoning and Navigation; Push notifications; Implementing MVVM; Sensor and local device access; Security; Interacting with cloud-based services; Accessing data; Local data storage, caching and synchronization; Testing; Debugging and performance tuning; Deployment, Updates, Versioning; Marketplace. </li> </ul>  <p>&#160;</p>  <p><strong>5. Test Guidance for Continuous Integration with VSTS</strong></p>  <ul>   <li><strong>Focus</strong>:&#160; Provide guidance to Test Engineers on common testing scenarios using Visual Studio Team System and Team Foundation Server. </li>    <li><strong>Candidate scenarios</strong>:&#160; Setting up continuous test integration infrastructure. Building test harnesses. </li> </ul>  <p>&#160;</p>  <p><b>6. </b><b>Developing Mobile Web Applications</b></p>  <ul>   <li><b>Focus:</b> Provides guidance on the development of interactive web applications that specifically target HTML5 capable mobile phone devices such as WP7 Mango with IE9. </li>    <li><b>Candidate App Scenario:</b> Cloud-connected consumer oriented mobile phone web applications. </li>    <li><b>Candidate Sub-Scenarios:</b> Application Design &amp; Structure, using ASP.NET MVC/Razor; Client-side JavaScript and jQuery development; Leveraging HTML5/CSS3/SVG capabilities; Browser and device capability detection; Integration and re-use within ‘full’ web applications; UI Design – Form Factor Considerations, Interactivity, Touch &amp; Gestures, Styling, Transitions, Animation, Media; Navigation; Sensor and local device access; Security; Interacting with remote services; Accessing data; Local data storage and caching; Debugging and performance tuning; Versioning. </li> </ul>  <p>&#160;</p>  <p><b>7. </b><b>Enterprise Library Integration Pack for Windows Azure</b></p>  <ul>   <li><b>Focus:</b> Provides guidance on auto-scaling and building resilient applications on Windows Azure. </li>    <li><strong>Project community site</strong>: <a href="https://entlib.codeplex.com">https://entlib.codeplex.com</a> </li>    <li><strong>Public backlog</strong>: <a href="https://entlib.uservoice.com">https://entlib.uservoice.com</a> </li>    <li><b>Candidate App Scenario</b>: LOB/Enterprise/Consumer facing cloud applications.<b></b> </li>    <li><b>Candidate Sub-Scenarios:</b> Scaling Windows Azure roles based on predefined criteria (e.g. schedule, resource metrics and other KPIs). Increase tolerance to connection failures to different resources (e.g. databases, storage, external dependencies, etc.). Add automatic retries in case of failures. </li> </ul>  <p>&#160;</p>  <p><b>8. </b><b>CQRS Guide</b></p>  <ul>   <li><b>Focus:</b> Provides guidance on building application using the <a href="https://martinfowler.com/bliki/CQRS.html">Command Query Response Segregation pattern</a>. Many customers have expressed interest in this approach to building apps. </li>    <li><b>Candidate App Scenario</b>: LOB/Enterprise/Consumer facing cloud applications.<b></b> </li>    <li><b>Candidate Sub-Scenarios:</b> Applications with high scalability and/or high performance requirements. </li> </ul>  <p>&#160;</p>  <p><b>9. </b><b>Migrating/Developing Applications to/for the Cloud – 2nd Edition Update</b></p>  <ul>   <li><b>Focus:</b> An update to our existing guidance on the migration and development of applications for Windows Azure – updated is to showcase the new capabilities of the Windows Azure platform and to address feedback on the first edition. This project has been already completed and content is in production now for MSDN release. </li>    <li><strong>Project community site</strong>: <a href="https://wag.codeplex.com">https://wag.codeplex.com</a> (will be on MSDN very soon) </li>    <li><b>Candidate App Scenario:</b> Continued focus on LOB/Enterprise/Consumer focused cloud applications.<b></b> </li>    <li><b>Candidate Sub-Scenarios: </b>Using<b> </b>Web and Worker Roles;<b> </b>Using<b> </b>Queues &amp; SQL Azure, Table, Drive/Page Blob Storage; Claims-based authentication and authorization; Migration of existing application assets to the cloud; Designing a new application for the cloud; Using upgrade and fault domains; Single and Multi-Tenant application design; Deployment, Update and Versioning; Testing, Debugging and Performance Tuning; Tools for cloud development. </li> </ul>  <p>&#160;</p>  <p><b>10. </b><b>Hybrid Cloud Application Guidance</b></p>  <ul>   <li><b>Focus</b>: Provides guidance on developing hybrid (applications that have on-premises and cloud components). This project demonstrates use of platform features such as Windows Azure Connect, Windows Azure VM Roles and Windows Azure Service Bus. </li>    <li><strong>Project community site</strong>: <a href="https://wag.codeplex.com">https://wag.codeplex.com</a> </li>    <li><b>Candidate App Scenario:</b> Integration of on-premises and cloud based Enterprise/LOB applications.<b></b> </li>    <li><b>Candidate Sub-Scenarios:</b> Implementation patterns for data, workflow and identity integration; taking advantage of cloud specific capabilities such as geo-location, dynamic scalability, etc. </li> </ul>]]></content:encoded>
    </item>
    <item>
      <title>Claims Identity Guide–Hands On Labs</title>
      <link>https://docs.microsoft.com/archive/blogs/eugeniop/claims-identity-guidehands-on-labs</link>
      <pubDate>Mon, 13 Jun 2011 09:53:36 GMT</pubDate>
      <dc:creator><![CDATA[Eugenio Pace - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/eugeniop/2011/06/13/claims-identity-guidehands-on-labs/</guid>
      <description><![CDATA[Training content based on our guides has been as popular as the content itself. You can now download...]]></description>
      <content:encoded><![CDATA[<p>Training content based on our guides has been as popular as the content itself. You can now <a href="https://claimsid.codeplex.com/releases/view/68061">download the “Release Candidate” for labs</a> corresponding to the <a href="https://claimsid.codeplex.com/releases/view/67606">new guide</a>.</p>  <p>The labs are more than just a mirror of the guide. We took the opportunity of adding a few things that complement and extend what is explained in the book. A notable addition is using ADFS v2. </p>  <p>The guide talks a lot about “using ADFS for a production environment”, but all samples shipped use a “simulated STS” (this is of course than for convenience and to minimize the dependencies on your dev environment). Well, now you will have a chance of using experimenting and learning about ADFS v2.</p>  <p>But there’s more of course. </p>  <p>Here’s the&#160; compete “Table of Contents”. Feedback always very welcome.</p>  <p>&#160;</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/38/15/metablogapi/7624.image_4606B9C9.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-38-15-metablogapi/7624.image_5F00_4606B9C9.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/38/15/metablogapi/3404.image_thumb_5D71482D.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-38-15-metablogapi/3404.image_5F00_thumb_5F00_5D71482D.png" width="622" height="480" /></a></p>  <p>&#160;</p>  <p>&#160;</p>  <p><strong><font size="3">Lab 1</font></strong></p>  <p><u>Exercise 1</u>: <b>Making Applications Claims-aware</b>. In this exercise you will modify two Adatum web applications (a-Order and a-Expense) that currently use forms-based authentication to make them claims-aware, and to provide the user with a single sign-on (SSO) experience.</p>  <p><u>Exercise 2</u>: <b>Enabling Single Sign-Out</b>. In this exercise you will add code to the applications so that users logging out of one are automatically logged out of the other. </p>  <p><u>Exercise 3</u>: <b>Using WIF Session Mode</b>. In this exercise you will modify the applications to change the behavior of the WIF modules so that token information is stored in the session instead of the authentication cookie.</p>  <p>&#160;</p>  <p><strong><font size="3">Lab 2</font></strong></p>  <p><u>Exercise 1:</u> <b>Federating Adatum and Litware</b>. In this exercise, you will modify the Adatum a-Order web application to trust the Adatum federation provider, and configure the Adatum federation provider to trust both the Adatum and Litware identity providers.</p>  <p><u>Exercise 2:</u> <b>Home Realm Discovery</b>. In this exercise, you will modify the a-Order web application to send a <b>whr</b> parameter to the federation provider. You will then modify the Adatum federation provider to use the value of the <b>whr</b> parameter to determine the identity provider the user should authenticate with. </p>  <p><u>Exercise 3:</u> <b>Federation with ADFS</b>. In this optional exercise, you will replace the custom Adatum federation provider with ADFS.</p>  <p>&#160;</p>  <p><strong><font size="3">Lab 3</font></strong></p>  <p><u>Exercise 1:</u> <b>Adding ACS as a Trusted Issuer</b>. In this exercise you will start with a version of the a-Order application similar to that you used in previous labs, and modify it to use Windows Azure AppFabric Access Control Service (ACS) as the trusted issuer and identity provider in addition to the Adatum federation provider and simulated issuer.</p>  <p><u>Exercise 2</u>: <b>Adding the Facebook Identity Provider and Home Realm Discovery</b>. In this exercise you will add Facebook as an identity provider to your ACS namespace. This illustrates how, by taking advantage of ACS, you can easily change the options a user has for authentication when using your applications; without requiring any modification of the application or of your own local token issuer or federation provider. </p>  <p><u>Exercise 3:</u> <b>Adding a Custom OpenID Identity Provider</b>. In this exercise you will use the ACS Management API to programmatically add a relying party application that uses the OpenID identity provider.</p>  <p><u>Exercise 4</u>: <b>Replacing the Adatum Federation Provider with ADFS</b>. In this optional additional exercise you will replace the existing Adatum federation provider with an ADFS instance, and configure this to use ACS as a token issuer and identity provider.</p>  <p>&#160;</p>  <p><strong><font size="3">Lab 4</font></strong></p>  <p><u>Exercise 1</u>: <b>Using Claims with SOAP Web Services</b>. In this exercise, you will modify the SOAP-based Adatum a-Order web service to use claims. You will also modify the desktop client application to work with the new version of the service.</p>  <p><u>Exercise 2</u>: <b>Using Claims with REST Web Services</b>. In this exercise, you will modify the REST-based Adatum a-Order web service to use claims. You will also modify the desktop client application to work with the new version of the service. </p>  <p><u>Exercise 3:</u> <b>Federation with ADFS</b>. In this optional exercise, you will replace the custom Adatum federation provider with ADFS.</p>]]></content:encoded>
    </item>
    <item>
      <title>Intuit Data Services + Windows Azure + Identity</title>
      <link>https://docs.microsoft.com/archive/blogs/eugeniop/intuit-data-services-windows-azure-identity</link>
      <pubDate>Thu, 07 Apr 2011 22:15:22 GMT</pubDate>
      <dc:creator><![CDATA[Eugenio Pace - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/eugeniop/2011/04/07/intuit-data-services-windows-azure-identity/</guid>
      <description><![CDATA[This week, we completed a small PoC for brabant court, a customer that is building a Windows Azure...]]></description>
      <content:encoded><![CDATA[<p>This week, we completed a small PoC for <a href="https://www.brabantcourt.com/">brabant court</a>, a customer that is building a Windows Azure application that integrates with Intuit’s Data Services (IDS). </p>  <p>A couple words on <em>mabbled </em>from brabant court.</p>  <blockquote>   <p><em>Mabbled is a Windows Azure app (ASP.NET MVC 3, EF Code First, SQL Azure, AppFabric ACS|Caching, jQuery) that provides complementary services to users of Intuit QuickBooks desktop and QuickBooks Online application. Mabbled achieves this integration with the </em><a href="https://ipp.developer.intuit.com/ipp/federated/Get_Building/Azure"><em>Windows Azure SDK for Intuit Partner Platform</em></a><em> (IPP). An overriding design goal of mabbled is to leverage as much of Microsoft’s platform and services as possible in order to avoid infrastructure development and focus energy on developing compelling business logic. A stumbling block for mabbled’s developers has been identity management and interop between Intuit and the Windows Azure application.</em>&#160;</p> </blockquote>  <p>In this PoC we demonstrate how to integrate WIF with an Intuit/Windows Azure ASP.NET app. Intuit uses SAML 2.0 tokens and SAMLP. SAML 2.0 tokens are supported out of the box in WIF, but not the protocol. </p>  <p>I used one of Intuit’s sample apps (<i>OrderManagement</i>) as the base which currently doesn’t use WIF at all. </p>  <p><strong>The goal:</strong> to supply to the .NET Windows Azure app, identity information originated in Intuit’s Workplace, using the WIF programming model (e.g. <b><i>ClaimsPrincipal</i></b>) and to use and leverage as much standard infrastructure as possible (e.g. ASP.NET authorization, <i><strong>IPrincipal.IsInRole</strong></i>, etc.). </p>  <p><strong>Why? </strong>The biggest advantage of this approach is the elimination of any dependency to custom code to deal with identity related concerns (e.g. querying for roles, user information, etc.). </p>  <p>&#160;</p>  <h4>How it works today?</h4>  <p><b>&#160;</b>If you’ve seen Intuit’s sample app, you know that they provide a handler for the app that parses a SAML 2.0 token posted back from their portal (<a href="https://workplace.intuit.come">https://workplace.intuit.com</a>). This SAML token contains 3 claims: <strong><em>LoginTicket</em></strong>, <strong><em>TargetUrl </em></strong>and <strong><em>RealmId</em></strong>. Of these, <strong><em>LoginTicket</em></strong> is also encrypted. </p>  <p>The sample app includes a couple of helper classes that use the Intuit API to retrieve user information such as roles, profile info such as e-mail, last login date, etc. This API uses the <b><i>LoginTicket</i></b> as the handle to get this information (sort of an API key).</p>  <p>Some of this information is then persisted in cookies, or in session, etc. The problem with this approach is identity data is not based on .NET standard interfaces. So the app is :</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/38/15/metablogapi/8206.image_6A9FD053.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-38-15-metablogapi/8206.image_5F00_6A9FD053.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/38/15/metablogapi/2437.image_thumb_7842668E.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-38-15-metablogapi/2437.image_5F00_thumb_5F00_7842668E.png" width="640" height="132" /></a></p>  <p>where <em><strong>RoleHelper.UserisInRole</strong></em> is:</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/38/15/metablogapi/2330.image_3D7ABDB8.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-38-15-metablogapi/2330.image_5F00_3D7ABDB8.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/38/15/metablogapi/3326.image_thumb_3CA257CE.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-38-15-metablogapi/3326.image_5F00_thumb_5F00_3CA257CE.png" width="640" height="117" /></a></p>  <p>WIF provides a nice integration into standard .NET interfaces, so code like this in a web page, just works: <em><strong>this.User.IsInRole(role);</strong></em></p>  <p>The app currently includes a ASP.NET Http handler (called &quot;<strong><em>SamlHandler</em></strong>”) whose responsibility is to receive the SAML 2.0 token, parse it, validate it and decrypt the claim. Sounds familiar? if it does, it’s because WIF does the same <img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/38/15/metablogapi/5164.wlEmoticon-smile_303434A5.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-38-15-metablogapi/5164.wlEmoticon_2D00_smile_5F00_303434A5.png" /></p>  <p>&#160;</p>  <h4>What changed?</h4>  <p>I had trouble parsing the token with WIF’s <strong><em>FederationAuthenticationModule</em></strong> (probably because of the encrypted claim which I think it is not supported, but I need to double check). </p>  <p>Inside the original app handler, I’m taking the parsed SAML token (using the existing Intuit’s code) and extracting the claims supplied in it.</p>  <p>Then, I query Intuit Workplace for the user’s general data (e.g. e-mail, name, last name, etc.) and for the roles he is a member of (this requires 2 API calls using the <strong><em>LoginTicket</em></strong>). All this information also goes into the Claims collection in the <b><i>ClaimsPrincipal</i></b>. </p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/38/15/metablogapi/3835.image_6F91E835.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-38-15-metablogapi/3835.image_5F00_6F91E835.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/38/15/metablogapi/7167.image_thumb_3F8796B4.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-38-15-metablogapi/7167.image_5F00_thumb_5F00_3F8796B4.png" width="640" height="324" /></a></p>  <p>After that I create a ClaimsPrincipal and I add all this information to the claim set:</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/38/15/metablogapi/5504.image_426CD59A.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-38-15-metablogapi/5504.image_5F00_426CD59A.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/38/15/metablogapi/0317.image_thumb_6E3D2989.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-38-15-metablogapi/0317.image_5F00_thumb_5F00_6E3D2989.png" width="640" height="440" /></a></p>  <p>The last step is to create a session for this user, and for that I’m (re)using WIF’s <b><i>SessionAuthenticationModule</i></b>. </p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/38/15/metablogapi/3056.image_02FEFC3D.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-38-15-metablogapi/3056.image_5F00_02FEFC3D.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/38/15/metablogapi/4530.image_thumb_41F07CD8.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-38-15-metablogapi/4530.image_5F00_thumb_5F00_41F07CD8.png" width="640" height="114" /></a></p>  <p>This uses whatever mechanism you configured in WIF. Because this was a quick test, I left all defaults. But since this is a Windows Azure app, I suggest you should follow <a href="https://msdn.microsoft.com/en-us/library/ff803371.aspx#sec4">the specific recommendations</a> for this.</p>  <p>The handler’s original structure is the same (and I think it would need some refactoring, especially with regards to error handling, but that was out of scope for this PoC <img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/38/15/metablogapi/5164.wlEmoticon-smile_303434A5.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-38-15-metablogapi/5164.wlEmoticon_2D00_smile_5F00_303434A5.png" />)</p>  <p>&#160;</p>  <h4>Some highlights of this code:</h4>  <ol>   <li>Some API calls require a <b><i>dbid</i></b> parameter that is passed as a query string from Intuit to the app in a later call. I’m parsing the <b><i>dbid</i></b> from the <b><i>TargetUrl</i></b> claim to avoid a 2 pass claims generation process and solve everything here. This is not ideal, but not too bad. It would be simpler to get the <strong><em>dbid</em></strong> in the SAML token.</li>    <li>The sample app uses local mapping mechanism to translate “Workplace roles” into “Application Roles” (it uses a small XML document stored in config to do the mapping). I moved all this here so the <b><i>ClaimsPrincipal</i></b> contains everything the application needs right away. I didn’t attempt to optimize any of this code and I just moved the code pieces from the original location to here. This is the “RoleMappingHelper”.</li>    <li>I removed everything from the session. The “<b><i>LoginTicket</i></b>” for instance, was one of the pieces of information stored in session, but I found strange that it is sent as an encrypted claim in the SAML token, but then it is stored in a cookie. I removed all this.</li>    <li>The WIF <b><i>SessionAuthenticationModule</i></b> (SAM) is then used to serialize/encrypt/chunk <b><i>ClaimsPrincipal</i></b>. This is all standard WIF behavior as described before.</li> </ol>  <p>&#160;</p>  <h4>The web application:</h4>  <p>In the web app, I first changed the config to add WIF module and config:</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/38/15/metablogapi/0638.image_27B013B4.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-38-15-metablogapi/0638.image_5F00_27B013B4.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/38/15/metablogapi/1665.image_thumb_77A5C232.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-38-15-metablogapi/1665.image_5F00_thumb_5F00_77A5C232.png" width="640" height="171" /></a></p>  <p>&#160;</p>  <p>Notice that the usual<b><i> FederationAutheticationModule</i></b> is not there. That’s because its responsibilities are now replaced by the handler. The SAM however is there and therefore <u>it will automatically reconstruct</u> the <b><i>ClaimsPrincipal</i></b> if it finds the <b><i>FedAuth</i></b> cookies created inside the handler. The result is that the application now will receive the complete <b><i>ClaimsPrincipal</i></b> on each request.</p>  <p>This is the “<i>CustomerList.aspx</i>” page (post authentication):</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/38/15/metablogapi/2335.image_29E94A18.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-38-15-metablogapi/2335.image_5F00_29E94A18.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/38/15/metablogapi/2744.image_thumb_05280CD4.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-38-15-metablogapi/2744.image_5F00_thumb_5F00_05280CD4.png" width="640" height="479" /></a></p>  <p>The second big change was to refactor all <b><i>RoleHelper</i></b> methods to use the standard interfaces:</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/38/15/metablogapi/4722.image_125E701A.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-38-15-metablogapi/4722.image_5F00_125E701A.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/38/15/metablogapi/4338.image_thumb_2D2A9626.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-38-15-metablogapi/4338.image_5F00_thumb_5F00_2D2A9626.png" width="640" height="143" /></a></p>  <p>An interesting case is the <b><i>IsGuest </i></b> property that originally checked that the user was a member of any role (the roles a user was a member of were stored in session too, which I’m not a big fan of). This is now resolved with this single query to the Claims collection:</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/38/15/metablogapi/6813.image_0B5EBD95.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-38-15-metablogapi/6813.image_5F00_0B5EBD95.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/38/15/metablogapi/5811.image_thumb_453DDAB4.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-38-15-metablogapi/5811.image_5F00_thumb_5F00_453DDAB4.png" width="573" height="171" /></a></p>  <p>The structure of the app was left more or less intact, but I did delete a lot of code that was not needed anymore.</p>  <p>Again, a big advantage of this approach is that it allows you to plug any existing standard infrastructure into the app (like<b><i> [Authorize] </i></b>attribute in an MVC application) and it “just works”.</p>  <p>In this example, the <b><i>“CustomerList.aspx”</i></b> page for example has this code at the beginning of <strong><em>PageLoad</em></strong> event:</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/38/15/metablogapi/1526.image_2E9B8C6D.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-38-15-metablogapi/1526.image_5F00_2E9B8C6D.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/38/15/metablogapi/3276.image_thumb_2D56F38E.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-38-15-metablogapi/3276.image_5F00_thumb_5F00_2D56F38E.png" width="640" height="160" /></a></p>  <p>As mentioned above, the <b><i>RoleHelper</i></b> methods are now using the <b><i>ClaimsPrincipal</i></b> to resolve the “<b><i>IsInRole</i></b>” question (through <strong><em>HttpContext.User.IsInRole</em></strong>). But you could achieve something similar with pure ASP.NET infrastructure. Just as a quick test, I added this to the web.config:</p>  <p>&#160;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/38/15/metablogapi/3683.image_2BA627BA.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-38-15-metablogapi/3683.image_5F00_2BA627BA.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/38/15/metablogapi/0045.image_thumb_7F892AC8.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-38-15-metablogapi/0045.image_5F00_thumb_5F00_7F892AC8.png" width="379" height="159" /></a></p>  <p>And now when trying to browse “<i>CustomerList.aspx</i>” you get an “Access Denied” because the user is not supplying a claim of type role with value “<i>SuperAdministrator</i>”:</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/38/15/metablogapi/5758.clip_image006_57767BA9.jpg" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-38-15-metablogapi/5758.clip_5F00_image006_5F00_57767BA9.jpg"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="clip_image006" border="0" alt="clip_image006" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/38/15/metablogapi/6825.clip_image006_thumb_27D85D1D.jpg" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-38-15-metablogapi/6825.clip_5F00_image006_5F00_thumb_5F00_27D85D1D.jpg" width="640" height="306" /></a></p>  <p>&#160;</p>  <h4>Final notes</h4>  <p>A more elegant approach would probably be to use deeper WIF extensibility to implement the appropriate “protocol”, etc., but that seems to be justified only if you are really implementing a “complete” protocol/handler (SAMLP in this case). That’s much harder work.</p>  <p>This is a more pragmatic approach that works for<i> this</i> case. I think it fulfills the goal of isolating as much “plumbing” as possible from the application code. When WIF evolves to support SAMLP natively for example, you would simply replace infrastructure, leaving your app mostly unchanged.</p>  <p>Finally, one last observation: we are calling the Intuit API a couple times to retrieve user info. This could be completely avoided if the original SAML token sent by Intuit contained the information right away! There might be good reasons why they are not doing it today. Maybe it’s in their roadmap. Once again, with this design, changes in your app would be minimized if that happens. </p>  <p>This was my first experience with Intuit’s platform and I was surprised how easy it was to get going and for their excellent support. </p>  <p>I want to thank Daz Wilkin (brabant court Founder) for spending a whole day with us. Jarred Keneally from Intuit for all his assistance and Federico Boerr &amp; Scott Densmore from my team for helping me polish the implementation.</p>]]></content:encoded>
    </item>
    <item>
      <title>Authentication in WP7 client with REST Services–Part II</title>
      <link>https://docs.microsoft.com/archive/blogs/eugeniop/authentication-in-wp7-client-with-rest-servicespart-ii</link>
      <pubDate>Sat, 02 Apr 2011 14:15:25 GMT</pubDate>
      <dc:creator><![CDATA[Eugenio Pace - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/eugeniop/2011/04/02/authentication-in-wp7-client-with-rest-servicespart-ii/</guid>
      <description><![CDATA[In the previous post I covered the “semi-passive” way for authentication between a Windows Phone 7...]]></description>
      <content:encoded><![CDATA[<p>In the previous post I covered the “semi-passive” way for authentication between a Windows Phone 7 client and a REST service. This post completes the information with the “active” way.</p>  <p>There’s nothing unexpected here really:</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/38/15/metablogapi/5102.image_1232C7C4.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-38-15-metablogapi/5102.image_5F00_1232C7C4.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/38/15/metablogapi/2072.image_thumb_27CD0061.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-38-15-metablogapi/2072.image_5F00_thumb_5F00_27CD0061.png" width="640" height="458" /></a></p>  <ol>   <li>We call the Identity Provider using a <em><strong>RequestSecurityToken</strong></em> message (RST)</li>    <li>We send the SAML token to ACS and get a “Simple Web Token” (SWT) </li>    <li>We call the service with the SWT as in the previous example using the Web browser</li> </ol>  <p>The only tricky thing is that there’s no library in the phone runtime for sending the RST message to the STS. In a desktop application you’d simply use WIF or plain WCF (with the right binding). But neither is available on WP7. So step 1 and 2 require some custom code. </p>  <p>For step 1 we are creating the RST manually:</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/38/15/metablogapi/6114.image_2[198.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-38-15-metablogapi/6114.image_5F00_25B00198.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/38/15/metablogapi/3173.image_thumb_49E4C04D.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-38-15-metablogapi/3173.image_5F00_thumb_5F00_49E4C04D.png" width="640" height="429" /></a></p>  <p>All those interactions are fairly easy to compose with the Rx framework, so the call gets really compact and easy to read:</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/38/15/metablogapi/2084.image_12DABC47.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-38-15-metablogapi/2084.image_5F00_12DABC47.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/38/15/metablogapi/7183.image_thumb_55D68AB4.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-38-15-metablogapi/7183.image_5F00_thumb_5F00_55D68AB4.png" width="640" height="338" /></a></p>  <p>The <strong><em>AddAuthorizationHeader</em></strong> extension method now:</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/38/15/metablogapi/1004.image_1AA2AEE9.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-38-15-metablogapi/1004.image_5F00_1AA2AEE9.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/38/15/metablogapi/7776.image_thumb_6E85B1F7.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-38-15-metablogapi/7776.image_5F00_thumb_5F00_6E85B1F7.png" width="640" height="276" /></a></p>  <p>All this is “plumbing code” that is written once and used many hopefully.</p>  <p>One potential disadvantage of this approach compared to the previous one, is less flexibility in dealing with many identity providers. Remember that ACS can have many IdPs it could use and have the user potentially pick one from a list (a.k.a. Home Realm Discovery). None of that is built in this example (but you could of course). In a browser all of that is handled server side and just works.</p>  <p>The other disadvantage is that this only works with WS-Trust STSs. If we wanted to say, authenticate with other providers you will have to implement the protocol and then update the client code. When using the browser all of that is handled server side. You can add/remove/take advantage of any upgrades to ACS with no changes to be made on the phone app.</p>  <p>On the other hand, if you don’t need all that flexibility, it is a lighter weight and more direct solution: less round-trips, simpler code, etc. That could be case for a more enterprise oriented app, where the STS could be your corporate ADFS for example. That is unlikely to change frequently. </p>  <p>We are still adjusting some details on the full sample, but it is very likely it will be included in the next drop on <a href="https://claimsid.codpelex.com">CodePlex site</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>Authentication in WP7 client with REST Services–Part I</title>
      <link>https://docs.microsoft.com/archive/blogs/eugeniop/authentication-in-wp7-client-with-rest-servicespart-i</link>
      <pubDate>Thu, 24 Mar 2011 20:58:03 GMT</pubDate>
      <dc:creator><![CDATA[Eugenio Pace - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/eugeniop/2011/03/24/authentication-in-wp7-client-with-rest-servicespart-i/</guid>
      <description><![CDATA[In the last drop, we included a sample that demonstrates how to secure a REST web service with ACS,...]]></description>
      <content:encoded><![CDATA[<p>In the last drop, we included a sample that demonstrates how to secure a REST web service with ACS, and a client calling that service running in a different security realm:</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/38/15/metablogapi/8037.image_4C62E78E.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-38-15-metablogapi/8037.image_5F00_4C62E78E.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/38/15/metablogapi/0027.image_thumb_280DDD3F.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-38-15-metablogapi/0027.image_5F00_thumb_5F00_280DDD3F.png" width="640" height="404" /></a></p>  <p>In this case, ACS is the bridge between the WS-Trust/SAML world (Litware in the diagram) and the REST/SWT side (Adatum’s a-Order app)</p>  <p>This is just a technical variation of the original sample we had in the book, that was purely based on SOAP web services (WS-Trust/SAML only):</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/38/15/metablogapi/0676.image_0CF50E31.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-38-15-metablogapi/0676.image_5F00_0CF50E31.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/38/15/metablogapi/2555.image_thumb_042505E5.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-38-15-metablogapi/2555.image_5F00_thumb_5F00_042505E5.png" width="640" height="294" /></a></p>  <p>&#160;</p>  <p>But we have another example in preparation which is a Windows Phone 7 Client. Interacting with REST based APIs is pretty popular with mobile devices. In fact is what we decided to use when building the sample for our <a href="https://msdn.microsoft.com/en-us/library/gg490765.aspx">Windows Phone 7 Developer Guide</a>.</p>  <p>There’s no WIF for the phone yet, so implementing this in the WP7 takes a little bit of extra work. And, as usual, there’re many ways to solve it.</p>  <h3>The “semi-active” way:</h3>  <p>This is a very popular approach. In fact, it’s the way you’re likely to see this done with the phone in many samples. It essentially involves using an embedded browser (browser = IE) and delegate to it all token negotiation until it gets the token you want. This negotiation is nothing else than the classic “passive” token negotiation, based on HTTP redirects that we have discussed <em>ad infinitum, ad nauseam</em>. </p>  <p>The trick is in the <em>“until you get the token you want”</em>. Because the browser is embedded in the host application (a Silverlight app in the phone), you can handle and react to all kind of events raised by it. A particular useful event to handle is <strong><em>Navigating</em></strong>. This signals that the browser is trying to initiate an HTTP request to a server. We know that the last interaction in the token negotiation (passive) is actually posting the token back the the relying party.&#160; That’s the token we want!</p>  <p>&#160;</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/38/15/metablogapi/3125.image_30618CC9.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-38-15-metablogapi/3125.image_5F00_30618CC9.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/38/15/metablogapi/7848.image_thumb_71AC8F62.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-38-15-metablogapi/7848.image_5F00_thumb_5F00_71AC8F62.png" width="640" height="423" /></a></p>  <p>So if we have a way of identifying the last POST attempt by the browser, then we have the token we need. There are many ways of doing this, but most look like this:</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/38/15/metablogapi/7357.image_5693C054.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-38-15-metablogapi/7357.image_5F00_5693C054.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/38/15/metablogapi/4212.image_thumb_0AC7E99B.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-38-15-metablogapi/4212.image_5F00_thumb_5F00_0AC7E99B.png" width="644" height="224" /></a></p>  <p>In this case we are using the “ReplyTo” address, that has been configured in ACS with a specific value “break_here” and then extract the token with the browser control <strong><em>SaveToString</em></strong> method. The Regex functions you see there, simply extract the token from the entire web page.</p>  <p>Once you’ve got the token, then you use it in the web service call and <em>voila</em>!</p>  <p>With this approach your phone code is completely agnostic of how you actually get the final token. This works with any identity provider, and any protocol supported by the browser. </p>  <p>Here’re some screenshots of our sample:</p>  <table border="0" cellspacing="0" cellpadding="2" width="400"><tbody>     <tr>       <td valign="top" width="100"><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/38/15/metablogapi/1256.image_01F7E14F.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-38-15-metablogapi/1256.image_5F00_01F7E14F.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/38/15/metablogapi/3225.image_thumb_3ECC6321.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-38-15-metablogapi/3225.image_5F00_thumb_5F00_3ECC6321.png" width="189" height="350" /></a></td>        <td valign="top" width="100"><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/38/15/metablogapi/5270.image_4FD09104.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-38-15-metablogapi/5270.image_5F00_4FD09104.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/38/15/metablogapi/7532.image_thumb_6C8A0619.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-38-15-metablogapi/7532.image_5F00_thumb_5F00_6C8A0619.png" width="188" height="350" /></a></td>        <td valign="top" width="99"><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/38/15/metablogapi/5775.image_5968D96D.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-38-15-metablogapi/5775.image_5F00_5968D96D.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/38/15/metablogapi/5282.image_thumb_560741C5.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-38-15-metablogapi/5282.image_5F00_thumb_5F00_560741C5.png" width="189" height="351" /></a></td>        <td valign="top" width="101">&nbsp;</td>     </tr>   </tbody></table>  <p>The first one is the home screen (SL). The second one shows the embedded browser with a login screen (adjusted for the size of the phone screen) and the last one the result of calling the service.</p>  <p>JavaScript in the browser control in the phone has to be explicitly enabled:</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/38/15/metablogapi/1663.image_2DF492A6.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-38-15-metablogapi/1663.image_5F00_2DF492A6.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/38/15/metablogapi/8507.image_thumb_064E167C.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-38-15-metablogapi/8507.image_5F00_thumb_5F00_064E167C.png" width="640" height="190" /></a></p>  <p> If you don’t do this, the automatic redirections will not happen and you will see this:</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/38/15/metablogapi/1050.image_40C91650.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-38-15-metablogapi/1050.image_5F00_40C91650.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/38/15/metablogapi/6763.image_thumb_01A7E5F5.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-38-15-metablogapi/6763.image_5F00_thumb_5F00_01A7E5F5.png" width="257" height="480" /></a></p>  <p>You will have to click on the (small) button for the process to continue. This is exactly the same behavior that happens with a browser on a desktop (only that in most cases scripting is enabled).</p>  <p>In next post I’ll go into more detail of the other option: the “active” client. By the way, this sample will be posted to our <a href="https://claimsid.codeplex.com">CodePlex site</a> soon. </p>]]></content:encoded>
    </item>
    <item>
      <title>Drop #2 of Claims Identity Guide on CodePlex</title>
      <link>https://docs.microsoft.com/archive/blogs/eugeniop/drop-2-of-claims-identity-guide-on-codeplex</link>
      <pubDate>Tue, 22 Mar 2011 13:59:45 GMT</pubDate>
      <dc:creator><![CDATA[Eugenio Pace - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/eugeniop/2011/03/22/drop-2-of-claims-identity-guide-on-codeplex/</guid>
      <description><![CDATA[Second drop of samples and draft chapters is now available on CodePlex. Highlights:     All 3...]]></description>
      <content:encoded><![CDATA[<p>Second drop of samples and draft chapters is <a href="https://claimsid.codeplex.com/releases/view/62929">now available</a> on CodePlex. Highlights:</p>  <ol>   <li>All 3 samples for ACS v2: (&quot;<em><strong>ACS as a Federation Provider</strong></em>&quot;, &quot;<strong><em>ACS as a FP with Multiple Business Partners</em></strong>&quot; and &quot;<strong><em>ACS and REST endpoints</em></strong>&quot;). These samples extend all the original &quot;Federation samples&quot; in the guide with new capabilities (e.g. protocol transition, REST services, etc.)</li>    <li>Two new ACS specific chapters and a new appendix on message sequences</li> </ol>  <p>Most samples will work without an ACS account, since we pre-provisioned one for you. The exception is the “ACS and Multiple Partners”, because this requires credentials to modify ACS configuration. You will need to subscribe to your own instance of ACS to fully exercise the code (especially the “sign-up” process).</p>  <p>The 2 additions to the appendix are:</p>  <p>Message exchanges between Client/RP/ACS/Issuer:</p>  <p>&#160;</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/38/15/metablogapi/4431.image_3EC46D5A.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-38-15-metablogapi/4431.image_5F00_3EC46D5A.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/38/15/metablogapi/5516.image_thumb_13DBE37B.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-38-15-metablogapi/5516.image_5F00_thumb_5F00_13DBE37B.png" width="545" height="772" /></a></p>  <p>&#160;</p>  <p>And the Single-Sign-Out&#160; process (step 10 below):</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/38/15/metablogapi/7144.image_45675110.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-38-15-metablogapi/7144.image_5F00_45675110.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/38/15/metablogapi/6165.image_thumb_448EEB26.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-38-15-metablogapi/6165.image_5F00_thumb_5F00_448EEB26.png" width="552" height="772" /></a></p>  <p>You will also find the Fiddler sessions with explained message contents.</p>  <p>Feedback always welcome!</p>]]></content:encoded>
    </item>
    <item>
      <title>SaaSGrid and Identity</title>
      <link>https://docs.microsoft.com/archive/blogs/eugeniop/saasgrid-and-identity</link>
      <pubDate>Mon, 21 Mar 2011 14:57:04 GMT</pubDate>
      <dc:creator><![CDATA[Eugenio Pace - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/eugeniop/2011/03/21/saasgrid-and-identity/</guid>
      <description><![CDATA[Apprenda’s SaaSGrid is now “claims enabled”!&#160; This is fantastic news. Any SG customer can now...]]></description>
      <content:encoded><![CDATA[<p>Apprenda’s <a href="https://apprenda.com/saasgrid/">SaaSGrid</a> is now “claims enabled”!&#160; This is fantastic news. Any SG customer can now enjoy the benefits of claims based identity: simpler user management, easy federation with business partners, support for multiple identity providers, greater interoperability, etc. </p>  <p>SG support for claims based identity maps nicely with what’s described in the <strong><em>“Claims Identity Guide – Federation with Multiple Partners</em></strong>” <a href="https://msdn.microsoft.com/en-us/library/ff359105.aspx">chapter</a>. And now with the <a href="https://claimsid.codeplex.com/releases/view/62929">new chapter</a> published on CodePlex: “<strong><em>Federation with Multiple Partners and Windows Azure AppFabric Access Control Service</em></strong>”.</p>  <p>Join <a href="https://apprenda.com/company/management-team/">Matt Ammerman</a> and me on March 30th for an identity-full <a href="https://www3.gotomeeting.com/register/976980454">webinar</a>. The agenda for the session is:</p>  <ol>   <li>Introduction to Claims based identity: principles and architecture.</li>    <li>Key problems solved by claims based identity, including an update on current standards, frameworks and tools on the Microsoft platform.</li>    <li>Drop-in Federated Identity and Claims Enablement for .NET applications via SaaSGrid (Live Demo)</li> </ol>  <p>&#160;</p>  <p>Register for the live session here: <a title="https://www3.gotomeeting.com/register/976980454" href="https://www3.gotomeeting.com/register/976980454">https://www3.gotomeeting.com/register/976980454</a></p>]]></content:encoded>
    </item>
    <item>
      <title>Web Single Sign Out–Part II</title>
      <link>https://docs.microsoft.com/archive/blogs/eugeniop/web-single-sign-outpart-ii</link>
      <pubDate>Thu, 24 Feb 2011 13:01:17 GMT</pubDate>
      <dc:creator><![CDATA[Eugenio Pace - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/eugeniop/2011/02/24/web-single-sign-outpart-ii/</guid>
      <description><![CDATA[&#160;  Following up on previous post, there were 2 questions:     Where do these green checks...]]></description>
      <content:encoded><![CDATA[<p>&#160;</p>  <p>Following up on <a href="https://blogs.msdn.com/b/eugeniop/archive/2011/02/16/single-sign-out-websso.aspx">previous post</a>, there were 2 questions:</p>  <blockquote>   <p><em>Where do these green checks images come from? There are nowhere in a-Order or in a-Expense… you would spend hours looking for the PNG, or JPG or GIF and you will never find it, because it is very well concealed. Can you guess where it comes from?</em></p> </blockquote>  <p>I was referring to the green checks displayed here:</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/38/15/metablogapi/2061.image_5DE0DA34.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-38-15-metablogapi/2061.image_5F00_5DE0DA34.png"><img title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/38/15/metablogapi/1411.image_thumb_4FA26144.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-38-15-metablogapi/1411.image_5F00_thumb_5F00_4FA26144.png" width="640" height="478" /></a></p>  <p>The <strong><em>src</em></strong> for these is a rather cryptic&#160; <strong><em>src=https://localhost/a-Order/?wa=signoutcleanup1.0</em></strong></p>  <p>And the answer is: it’s coming from within WIF (the FAM more specifically). If you explore the FAM with Reflector you will see a byte array embedded in the code. That byte array is the GIF for the green check. Exercise to the reader: is this the only behaviour? Can the FAM do something else? under which circumstances?</p>  <p>The second question was:</p>  <blockquote>   <p><em><strong>Bonus question</strong>: how does the IdP know all the applications the user accessed to?</em></p> </blockquote>  <p>No WIF magic here. The issuer will have to keep a list of all the RP. In our sample (that we expect to release really soon) we use exactly the technique described in Vittorio’s book. We have a small helper class “<em><strong>SingleSignonManager</strong></em>” that keeps track of RPs in cookies:</p>  <p>&#160;</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/38/15/metablogapi/7635.image_13528127.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-38-15-metablogapi/7635.image_5F00_13528127.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/38/15/metablogapi/3438.image_thumb_4907C681.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-38-15-metablogapi/3438.image_5F00_thumb_5F00_4907C681.png" width="640" height="197" /></a></p>  <p>&#160;</p>  <p>Then, when the signout request is received, we simply iterate over the list and return the right markup:</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/38/15/metablogapi/1385.image_434CACDB.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-38-15-metablogapi/1385.image_5F00_434CACDB.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/38/15/metablogapi/7635.image_thumb_0CFB84CC.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-38-15-metablogapi/7635.image_5F00_thumb_5F00_0CFB84CC.png" width="640" height="129" /></a></p>  <p>The <strong><em>SingleSignoutManager</em></strong> class is mentioned in Vittorio’s book but not available there, so we included it in the sample. </p>]]></content:encoded>
    </item>
  </channel>
</rss>