<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><title>Wictor Wilén</title><link>http://www.wictorwilen.se/</link><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/WictorWilen" /><description>The blog of Wictor Wilén</description><language>en-us</language><image><link>http://www.wictorwilen.se/</link><url>http://www.wictorwilen.se/images/wwicon_32.png</url><title>Wictor Wilén</title></image><copyright>Copyright 2006-2009, Wictor Wilén</copyright><managingEditor>wictor@wictorwilen.se (Wictor Wilén)</managingEditor><generator>WW</generator><atom:author xmlns:atom="http://www.w3.org/2005/Atom">
      <atom:name>wictor@wictorwilen.se (Wictor Wilén)</atom:name>
    </atom:author><cf:listinfo xmlns:cf="http://www.microsoft.com/schemas/rss/core/2005"> 
      <cf:sort label="Date" element="pubDate" default="true" data-type="date" />
      <cf:sort ns="http://purl.org/rss/1.0/modules/slash/" element="comments" label="Comments" data-type="number" />
      <cf:sort element="title" label="Title" data-type="text" />
      <cf:group element="category" label="Category/tag" />
    </cf:listinfo><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/WictorWilen" /><feedburner:info uri="wictorwilen" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>WictorWilen</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><item><title>Understanding the Application Addresses Refresh Job in SharePoint 2010</title><link>http://feedproxy.google.com/~r/WictorWilen/~3/5kHq-zxJVUY/Understanding-the-Application-Addresses-Refresh-Job-in-SharePoint-2010.aspx</link><category>SharePoint 2010</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Wictor Wilén</dc:creator><pubDate>Sat, 19 May 2012 19:45:57 PDT</pubDate><guid isPermaLink="false">http://www.wictorwilen.se/Post/Understanding-the-Application-Addresses-Refresh-Job-in-SharePoint-2010.aspx</guid><description>&lt;p&gt;In this article I would like to give you some information about a very important &lt;a href="http://technet.microsoft.com/en-us/library/cc678870.aspx"&gt;timer job&lt;/a&gt; in SharePoint 2010 - the &lt;strong&gt;Application Addresses Refresh Job&lt;/strong&gt;. If you do not understand what it is used for you might see some strange (to you) error messages when configuring SharePoint. Even if you're familiar with it it might be a good idea to continue reading.&lt;/p&gt;  &lt;h3&gt;&lt;/h3&gt;  &lt;h3&gt;Purpose of the Application Addresses Refresh Job&lt;/h3&gt;  &lt;p&gt;The Application Addresses Refresh Job has one specific job to do - &lt;u&gt;keep track of all available and online instances of all service application end-points&lt;/u&gt;. This means that whenever a proxy requests an endpoint for a service application it will ask the Topology Service (the Application Discovery and Load Balancer Service) for an endpoint. The Topology Service keeps a list of the endpoints that has been discovered by the Application Addresses Refresh Job and passes on one of these endpoints to the proxy, using the load balancing algorithm, which uses that endpoint to talk to the service application. So far so good...&lt;/p&gt;  &lt;h3&gt;So, what could go wrong here...&lt;/h3&gt;  &lt;p&gt;&lt;img style="margin: 0px 0px 0px 4px; display: inline; float: right" title="SNAGHTML7f12719" alt="SNAGHTML7f12719" align="right" src="http://www.wictorwilen.se/Windows-Live-Writer/3f66be622cf8_AF9D/SNAGHTML7f12719_1.png" width="301" height="190" /&gt;The problem is that this job only runs (by default) &lt;strong&gt;every 15 minutes&lt;/strong&gt;. And unless you follow the first rule of Spence - "Step away from the keyboard", you will experience some interesting side effects.&lt;/p&gt;  &lt;h4&gt;Service Application configuration&lt;/h4&gt;  &lt;p&gt;One of the first times you'll experience this 15 minute delays is when creating Service Applications in SharePoint 2010. Let's take the Secure Store as an example. You create the Secure Store Service Application and trigger happy as you are you click on it to configure the Secure Store Key. And most of the times you will see an error like this:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/3f66be622cf8_AF9D/SNAGHTML7f61a4d.png"&gt;&lt;img style="display: inline" title="Cannot complete this action as the Secure Store Shared Service is not responding. Please contact your administrator." alt="Cannot complete this action as the Secure Store Shared Service is not responding. Please contact your administrator." src="http://www.wictorwilen.se/Windows-Live-Writer/3f66be622cf8_AF9D/SNAGHTML7f61a4d_thumb.png" width="640" height="170" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;You hit the reload button a couple of times, starts to fiddle with permissions but nothing happens. Finally you realize - ahh, I haven't started the Service Instance of the Secure Store, so you start that and head back to the Secure Store Service App to continue to configure it. But, you still receive the same error message. You do some more fiddling with permissions etc until your totally lost in your configuration madness. You do some Binging on the Interwebs and suddenly it just works...&lt;/p&gt;  &lt;p&gt;What really happened was that the Application Addresses Refresh Job run, meanwhile you were furiously blaming the product group for a crappy product, and found a valid and working endpoint for the Secure Store Service App. And now the Topology Service are aware of the endpoint and can pass it on to the proxy.&lt;/p&gt;  &lt;p&gt;What you really should have done is; first start the Service Instance, then create the Service Application.  And if you still get the error message, manually kicking off the timer job will do the trick.&lt;/p&gt;  &lt;h4&gt;&lt;/h4&gt;  &lt;h4&gt;Farm maintenance&lt;/h4&gt;  &lt;p&gt;Another common scenario where similar results may be seen is when you do some farm reconfiguring; such as adding/removing/rebooting servers, moving Service Application Instances from one server to another (stop on one server and start on another). You could do this while your farm is hot and running but make sure to start the timer job whenever you do a change (start/stop and instance or add/remove a server). Worst case your end-users will be unable to use the Service Application for at the most 15 minutes. One scenario where I've seen it happen is when you take a server out of the load balancer rotation to do Windows patching and then you need to reboot that server - the service application will be unavailable for that time on that machine (duh!). So if you have for instance three servers running this service instance, every third (Round Robin) request will fail. Running the timer job immediately after starting the re-boot sequence will mitigate any errors.&lt;/p&gt;  &lt;h3&gt;&lt;/h3&gt;  &lt;h3&gt;Should I change the Timer Job schedule?&lt;/h3&gt;  &lt;p&gt;Well, this is totally up to you. From what I've seen it's not a "heavy" job and you could lower the interval. But under normal circumstances 15 minutes should do the trick. But when doing maintenance, as discussed above, lowering the interval might be a good idea.&lt;/p&gt;  &lt;h3&gt;Summary&lt;/h3&gt;  &lt;p&gt;A short, and pretty intuitive, post about a very, very important Timer Job in SharePoint 2010 - the Application Addresses Refresh Job. Make sure that this job is running and behaving - otherwise your end-users (and proxies) will not be able to talk to the service application instances.&lt;/p&gt;  &lt;p&gt;&lt;font color="#d16349"&gt;[Update 2012-05-20]&lt;/font&gt; If you are interested in more details on the topology web service and the service application load balancing I recommend that you read the following post by Josh Gavant: &lt;a href="http://blogs.msdn.com/b/besidethepoint/archive/2011/02/19/how-i-learned-to-stop-worrying-and-love-the-sharepoint-topology-service.aspx"&gt;How I learned to Stop Worrying and Love the SharePoint Topology Service&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/q99q9_KiTYbKNMvww7HW85MUhbA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/q99q9_KiTYbKNMvww7HW85MUhbA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/q99q9_KiTYbKNMvww7HW85MUhbA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/q99q9_KiTYbKNMvww7HW85MUhbA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/WictorWilen?a=5kHq-zxJVUY:L2RkLyE2mRM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WictorWilen?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/WictorWilen?a=5kHq-zxJVUY:L2RkLyE2mRM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WictorWilen?i=5kHq-zxJVUY:L2RkLyE2mRM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/WictorWilen?a=5kHq-zxJVUY:L2RkLyE2mRM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WictorWilen?i=5kHq-zxJVUY:L2RkLyE2mRM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/WictorWilen?a=5kHq-zxJVUY:L2RkLyE2mRM:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WictorWilen?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/WictorWilen?a=5kHq-zxJVUY:L2RkLyE2mRM:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WictorWilen?i=5kHq-zxJVUY:L2RkLyE2mRM:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/WictorWilen/~4/5kHq-zxJVUY" height="1" width="1"/&gt;</description><atom:author xmlns:atom="http://www.w3.org/2005/Atom">
                    <atom:name>Wictor Wilén</atom:name>
                </atom:author><atom:published xmlns:atom="http://www.w3.org/2005/Atom">2012-05-20 02:45:57Z</atom:published><atom:updated xmlns:atom="http://www.w3.org/2005/Atom">2012-05-20 02:45:57Z</atom:updated><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">1</slash:comments><trackback:ping xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">http://www.wictorwilen.se/trackback.aspx?id=639</trackback:ping><feedburner:origLink>http://www.wictorwilen.se/Post/Understanding-the-Application-Addresses-Refresh-Job-in-SharePoint-2010.aspx</feedburner:origLink></item><item><title>International SharePoint Conference 2012 wrap-up</title><link>http://feedproxy.google.com/~r/WictorWilen/~3/ghLwb_MH8-4/International-SharePoint-Conference-2012-wrapup.aspx</link><category>SharePoint</category><category>Presentations</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Wictor Wilén</dc:creator><pubDate>Mon, 30 Apr 2012 20:41:07 PDT</pubDate><guid isPermaLink="false">http://www.wictorwilen.se/Post/International-SharePoint-Conference-2012-wrapup.aspx</guid><description>&lt;p&gt;It’s been almost a week since the International SharePoint Conference ended, the first of its kind – and what a conference it was!&lt;/p&gt;  &lt;p&gt;I was honored to be part of the developer track, together with top-notch speakers and developers such as &lt;a href="http://www.andrewconnell.com/"&gt;Andrew Connell&lt;/a&gt;, &lt;a href="http://sharepointtales.wordpress.com/"&gt;Ben Robb&lt;/a&gt;, &lt;a href="http://www.sharepointcowboy.com/"&gt;Eric Schupps&lt;/a&gt;, &lt;a href="http://www.ableblue.com/blog"&gt;Matthew McDermott&lt;/a&gt;, &lt;a href="http://www.sharepointchick.com/"&gt;Mirjam van Olst&lt;/a&gt;, &lt;a href="http://www.schaeflein.net/blog"&gt;Paul Schaeflein&lt;/a&gt;, &lt;a href="http://www.todd-carter.com/"&gt;Todd Carter&lt;/a&gt; and &lt;a href="http://blog.mastykarz.nl/"&gt;Waldek Mastykarz&lt;/a&gt;. We’ve been working together on this “project” for a couple of months having weekly calls trying to build a solution that we would use for the developer track. I really think that we did a good job and that we covered a lot of the important pieces in a SharePoint project – that normally isn’t covered on conferences. And I do hope that you who attended it, enjoyed the track and what we tried to show you.&lt;/p&gt;  &lt;p&gt;Everything that we built and presented is available for download. We’ve created a CodePlex project where we have uploaded the functional specs, all the session demos and the final solutions demoed. Go grab the stuff here: &lt;a href="http://spkbase.codeplex.com"&gt;http://spkbase.codeplex.com&lt;/a&gt;. And if you have any comments or questions – use the CodePlex discussion features and let the discussion start.&lt;/p&gt;  &lt;p&gt;Waldek and I started the dev track by building a couple of Visual Studio Extensions. After some initial problems with the Visual Studio Gallery site we finally got them published. Just search for “ISC” in the Extension Manager. And if you wait just a couple of more days – all this will be integrated into &lt;a href="http://cksdev.codeplex.com/"&gt;CKS:Dev&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="The ISC extensions in the Visual Studio Online Gallery" border="0" alt="The ISC extensions in the Visual Studio Online Gallery" src="http://www.wictorwilen.se/Windows-Live-Writer/International-SharePoint-Conference-2012_D7BC/SNAGHTMLfb22ad9%5B4%5D_1.png" width="608" height="193" /&gt;&lt;/p&gt;  &lt;p&gt;Next year, our amazing host Steve Smith, will host the &lt;a href="http://www.sharepointevolutionconference.com/"&gt;SharePoint Evolution Conference 2013&lt;/a&gt;. I would not miss it for the world!&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/msAsHXfHmJw-A-6Q7Zp1jCY4ytk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/msAsHXfHmJw-A-6Q7Zp1jCY4ytk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/msAsHXfHmJw-A-6Q7Zp1jCY4ytk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/msAsHXfHmJw-A-6Q7Zp1jCY4ytk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/WictorWilen?a=ghLwb_MH8-4:1xxYdj6Hh4Y:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WictorWilen?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/WictorWilen?a=ghLwb_MH8-4:1xxYdj6Hh4Y:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WictorWilen?i=ghLwb_MH8-4:1xxYdj6Hh4Y:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/WictorWilen?a=ghLwb_MH8-4:1xxYdj6Hh4Y:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WictorWilen?i=ghLwb_MH8-4:1xxYdj6Hh4Y:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/WictorWilen?a=ghLwb_MH8-4:1xxYdj6Hh4Y:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WictorWilen?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/WictorWilen?a=ghLwb_MH8-4:1xxYdj6Hh4Y:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WictorWilen?i=ghLwb_MH8-4:1xxYdj6Hh4Y:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/WictorWilen/~4/ghLwb_MH8-4" height="1" width="1"/&gt;</description><atom:author xmlns:atom="http://www.w3.org/2005/Atom">
                    <atom:name>Wictor Wilén</atom:name>
                </atom:author><atom:published xmlns:atom="http://www.w3.org/2005/Atom">2012-05-01 03:41:07Z</atom:published><atom:updated xmlns:atom="http://www.w3.org/2005/Atom">2012-05-01 03:41:07Z</atom:updated><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments><trackback:ping xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">http://www.wictorwilen.se/trackback.aspx?id=638</trackback:ping><feedburner:origLink>http://www.wictorwilen.se/Post/International-SharePoint-Conference-2012-wrapup.aspx</feedburner:origLink></item><item><title>Microsoft Most Valuable Professional - SharePoint Server for another year</title><link>http://feedproxy.google.com/~r/WictorWilen/~3/Mq8iuk5C-GI/Microsoft-Most-Valuable-Professional-SharePoint-Server-for-another-year.aspx</link><category>Microsoft</category><category>SharePoint</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Wictor Wilén</dc:creator><pubDate>Sat, 31 Mar 2012 22:23:46 PDT</pubDate><guid isPermaLink="false">http://www.wictorwilen.se/Post/Microsoft-Most-Valuable-Professional-SharePoint-Server-for-another-year.aspx</guid><description>&lt;p&gt;It's Aprils fools day and together with a lot of other MVP's around the world we're checking our junk mail folder for the e-mail that says that we have been renewed. I just got mine (actually not in the junk for the first time). This was my second renewal and I have now been awarded MVP for three consecutive years (&lt;a href="http://www.wictorwilen.se/Post/I-am-a-SharePoint-Server-MVP.aspx"&gt;2010&lt;/a&gt;, &lt;a href="http://www.wictorwilen.se/Post/SharePoint-MVP-for-another-year.aspx"&gt;2011&lt;/a&gt;).&lt;/p&gt;  &lt;p&gt;&lt;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="MVP" border="0" alt="MVP" src="http://www.wictorwilen.se/Windows-Live-Writer/Microsoft-Most-Valuabl_F1F0/image_3.png" width="654" height="129" /&gt;&lt;/p&gt;  &lt;p&gt;Thanks to everyone, colleagues, friends and &lt;a href="http://www.connecta.se"&gt;Connecta&lt;/a&gt;, who have supported me the last year. Looking forward to another 12 months of really exciting SharePoint work and happenings.&lt;/p&gt;  &lt;p&gt;The Microsoft MVP program is an &lt;strong&gt;award (not a certification) &lt;/strong&gt;given to community leaders around the world, for their contributions to the community for the last 12 months. The MVP award is valid for one year and each awardee has to continue to contribute to the community to be renewed.&lt;/p&gt;  &lt;p&gt;Do you want to know more about the MVP program, &lt;a href="http://mvp.support.microsoft.com/"&gt;then head on over to the MVP site&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/G8pX3utzwsvsjvFFePlj-fCit1w/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/G8pX3utzwsvsjvFFePlj-fCit1w/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/G8pX3utzwsvsjvFFePlj-fCit1w/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/G8pX3utzwsvsjvFFePlj-fCit1w/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/WictorWilen?a=Mq8iuk5C-GI:FKtfzuIJA2g:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WictorWilen?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/WictorWilen?a=Mq8iuk5C-GI:FKtfzuIJA2g:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WictorWilen?i=Mq8iuk5C-GI:FKtfzuIJA2g:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/WictorWilen?a=Mq8iuk5C-GI:FKtfzuIJA2g:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WictorWilen?i=Mq8iuk5C-GI:FKtfzuIJA2g:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/WictorWilen?a=Mq8iuk5C-GI:FKtfzuIJA2g:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WictorWilen?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/WictorWilen?a=Mq8iuk5C-GI:FKtfzuIJA2g:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WictorWilen?i=Mq8iuk5C-GI:FKtfzuIJA2g:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/WictorWilen/~4/Mq8iuk5C-GI" height="1" width="1"/&gt;</description><atom:author xmlns:atom="http://www.w3.org/2005/Atom">
                    <atom:name>Wictor Wilén</atom:name>
                </atom:author><atom:published xmlns:atom="http://www.w3.org/2005/Atom">2012-04-01 05:23:46Z</atom:published><atom:updated xmlns:atom="http://www.w3.org/2005/Atom">2012-04-01 05:23:46Z</atom:updated><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">3</slash:comments><trackback:ping xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">http://www.wictorwilen.se/trackback.aspx?id=637</trackback:ping><feedburner:origLink>http://www.wictorwilen.se/Post/Microsoft-Most-Valuable-Professional-SharePoint-Server-for-another-year.aspx</feedburner:origLink></item><item><title>Speaking at the International SharePoint Conference London 2012</title><link>http://feedproxy.google.com/~r/WictorWilen/~3/Tpqh6Bg14kE/Speaking-at-the-International-SharePoint-Conference-London-2012.aspx</link><category>SharePoint</category><category>SharePoint 2010</category><category>Presentations</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Wictor Wilén</dc:creator><pubDate>Sat, 24 Mar 2012 22:55:17 PDT</pubDate><guid isPermaLink="false">http://www.wictorwilen.se/Post/Speaking-at-the-International-SharePoint-Conference-London-2012.aspx</guid><description>&lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/Speaking-at-International-SharePoint-Con_F8EA/Square_web_banner_2b_2.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 0px 5px 5px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top: 0px; border-right: 0px; padding-top: 0px" title="Square_web_banner_2b" border="0" alt="Square_web_banner_2b" align="right" src="http://www.wictorwilen.se/Windows-Live-Writer/Speaking-at-International-SharePoint-Con_F8EA/Square_web_banner_2b_thumb.png" width="244" height="244" /&gt;&lt;/a&gt;In less than a month the greatest SharePoint conference on this side of the pond will take place in London - the &lt;a href="http://www.internationalsharepointconference.com/"&gt;International SharePoint Conference&lt;/a&gt; (ISC). The ISC is the new name for the conference held in London and previously called Best Practices Conference and Evolutions Conference. This will actually be my first year at the conference, but I always wanted to go there - and now I'm one of the speakers in the fantastic line up!&lt;/p&gt;  &lt;p&gt;This conference will not be just an ordinary conference - instead of having the traditional one hour demo sessions we will over the course of three days go from a functional specification to a deployable solution. The sessions will vary in length from less than one hour to a couple of hours long. There will be two parallel tracks like this - one focused on development topics and one focused on IT-Pro stuff.&lt;/p&gt;  &lt;p&gt;I will together with some fantastic SharePoint MVP colleagues and friends participate in a couple of sessions ranging from Visual Studio extensibility, to BCS and Managed Metadata thingies. It will be a blast presenting and I do think that the audience will enjoy this show. So, if you haven't already booked your tickers - &lt;a href="http://combined-knowledge.com/isc2012/Event_Registration.html"&gt;now is the time&lt;/a&gt;!&lt;/p&gt;  &lt;p&gt;Se you there!&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/aob8IqdacwSc0RB-gL2J-gGecDU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/aob8IqdacwSc0RB-gL2J-gGecDU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/aob8IqdacwSc0RB-gL2J-gGecDU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/aob8IqdacwSc0RB-gL2J-gGecDU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/WictorWilen?a=Tpqh6Bg14kE:W9H58QNv3So:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WictorWilen?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/WictorWilen?a=Tpqh6Bg14kE:W9H58QNv3So:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WictorWilen?i=Tpqh6Bg14kE:W9H58QNv3So:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/WictorWilen?a=Tpqh6Bg14kE:W9H58QNv3So:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WictorWilen?i=Tpqh6Bg14kE:W9H58QNv3So:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/WictorWilen?a=Tpqh6Bg14kE:W9H58QNv3So:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WictorWilen?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/WictorWilen?a=Tpqh6Bg14kE:W9H58QNv3So:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WictorWilen?i=Tpqh6Bg14kE:W9H58QNv3So:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/WictorWilen/~4/Tpqh6Bg14kE" height="1" width="1"/&gt;</description><atom:author xmlns:atom="http://www.w3.org/2005/Atom">
                    <atom:name>Wictor Wilén</atom:name>
                </atom:author><atom:published xmlns:atom="http://www.w3.org/2005/Atom">2012-03-25 05:55:17Z</atom:published><atom:updated xmlns:atom="http://www.w3.org/2005/Atom">2012-03-25 05:55:17Z</atom:updated><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">1</slash:comments><trackback:ping xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">http://www.wictorwilen.se/trackback.aspx?id=636</trackback:ping><feedburner:origLink>http://www.wictorwilen.se/Post/Speaking-at-the-International-SharePoint-Conference-London-2012.aspx</feedburner:origLink></item><item><title>What is a Microsoft Certified Architect?</title><link>http://feedproxy.google.com/~r/WictorWilen/~3/RnOCGklfNRM/What-is-a-Microsoft-Certified-Architect.aspx</link><category>Personal</category><category>SharePoint 2010</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Wictor Wilén</dc:creator><pubDate>Sun, 11 Mar 2012 18:56:47 PDT</pubDate><guid isPermaLink="false">http://www.wictorwilen.se/Post/What-is-a-Microsoft-Certified-Architect.aspx</guid><description>&lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/What-is-a-Microsoft-Certified-Architect_9069/MCA(rgb)_1417_2.png"&gt;&lt;img style="margin: 5px; display: inline; float: right" title="MCA(rgb)_1417" alt="MCA(rgb)_1417" align="right" src="http://www.wictorwilen.se/Windows-Live-Writer/What-is-a-Microsoft-Certified-Architect_9069/MCA(rgb)_1417_thumb.png" width="268" height="60" /&gt;&lt;/a&gt;Last Friday I got the fantastic message that I had successfully passed the &lt;strong&gt;&lt;a href="http://www.microsoft.com/learning/en/us/certification/architect.aspx"&gt;Microsoft Certified Architect&lt;/a&gt; - SharePoint 2010 (MCA)&lt;/strong&gt; certification, something I'm really proud of - but something most of the community never ever heard of. During this weekend I've been pinged and messaged by a lots of people asking the question &lt;strong&gt;"What is a &lt;/strong&gt;&lt;strong&gt;Microsoft&lt;/strong&gt;&lt;strong&gt; Certified Architect?"&lt;/strong&gt;. In this post I intend to answer it as thorough as possible, including my own personal aspects of it.&lt;/p&gt;  &lt;p&gt;First of all let's answer the most common question - &lt;strong&gt;"How does the Microsoft Certified Architect relates to the Microsoft Certified Master exam?"&lt;/strong&gt;. &lt;/p&gt;  &lt;p&gt;I might agree that &lt;em&gt;Master&lt;/em&gt; sounds way cooler than &lt;em&gt;Architect&lt;/em&gt;, but that isn't the real story. The Master certification (MCM) is the most highly &lt;strong&gt;technical&lt;/strong&gt; exam you could ever get in the &lt;a href="http://www.microsoft.com" target="_blank"&gt;Microsoft&lt;/a&gt; world. The term technical is important here. During the MCM rotation and the exam you explore and learn all the scary and exciting internals and externals of SharePoint (or the other MCM:able products/technologies) from a technical perspective. You will learn from the best teachers and SME's and you will be in a class together with some really awesome and skilled persons. The MCM is both a course (3 weeks on site, or 1 week on site and 10 weeks off-site), a written exam and a qualification lab. &lt;a href="http://www.wictorwilen.se/Post/Microsoft-Certified-Master-SharePoint-2010-thoughts-and-reflections.aspx"&gt;Read more about my MCM experience in one of my older posts&lt;/a&gt;. To even apply for the MCA you need to be an MCM on the specific product your applying for and on the current version. This means that Microsoft already tested and verified your technical skills! So one could actually say that the MCA is like the &lt;strong&gt;Microsoft Certified Grandmaster&lt;/strong&gt;...&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;"What is the MCA then?"&lt;/strong&gt;. &lt;/p&gt;  &lt;p&gt;So, let's take a look at the Architect certification (MCA). The MCA takes the certification to another level, and focus on the business side of SharePoint (or the other MCA eligible products; SharePoint, Exchange, SQL and AD). The MCA is not a course, it is not something you sit in class and learn for a couple of weeks, it is not something you can study for - it is something you learn over the course of &lt;strong&gt;several years &lt;/strong&gt;of experience with the products, in &lt;strong&gt;real &lt;/strong&gt;business cases &lt;strong&gt;together &lt;/strong&gt;with one or more customers. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;"How do I apply for the MCA?"&lt;/strong&gt;. &lt;/p&gt;  &lt;p&gt;When applying for the MCA you must supply a &lt;em&gt;portfolio&lt;/em&gt; which includes details about real customer gigs, your CV and other documentation to prove that you are in the business for real. Once the program manager thinks you have "what it takes" and that you proven that, you will be scheduled for a board appearance. You need to work on your documents and prepare for the board presentation. This is not something you should do with your left hand - you need to put in some real effort here to produce a good set of documents and a good presentation. It is up to you to prove that you have "what it takes".&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;"So, how does the MCA board appearance work?"&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;The board appearance is the certification. You will spend almost a day together with the MCA board (consisting of other MCA's or specific SME's). You will do a presentation, a case study and you will have several intense Q&amp;A sessions. Enough to make you choke. The board will then grade you on six different competencies (&lt;a href="http://www.microsoft.com/learning/en/us/certification/architect-review.aspx"&gt;full list and details on the official site&lt;/a&gt;). Once you are done - all you can do is wait for the pass/no-pass e-mail. This is an exhaustive day for which you need to prepare. But as I said earlier - it all comes down to the actual experience you have in the industry and how used you are to being in these situations with clients. You can't study for the Q&amp;A sessions.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;"What's the value of an MCA certification?"&lt;/strong&gt;. &lt;/p&gt;  &lt;p&gt;The MCA, and the MCM for that matter, costs a lot of money. So is it worth it? In my opinion definitely. It's really hard to say what the exact payback is. We're currently early in the SharePoint MCA process with quite few certified MCA's and only time will tell. I can directly say that I learnt a lot while preparing for the board appearance - with a lot of time reflecting on past projects. Also the actual board appearance was great in that way that the board tested me; both on my strong areas and weak ones - and now I know what parts I might need to step up on. Studies done on the MCM community shows benefits such as a higher hourly rate, easier recruitment, better and safer deliveries. So the MCM/MCA are really a quality stamp, with MCM focused on the technical aspects and MCA on understanding and implementing business requirements.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;"Why did I do this?"&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;This is the question my wife asks me! Well, first of all I always try to be better in what I'm doing. And going down the MCA route surely did this. I now know what I know and know what I don't know and know what I want to know... Also I think it is great for my company, &lt;a href="http://www.connecta.se" target="_blank"&gt;Connecta&lt;/a&gt;, to have this certification - it will definitely be a USP in attracting clients and co-workers. A big thank you to Connecta and my managers who believed in me enough to send me on both the MCM and MCA journey! In the end I know that both me personally, my company and my co-workers will benefit from this.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;"I want to learn more about the MCA?"&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;So, now I've been ranting about the MCA (from my perspective) and there are probably tons of questions that remains unanswered. Use the following links to learn more.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.microsoft.com/learning/en/us/certification/architect.aspx"&gt;Microsoft Certified Architect program&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.microsoft.com/learning/en/us/certification/master.aspx"&gt;Microsoft Certified Master program&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="https://msevents.microsoft.com/cui/SearchDisplay.aspx?culture=en-us#culture=en-us;kwdAny=advcert;eventType=0;searchcontrol=yes;s=1"&gt;Regularly held online events with the MCM/MCA program managers&lt;/a&gt;. If you're just a little bit interested make sure to attend one of these held by the awesome program mangers for the MCM/MCA programs and have your chance to ask your questions &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.harbar.net/archive/2011/10/03/337.aspx"&gt;Announcing the Microsoft Certified Architect: SharePoint Server 2010&lt;/a&gt; - MCA/MCM/MVP &lt;a href="http://www.harbar.net"&gt;Spence Harbar&lt;/a&gt; writes about the SharePoint MCA program &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;That's it. I hope you have a far better understanding of what a Microsoft Certified Architect is.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/7dTslH7WSS87THNIXlQnRf_1PxY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7dTslH7WSS87THNIXlQnRf_1PxY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/7dTslH7WSS87THNIXlQnRf_1PxY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7dTslH7WSS87THNIXlQnRf_1PxY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/WictorWilen?a=RnOCGklfNRM:6mJ4HCIvFZ4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WictorWilen?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/WictorWilen?a=RnOCGklfNRM:6mJ4HCIvFZ4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WictorWilen?i=RnOCGklfNRM:6mJ4HCIvFZ4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/WictorWilen?a=RnOCGklfNRM:6mJ4HCIvFZ4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WictorWilen?i=RnOCGklfNRM:6mJ4HCIvFZ4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/WictorWilen?a=RnOCGklfNRM:6mJ4HCIvFZ4:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WictorWilen?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/WictorWilen?a=RnOCGklfNRM:6mJ4HCIvFZ4:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WictorWilen?i=RnOCGklfNRM:6mJ4HCIvFZ4:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/WictorWilen/~4/RnOCGklfNRM" height="1" width="1"/&gt;</description><atom:author xmlns:atom="http://www.w3.org/2005/Atom">
                    <atom:name>Wictor Wilén</atom:name>
                </atom:author><atom:published xmlns:atom="http://www.w3.org/2005/Atom">2012-03-12 01:56:47Z</atom:published><atom:updated xmlns:atom="http://www.w3.org/2005/Atom">2012-03-12 01:56:47Z</atom:updated><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">9</slash:comments><trackback:ping xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">http://www.wictorwilen.se/trackback.aspx?id=635</trackback:ping><feedburner:origLink>http://www.wictorwilen.se/Post/What-is-a-Microsoft-Certified-Architect.aspx</feedburner:origLink></item><item><title>How Claims encoding works in SharePoint 2010</title><link>http://feedproxy.google.com/~r/WictorWilen/~3/HJgwcybIB5s/How-Claims-encoding-works-in-SharePoint-2010.aspx</link><category>SharePoint 2010</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Wictor Wilén</dc:creator><pubDate>Thu, 08 Mar 2012 04:15:00 PST</pubDate><guid isPermaLink="false">http://www.wictorwilen.se/Post/How-Claims-encoding-works-in-SharePoint-2010.aspx</guid><description>&lt;p&gt;I've seen it asked numerous times on forums and I've been asked over and over how to interpret the encoded claims - so here it is: a post which will show you all the secrets behind how claims are encoded in &lt;a href="http://sharepoint.microsoft.com/"&gt;SharePoint 2010&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;&lt;font color="#ff0000"&gt;Updates:      &lt;br /&gt;- 2012-03-09 Added Forms Authentication info.       &lt;br /&gt;- 2012-03-11 Updated with information about how the claim type character is generated for non-defined claims&lt;/font&gt;&lt;/p&gt;  &lt;h3&gt;Background&lt;/h3&gt;  &lt;p&gt;If you have been using previous versions of SharePoint 2007, been working with .NET or just Windows you should be familiar with that (NETBIOS) user names are formatted &lt;strong&gt;DOMAIN\user&lt;/strong&gt; (or &lt;strong&gt;provider:username&lt;/strong&gt; for FBA in SharePoint). When SharePoint 2010 introduced the claims based authentication model (CBA) these formats was not sufficient for all the different options needed. Therefore a new string format was invented to handle the different claims. The format might at first glance look a bit weird...&lt;/p&gt;  &lt;h3&gt;How it works?&lt;/h3&gt;  &lt;p&gt;The claim encoding in SharePoint 2010 is an efficient and compact way to represent a claim type and claim value, compared to writing out all the qualified names for the claim types and values. I will illustrate how the claim are encoded in SharePoint 2010 focused on user names, but this claim encoding method could be used for basically any claim. Let's start with an illustrative drawing of the format and then walk through a couple of samples.&lt;/p&gt;  &lt;h4&gt;&lt;/h4&gt;  &lt;h4&gt;The format&lt;/h4&gt;  &lt;p&gt;The format is actually well defined in the SharePoint Protocol Specifications in the [&lt;a href="http://www.microsoft.com/download/en/details.aspx?displaylang=en&amp;id=25255"&gt;MS-SPSTWS&lt;/a&gt;] document, read it if you want a dry and boring explanation, or continue to read this post...&lt;/p&gt;  &lt;p&gt;The image below shows how claims are encoded in SharePoint 2010, click on the image for a larger view of it.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/How-Claims-encoding-works-in-SharePoint-_14813/image_10.png"&gt;&lt;img style="display: inline" title="The SharePoint 2010 claim encoding format" alt="The SharePoint 2010 claim encoding format" src="http://www.wictorwilen.se/Windows-Live-Writer/How-Claims-encoding-works-in-SharePoint-_14813/image_thumb_1.png" width="600" height="262" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Let's start from the beginning. The first character must be an &lt;strong&gt;I&lt;/strong&gt; for an identity claim, otherwise it has to be &lt;strong&gt;c&lt;/strong&gt;. Note that the casing is important here. The second character must be a &lt;strong&gt;:&lt;/strong&gt; and the third a &lt;strong&gt;0&lt;/strong&gt;. The third character is reserved for future use. &lt;/p&gt;  &lt;p&gt;It's in the fourth character the interesting part starts. The fourth character tells us what type of claim it is and the fifth what type of value. There are several possible claim types. The most common are; user logon name (&lt;strong&gt;#&lt;/strong&gt;), e-mail (&lt;strong&gt;5&lt;/strong&gt;), role (&lt;strong&gt;-&lt;/strong&gt;), group SID (&lt;strong&gt;+&lt;/strong&gt;) and farm ID (&lt;strong&gt;%&lt;/strong&gt;). For the claim value type a string is normally used and that is represented by a &lt;strong&gt;.&lt;/strong&gt; character. The sixth character in the sequence represents the original issuer and depending on the issuer the format following the sixth character varies. For Windows and Local STS the seventh character is a pipe character (&lt;strong&gt;|&lt;/strong&gt;) followed by the claim value. The rest of the original issuers have two values separated by pipe characters, the name of the original issuers and then the claim value. Easy huh? &lt;/p&gt;  &lt;p&gt;Note: the &lt;strong&gt;f&lt;/strong&gt; (Forms AuthN) as trusted issuer is not documented in the protocol specs, and this is what SharePoint uses when dealing with membership providers (instead of &lt;strong&gt;m&lt;/strong&gt; and &lt;strong&gt;r&lt;/strong&gt;). For more info see &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.administration.claims.sporiginalissuertype.aspx"&gt;SPOriginalIssuerType&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;For full reference of claim types and claim value types, look into the [MS-SPSTWS} documentation.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/How-Claims-encoding-works-in-SharePoint-_14813/SNAGHTML811d89c.png"&gt;&lt;img style="margin: 5px 0px 5px 5px; display: inline; float: right" title="Charmap" alt="Charmap" align="right" src="http://www.wictorwilen.se/Windows-Live-Writer/How-Claims-encoding-works-in-SharePoint-_14813/SNAGHTML811d89c_thumb.png" width="200" height="154" /&gt;&lt;/a&gt;&lt;font color="#ff0000"&gt;(Added 2012-02-13)&lt;/font&gt; If you are creating custom claim providers or using a trusted provider (as original issuer), you will see that you get some "undocumented" values in the Claim Type (4th) position (that is they are not documented in the protocol specs). The most common character to see here is &lt;b&gt;ǵ&lt;/b&gt; (0x01F5). If the claim encoding mechanism in SharePoint cannot find a claim type it automatically creates a claim type encoding for that claim. It will always start with the value of 500 increment that value with 1 which results in 501. 501 is in hex 01F5 which represents that character. It will continue to increase the value for each new (and to SharePoint not already defined) claim type. The important thing here to remember is that these claim types and their encoding is not the same cross farms, it all depends on in which order the new claim types are added/used. (All this is stored in a persisted object in the configuration database)&lt;/p&gt;  &lt;p&gt;Some notes: the total length must not exceed 255 characters and you need to HTML encode characters such as %, :, ; and | in the claim values.&lt;/p&gt;  &lt;h4&gt;Some samples&lt;/h4&gt;  &lt;p&gt;If this wasn't clear enough, let's look at a few samples.&lt;/p&gt;  &lt;table border="0" cellspacing="5" cellpadding="2" width="542"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="266"&gt;Standard Windows claim&lt;/td&gt;        &lt;td valign="top" width="259"&gt;         &lt;p align="center"&gt;&lt;img style="display: inline" title="Windows claim" alt="Windows claim" src="http://www.wictorwilen.se/Windows-Live-Writer/How-Claims-encoding-works-in-SharePoint-_14813/image_24.png" width="197" height="217" /&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="262"&gt;Another common claim. This time it's not an identity claim but an identity provider claim, and this is how NT AUTHORITY\Authenticated Users is represented.&lt;/td&gt;        &lt;td valign="top" width="263"&gt;         &lt;p align="center"&gt;&lt;img style="display: inline" title="Authenticated users claim" alt="Authenticated users claim" src="http://www.wictorwilen.se/Windows-Live-Writer/How-Claims-encoding-works-in-SharePoint-_14813/image_23.png" width="197" height="217" /&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="259"&gt;This is how a Windows Security Group is represented as a claim. The value represents the SID of the group.&lt;/td&gt;        &lt;td valign="top" width="266"&gt;         &lt;p align="center"&gt;&lt;img style="display: inline" title="Security Group claim" alt="Security Group claim" src="http://www.wictorwilen.se/Windows-Live-Writer/How-Claims-encoding-works-in-SharePoint-_14813/image_22.png" width="252" height="209" /&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="257"&gt;If we're using federated authentication (as in the &lt;a href="http://www.wictorwilen.se/Post/Visual-guide-to-Azure-Access-Controls-Services-authentication-with-SharePoint-2010-Index-Post.aspx"&gt;Azure AuthN series I 've written&lt;/a&gt;) we can see claims like this. It's an e-mail claim from a trusted issuer called Azure.&lt;/td&gt;        &lt;td valign="top" width="268"&gt;         &lt;p align="center"&gt;&lt;img style="display: inline" title="E-mail claim" alt="E-mail claim" src="http://www.wictorwilen.se/Windows-Live-Writer/How-Claims-encoding-works-in-SharePoint-_14813/image_21.png" width="252" height="234" /&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="256"&gt;Here's how a claim can be encoded if we're having a role called &lt;strong&gt;facebook&lt;/strong&gt; in the trusted issuer with the name Azure.&lt;/td&gt;        &lt;td valign="top" width="269"&gt;         &lt;p align="center"&gt;&lt;img style="display: inline" title="Role claim" alt="Role claim" src="http://www.wictorwilen.se/Windows-Live-Writer/How-Claims-encoding-works-in-SharePoint-_14813/image_20.png" width="252" height="234" /&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="255"&gt;This final example shows how the encoded claim for the Local Farm looks like. It's a Farm ID claim from the &lt;strong&gt;system&lt;/strong&gt; Claim Provider and the claim value is the ID of the farm.&lt;/td&gt;        &lt;td valign="top" width="270"&gt;         &lt;p align="center"&gt;&lt;img style="display: inline" title="Farm claim" alt="Farm claim" src="http://www.wictorwilen.se/Windows-Live-Writer/How-Claims-encoding-works-in-SharePoint-_14813/image_19.png" width="252" height="226" /&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="255"&gt;This is how a forms authenticated user claim looks like. &lt;/td&gt;        &lt;td valign="top" width="270"&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/How-Claims-encoding-works-in-SharePoint-_14813/image_25.png"&gt;&lt;img style="display: inline" title="image" alt="image" src="http://www.wictorwilen.se/Windows-Live-Writer/How-Claims-encoding-works-in-SharePoint-_14813/image_thumb_4.png" width="267" height="226" /&gt;&lt;/a&gt;&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;h3&gt;Summary&lt;/h3&gt;  &lt;p&gt;I hope this little post showed you all the magic behind the claims encoding in SharePoint. It's quite logical...yea really.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/XPfU3nx5iogkHZ4mpITaWkX87xI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/XPfU3nx5iogkHZ4mpITaWkX87xI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/XPfU3nx5iogkHZ4mpITaWkX87xI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/XPfU3nx5iogkHZ4mpITaWkX87xI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/WictorWilen?a=HJgwcybIB5s:22qhcqUhsng:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WictorWilen?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/WictorWilen?a=HJgwcybIB5s:22qhcqUhsng:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WictorWilen?i=HJgwcybIB5s:22qhcqUhsng:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/WictorWilen?a=HJgwcybIB5s:22qhcqUhsng:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WictorWilen?i=HJgwcybIB5s:22qhcqUhsng:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/WictorWilen?a=HJgwcybIB5s:22qhcqUhsng:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WictorWilen?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/WictorWilen?a=HJgwcybIB5s:22qhcqUhsng:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WictorWilen?i=HJgwcybIB5s:22qhcqUhsng:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/WictorWilen/~4/HJgwcybIB5s" height="1" width="1"/&gt;</description><atom:author xmlns:atom="http://www.w3.org/2005/Atom">
                    <atom:name>Wictor Wilén</atom:name>
                </atom:author><atom:published xmlns:atom="http://www.w3.org/2005/Atom">2012-03-08 12:15:00Z</atom:published><atom:updated xmlns:atom="http://www.w3.org/2005/Atom">2012-03-08 12:15:00Z</atom:updated><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">5</slash:comments><trackback:ping xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">http://www.wictorwilen.se/trackback.aspx?id=634</trackback:ping><feedburner:origLink>http://www.wictorwilen.se/Post/How-Claims-encoding-works-in-SharePoint-2010.aspx</feedburner:origLink></item><item><title>The sixth edition of the DIWUG SharePoint Magazine is out</title><link>http://feedproxy.google.com/~r/WictorWilen/~3/4s_DgkCp5Tc/The-sixth-edition-of-the-DIWUG-SharePoint-Magazine-is-out.aspx</link><category>SharePoint 2010</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Wictor Wilén</dc:creator><pubDate>Tue, 06 Mar 2012 12:34:37 PST</pubDate><guid isPermaLink="false">http://www.wictorwilen.se/Post/The-sixth-edition-of-the-DIWUG-SharePoint-Magazine-is-out.aspx</guid><description>&lt;p&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 0px 0px 5px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top: 0px; border-right: 0px; padding-top: 0px" title="DIWUG no. 6" border="0" alt="DIWUG no. 6" align="right" src="http://www.wictorwilen.se/Windows-Live-Writer/The-sixth-edition-of-the-DIWUG-SharePoin_73CD/image_3.png" width="218" height="306" /&gt;The best free SharePoint magazine published online, &lt;a href="http://www.diwug.nl/e-magazines/pages/default.aspx"&gt;the DIWUG SharePoint e-Magazine&lt;/a&gt;, did yesterday release their sixth edition. As usual this is a great edition with a mix of articles for every aspects of the SharePoint universe. The articles are written by SharePoint community members and the magazine is compiled and managed by Mirjam van Olst and Marianne van Wanrooij.&lt;/p&gt;  &lt;p&gt;This edition contains articles ranging from hard core Service Application federation, to SharePoint Online and Azure development to articles on how to engage your users and project teams in SharePoint. As usual - something you just must read!&lt;/p&gt;  &lt;p&gt;In this edition I've participated with one article about &lt;strong&gt;Dynamic Ribbon customizations with Page Components&lt;/strong&gt;. It's quite lengthy (sorry about that) and contains a lot of code, and quite a few tricks that makes Ribbon customizations easy(ier). My idea behind the article was to show a real world implementation of a Ribbon customization, instead of any Hello World stuff. This customization actually improves the OOB user interface (IMO) and allows your users to work with Workflows much easier. You can basically take the code from the article and install it in your farms.&lt;/p&gt;  &lt;p&gt;So here's where to get it:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.diwug.nl/DIWUG_SharePoint_eMagazine6.pdf"&gt;Full fidelity high res PDF edition&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.diwug.nl/DIWUG_SharePoint_eMagazine6_eReader.pdf"&gt;e-Reader PDF edition&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/-MhbSl8U-cjjEGkduyw90UhEO_I/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-MhbSl8U-cjjEGkduyw90UhEO_I/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/-MhbSl8U-cjjEGkduyw90UhEO_I/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-MhbSl8U-cjjEGkduyw90UhEO_I/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/WictorWilen?a=4s_DgkCp5Tc:EsxWItY7gF0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WictorWilen?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/WictorWilen?a=4s_DgkCp5Tc:EsxWItY7gF0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WictorWilen?i=4s_DgkCp5Tc:EsxWItY7gF0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/WictorWilen?a=4s_DgkCp5Tc:EsxWItY7gF0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WictorWilen?i=4s_DgkCp5Tc:EsxWItY7gF0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/WictorWilen?a=4s_DgkCp5Tc:EsxWItY7gF0:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WictorWilen?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/WictorWilen?a=4s_DgkCp5Tc:EsxWItY7gF0:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WictorWilen?i=4s_DgkCp5Tc:EsxWItY7gF0:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/WictorWilen/~4/4s_DgkCp5Tc" height="1" width="1"/&gt;</description><atom:author xmlns:atom="http://www.w3.org/2005/Atom">
                    <atom:name>Wictor Wilén</atom:name>
                </atom:author><atom:published xmlns:atom="http://www.w3.org/2005/Atom">2012-03-06 20:34:37Z</atom:published><atom:updated xmlns:atom="http://www.w3.org/2005/Atom">2012-03-06 20:34:37Z</atom:updated><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">1</slash:comments><trackback:ping xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">http://www.wictorwilen.se/trackback.aspx?id=633</trackback:ping><feedburner:origLink>http://www.wictorwilen.se/Post/The-sixth-edition-of-the-DIWUG-SharePoint-Magazine-is-out.aspx</feedburner:origLink></item><item><title>Visual guide to Azure Access Controls Services authentication with SharePoint 2010 - part 6 - Facebook integration</title><link>http://feedproxy.google.com/~r/WictorWilen/~3/DebRuZO0WWQ/Visual-guide-to-Azure-Access-Controls-Services-authentication-with-SharePoint-2010-part-6-Facebook-integration.aspx</link><category>Windows Azure</category><category>SharePoint 2010</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Wictor Wilén</dc:creator><pubDate>Sat, 18 Feb 2012 15:02:10 PST</pubDate><guid isPermaLink="false">http://www.wictorwilen.se/Post/Visual-guide-to-Azure-Access-Controls-Services-authentication-with-SharePoint-2010-part-6-Facebook-integration.aspx</guid><description>&lt;p&gt;Another post you think! Does this guy have a life? Well, actually I do. But once you get me started , I'm hard to stop...&lt;/p&gt;  &lt;p&gt;This sixth post in the &lt;a href="http://www.wictorwilen.se/Post/Visual-guide-to-Azure-Access-Controls-Services-authentication-with-SharePoint-2010-Index-Post.aspx"&gt;Visual guide to Azure Access Controls Services authentication with SharePoint 2010&lt;/a&gt; is going to show you how to leverage some of the features that Azure ACS provides you with when using Facebook as Identity Provider. I'm going to show you how to use the &lt;a href="https://developers.facebook.com/docs/reference/api/"&gt;Facebook Graph API&lt;/a&gt; and retrieve information about the user (and possible his/hers friends) - this is of interest if you're going to build a community or something similar on top of &lt;a href="http://sharepoint.microsoft.com/"&gt;SharePoint 2010&lt;/a&gt;. For instance we can use the information from Facebook and push into the SharePoint 2010 User Profile service once the user has signed up..&lt;/p&gt;  &lt;p&gt;Sit back and relax, while I show you how to do this...&lt;/p&gt;  &lt;h3&gt;Add the Facebook AccessToken claim&lt;/h3&gt;  &lt;p&gt;First of all I assume that you have configured Facebook as one of the Identity Providers as &lt;a href="http://www.wictorwilen.se/Post/Visual-guide-to-Azure-Access-Control-Services-authentication-with-SharePoint-2010-part-3-Facebook.aspx"&gt;detailed in part 3&lt;/a&gt;, secondly we're going to use the approach with &lt;a href="http://www.wictorwilen.se/Post/Visual-guide-to-Azure-Access-Controls-Services-authentication-with-SharePoint-2010-part-5-Custom-Claims.aspx"&gt;custom claims that we learnt in part 5&lt;/a&gt;. When you configured Facebook as an IP for your Relying Party Application and auto-generated Rules for the IP, then ACS automatically created some output claims for us. Especially the "http://www.facebook.com/claims/AccessToken" is of interest in this case. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Controls-Se_17C/SNAGHTML12c4827a.png"&gt;&lt;img style="display: inline" title="AccessToken in ACS" alt="AccessToken in ACS" src="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Controls-Se_17C/SNAGHTML12c4827a_thumb.png" width="400" height="82" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;This is a claim contains the &lt;a href="https://developers.facebook.com/docs/authentication/"&gt;access token&lt;/a&gt; required to do authenticated calls to the Facebook Graph API. And we will add this claim as in incoming claim to the Trusted Identity Provider in SharePoint 2010.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Controls-Se_17C/SNAGHTML12c59944.png"&gt;&lt;img style="display: inline" title="The AccessToken claim" alt="The AccessToken claim" src="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Controls-Se_17C/SNAGHTML12c59944_thumb.png" width="400" height="120" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;There is also another output claim that you should be aware of if building production code (which I'm not doing here) and that is the "http://schemas.xmlsoap.org/ws/2008/06/identity/claims/expiration" claim that contains the expiration time for the access token. You might need to check that so the user has to re-authenticate to get a new access token.&lt;/p&gt;  &lt;p&gt;Ok, since Azure ACS has everything already in place for us, we only need to fix the Trusted Identity Provider in SharePoint. Just as in part 5 we'll add the claim using this snippet of PowerShell.&lt;/p&gt;  &lt;p&gt;&lt;code&gt;$map = New-SPClaimTypeMapping      &lt;br /&gt;    -IncomingClaimType "http://www.facebook.com/claims/AccessToken"       &lt;br /&gt;    -IncomingClaimTypeDisplayName "AccessToken"       &lt;br /&gt;    -SameAsIncoming       &lt;br /&gt;$tip = Get-SPTrustedIdentityTokenIssuer "Visual AuthN ACS"       &lt;br /&gt;$tip.ClaimTypes.Add("http://www.facebook.com/claims/AccessToken&lt;a href="http://www.facebook.com/claims/AccessToken")"&gt;")&lt;/a&gt;       &lt;br /&gt;Add-SPClaimTypeMapping -Identity $map -TrustedIdentityTokenIssuer $tip       &lt;br /&gt;$tip.Update()&lt;/code&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Controls-Se_17C/SNAGHTML12c86376.png"&gt;&lt;img style="display: inline" title="Adding a claim type mapping" alt="Adding a claim type mapping" src="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Controls-Se_17C/SNAGHTML12c86376_thumb.png" width="400" height="125" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Once this is done, just log out and in again using a Facebook account and we should see the new claim.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Controls-Se_17C/SNAGHTML12c9654a.png"&gt;&lt;img style="display: inline" title="The claim" alt="The claim" src="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Controls-Se_17C/SNAGHTML12c9654a_thumb.png" width="400" height="98" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Now, we are all set to use this Access Token in some custom code. I know you've been waiting for some code in this series - it's far too much clickety-click and PowerShelling...&lt;/p&gt;  &lt;h3&gt;Use the Facebook Graph API in a Web Part&lt;/h3&gt;  &lt;p&gt;To show you how to use the Facebook Graph API I'm building a simple Visual Web Part that is going to write the name of the Facebook user, the favorite quotes and show the profile picture. I'm not going into details on the Graph API here and there are a lot of .NET implementations/libraries that you can use, but for this demo this simple method is sufficient:&lt;/p&gt;  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;private&lt;/span&gt; Hashtable callGraphApi(Uri uri, &lt;span class="kwrd"&gt;string&lt;/span&gt; accessToken) {
    UriBuilder builder = &lt;span class="kwrd"&gt;new&lt;/span&gt; UriBuilder(uri);
    &lt;span class="kwrd"&gt;if&lt;/span&gt; (!&lt;span class="kwrd"&gt;string&lt;/span&gt;.IsNullOrEmpty(builder.Query)) {
        builder.Query += &lt;span class="str"&gt;"&amp;"&lt;/span&gt;;
    }
    builder.Query += &lt;span class="str"&gt;"access_token="&lt;/span&gt; + accessToken;
    JavaScriptSerializer jsSerializer = &lt;span class="kwrd"&gt;new&lt;/span&gt; JavaScriptSerializer();

    &lt;span class="kwrd"&gt;using&lt;/span&gt; (WebClient client = &lt;span class="kwrd"&gt;new&lt;/span&gt; WebClient()) {
        &lt;span class="kwrd"&gt;string&lt;/span&gt; data = client.DownloadString(builder.ToString());
        &lt;span class="kwrd"&gt;return&lt;/span&gt; jsSerializer.Deserialize&lt;Hashtable&gt;(data);
    }
}&lt;/pre&gt;

&lt;p&gt;This method takes a Graph API Url and the access token and returns a HashTable of the data. The implementation of the Visual Web Part is very simple, the Page_Load method is modified as follows:&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Page_Load(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, EventArgs e) {
    &lt;span class="kwrd"&gt;try&lt;/span&gt; {
        IClaimsPrincipal principal = Page.User &lt;span class="kwrd"&gt;as&lt;/span&gt; IClaimsPrincipal;
        IClaimsIdentity identity = principal.Identity &lt;span class="kwrd"&gt;as&lt;/span&gt; IClaimsIdentity;
        var accessToken = (from claim &lt;span class="kwrd"&gt;in&lt;/span&gt; identity.Claims
                            &lt;span class="kwrd"&gt;where&lt;/span&gt; claim.ClaimType == &lt;span class="str"&gt;"http://www.facebook.com/claims/AccessToken"&lt;/span&gt;
                            select (&lt;span class="kwrd"&gt;string&lt;/span&gt;)claim.Value).FirstOrDefault();

        Hashtable me = callGraphApi(&lt;span class="kwrd"&gt;new&lt;/span&gt; Uri(&lt;span class="str"&gt;"https://graph.facebook.com/me"&lt;/span&gt;), accessToken);
        name.Text = me[&lt;span class="str"&gt;"name"&lt;/span&gt;].ToString();
        quote.Text = me[&lt;span class="str"&gt;"quotes"&lt;/span&gt;].ToString();
        image.ImageUrl = String.Format(&lt;span class="str"&gt;"http://graph.facebook.com/{0}/picture"&lt;/span&gt;, me[&lt;span class="str"&gt;"id"&lt;/span&gt;].ToString());
                
    }
    &lt;span class="kwrd"&gt;catch&lt;/span&gt; (Exception ex) {
        error.Text = ex.ToString();
    }     
}&lt;/pre&gt;

&lt;p&gt;First of all, I'm using a Linq snippet to get the access token and then I'll do a call to the Graph API and retrieves data for the current user. The info is then just inserted into a few Label controls and an Image control. If you log in using a Facebook account and watch this Web Part it should look something like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Controls-Se_17C/SNAGHTML15100a79.png"&gt;&lt;img style="display: inline" title="Ouch...." alt="Ouch...." src="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Controls-Se_17C/SNAGHTML15100a79_thumb.png" width="400" height="165" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What! Why do I get this error! Wictor showed me everything!? Don't be such a cry baby, remember that SharePoint keeps it's own certificate store! And it does only trust certificates in that specific internal SharePoint store. So we need to grab the Facebook.com certificate and add that to SharePoint. To get the certificate I use Firefox (IE9 does not allow me to save the certificate!) and browse to &lt;a title="https://graph.facebook.com/me" href="https://graph.facebook.com/me"&gt;https://graph.facebook.com/me&lt;/a&gt;. You'll get an error but ignore that and click on the Facebook logo in front of the address, and then click on more information.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Controls-Se_17C/SNAGHTML14edef8a.png"&gt;&lt;img style="display: inline" title="Get the cert" alt="Get the cert" src="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Controls-Se_17C/SNAGHTML14edef8a_thumb.png" width="400" height="184" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When the dialog appears, click on View Certificate and then finally on the Details tab use the Export button and save the certificate as a X.509 Certificate (PEM) file.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Controls-Se_17C/SNAGHTML14efbf27.png"&gt;&lt;img style="display: inline" title="Save it" alt="Save it" src="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Controls-Se_17C/SNAGHTML14efbf27_thumb.png" width="350" height="97" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Copy this file to one of your SharePoint 2010 boxes and run the following PowerShell:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2("c:\-.facebook.crt") 
    &lt;br /&gt;New-SPTrustedRootAuthority -Name "Facebook" -Certificate $cert&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Controls-Se_17C/SNAGHTML13030531_1.png"&gt;&lt;img style="display: inline" title="Trust Facebook!!!!" alt="Trust Facebook!!!!" src="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Controls-Se_17C/SNAGHTML13030531_thumb_1.png" width="400" height="192" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This will add the Facebook certificate to the SharePoint Certificate store and SharePoint will now trust Facebook! So reload the page with the Facebook Web Part again and voila...&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Controls-Se_17C/SNAGHTML14e580a1.png"&gt;&lt;img style="display: inline" title="It's working..." alt="It's working..." src="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Controls-Se_17C/SNAGHTML14e580a1_thumb.png" width="400" height="84" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Imagine what you can do with this. For instance on the first time log in - set the correct user name, upload the user profile picture etc etc. Now we're talking!&lt;/p&gt;

&lt;h3&gt;More stuff...&lt;/h3&gt;

&lt;p&gt;If you need access to more information in the Graph API, such as statuses, friends etc you need to configure the permissions for the Facebook Identity Provider in Azure ACS. For instance if I would like to read out the status updates for a user I need to add the user_status permission to the Facebook Identity Provider in Azure ACS.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Controls-Se_17C/SNAGHTML151327e8.png"&gt;&lt;img style="display: inline" title="Permissions" alt="Permissions" src="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Controls-Se_17C/SNAGHTML151327e8_thumb.png" width="400" height="107" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then when the user re-authenticates it will be prompted by Facebook to allow these new permissions.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Controls-Se_17C/image_4.png"&gt;&lt;img style="display: inline" title="More permissions needed" alt="More permissions needed" src="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Controls-Se_17C/image_thumb_1.png" width="400" height="133" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And now your application is allowed to read out status updates using the Graph API. You can find a &lt;a href="https://developers.facebook.com/docs/reference/api/permissions/"&gt;list of all the available permissions here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Tip: If you want to experiment with different Graph API Urls use the followin tool: &lt;a title="http://developers.facebook.com/tools/explorer/?method=GET&amp;path=me" href="http://developers.facebook.com/tools/explorer/?method=GET&amp;path=me"&gt;http://developers.facebook.com/tools/explorer/?method=GET&amp;path=me&lt;/a&gt;. You can copy and past your access token to the tool to see exactly what you can retrieve using that access token and your Facebook application permissions.&lt;/p&gt;





&lt;h3&gt;Summary&lt;/h3&gt;

&lt;p&gt;Now we've gone a long way from configuring Azure ACS and using simple Authentication using Google ID and Facebook to provide deeper integration with the external services. Good luck in building your own community sites!&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ZsM0m2TnNXcQnH0P323eIq5eihI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ZsM0m2TnNXcQnH0P323eIq5eihI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ZsM0m2TnNXcQnH0P323eIq5eihI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ZsM0m2TnNXcQnH0P323eIq5eihI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/WictorWilen?a=DebRuZO0WWQ:RKg9bBcjllc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WictorWilen?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/WictorWilen?a=DebRuZO0WWQ:RKg9bBcjllc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WictorWilen?i=DebRuZO0WWQ:RKg9bBcjllc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/WictorWilen?a=DebRuZO0WWQ:RKg9bBcjllc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WictorWilen?i=DebRuZO0WWQ:RKg9bBcjllc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/WictorWilen?a=DebRuZO0WWQ:RKg9bBcjllc:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WictorWilen?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/WictorWilen?a=DebRuZO0WWQ:RKg9bBcjllc:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WictorWilen?i=DebRuZO0WWQ:RKg9bBcjllc:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/WictorWilen/~4/DebRuZO0WWQ" height="1" width="1"/&gt;</description><atom:author xmlns:atom="http://www.w3.org/2005/Atom">
                    <atom:name>Wictor Wilén</atom:name>
                </atom:author><atom:published xmlns:atom="http://www.w3.org/2005/Atom">2012-02-18 23:02:10Z</atom:published><atom:updated xmlns:atom="http://www.w3.org/2005/Atom">2012-02-18 23:02:10Z</atom:updated><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">1</slash:comments><trackback:ping xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">http://www.wictorwilen.se/trackback.aspx?id=632</trackback:ping><feedburner:origLink>http://www.wictorwilen.se/Post/Visual-guide-to-Azure-Access-Controls-Services-authentication-with-SharePoint-2010-part-6-Facebook-integration.aspx</feedburner:origLink></item><item><title>Visual guide to Azure Access Controls Services authentication with SharePoint 2010 - part 5 - Custom Claims</title><link>http://feedproxy.google.com/~r/WictorWilen/~3/s6Wvbjri90Q/Visual-guide-to-Azure-Access-Controls-Services-authentication-with-SharePoint-2010-part-5-Custom-Claims.aspx</link><category>Windows Azure</category><category>SharePoint 2010</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Wictor Wilén</dc:creator><pubDate>Fri, 17 Feb 2012 22:41:34 PST</pubDate><guid isPermaLink="false">http://www.wictorwilen.se/Post/Visual-guide-to-Azure-Access-Controls-Services-authentication-with-SharePoint-2010-part-5-Custom-Claims.aspx</guid><description>&lt;p&gt;This is the fifth post in the &lt;a href="http://www.wictorwilen.se/Post/Visual-guide-to-Azure-Access-Controls-Services-authentication-with-SharePoint-2010-Index-Post.aspx"&gt;Visual guide to Azure Access Control Services authentication with SharePoint 2010&lt;/a&gt; and this time it is time to augment some claims using the Azure ACS. We'll do this to prepare for the next exciting part. For this post I assume you have configured at least one Web Application to use Facebook login using Azure ACS - make sure that you've followed &lt;a href="http://www.wictorwilen.se/Post/Visual-guide-to-Azure-Access-Controls-Services-authentication-with-SharePoint-2010-part-1.aspx"&gt;post 1&lt;/a&gt; and &lt;a href="http://www.wictorwilen.se/Post/Visual-guide-to-Azure-Access-Control-Services-authentication-with-SharePoint-2010-part-3-Facebook.aspx"&gt;post 3&lt;/a&gt; and optionally &lt;a href="http://www.wictorwilen.se/Post/Visual-guide-to-Azure-Access-Controls-Services-authentication-with-SharePoint-2010-part-4-multiple-web-applications.aspx"&gt;post 4&lt;/a&gt; thoroughly.&lt;/p&gt;  &lt;h3&gt;Why augment custom claims?&lt;/h3&gt;  &lt;p&gt;Sometimes you need more information from the users than just the e-mail and name. Perhaps you would like to get the phone number, age or other stuff. If you have that data in your identity provider you can augment that information (claim) to SharePoint. With Azure ACS you only have a specific set of data, unless you use a custom Identity Provider in Azure, such as ADFS. The default Identity Providers (Live ID, Google ID, Yahoo and Facebook) in Azure only has a limited set of claims that is sent to SharePoint. &lt;/p&gt;  &lt;p&gt;Using Azure ACS we can augment brand new claims - using the Rules editor in the Azure ACS management UI. You can create new output claims from scratch or new output claims based on values from the other input claims. In this scenario we're going to create a completely custom claim called "Identity Source" which will identify from where the identity is coming (Facebook, Yahoo or Google). We will then be able to use this in SharePoint to target information.&lt;/p&gt;  &lt;p&gt;If we log in to SharePoint using a Facebook account these are the claims that we get by default:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Controls-Se_DFE6/SNAGHTML116d6015.png"&gt;&lt;img style="display: inline" title="Claims, claims, claims" alt="Claims, claims, claims" src="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Controls-Se_DFE6/SNAGHTML116d6015_thumb.png" width="600" height="149" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;These claims are retrieved through a very simple Visual Web Part containing a DataGrid and the following code behind:&lt;/p&gt;  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Page_Load(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, EventArgs e) {
    IClaimsPrincipal principal = Page.User &lt;span class="kwrd"&gt;as&lt;/span&gt; IClaimsPrincipal;
    IClaimsIdentity identity = principal.Identity &lt;span class="kwrd"&gt;as&lt;/span&gt; IClaimsIdentity;
    var data = from claim &lt;span class="kwrd"&gt;in&lt;/span&gt; identity.Claims
        select &lt;span class="kwrd"&gt;new&lt;/span&gt; {
            Claim = claim.ClaimType,
            Value = claim.Value
        };
    GridView1.DataSource = data;
    GridView1.DataBind();
}&lt;/pre&gt;
&lt;style type="text/css"&gt;


.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;h3&gt;Adding a custom claim in Azure ACS&lt;/h3&gt;

&lt;p&gt;As usual we'll begin with the configuration in Azure. We would like to create a new claim with the following name &lt;strong&gt;http://visualauthn.accesscontrol.windows.net/IdentitySource&lt;/strong&gt;. It will have the value Facebook when logging in using a Facebook account and the value Google when logging in with Google Id.&lt;/p&gt;

&lt;p&gt;In Azure ACS go to Rule Groups and select the Rule Group that you use for your Relying Party Application. Click &lt;strong&gt;Add&lt;/strong&gt; to create a new Rule. In the &lt;strong&gt;If&lt;/strong&gt; section we choose Facebook as &lt;strong&gt;Input claim Issuer&lt;/strong&gt;, and then for &lt;strong&gt;Input claim type&lt;/strong&gt; select &lt;strong&gt;Any&lt;/strong&gt; and leave &lt;strong&gt;Input claim value&lt;/strong&gt; set to &lt;strong&gt;Any&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Controls-Se_DFE6/SNAGHTML1175ae15.png"&gt;&lt;img style="display: inline" title="If" alt="If" src="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Controls-Se_DFE6/SNAGHTML1175ae15_thumb.png" width="400" height="212" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the &lt;strong&gt;Then&lt;/strong&gt; section enter our own &lt;strong&gt;Output claim type&lt;/strong&gt; and use the name above. For &lt;strong&gt;Output claim value&lt;/strong&gt; we enter &lt;strong&gt;Facebook&lt;/strong&gt;, since that is the value we want SharePoint to receive for this claim. Finally always write a description on the rule - if you have many it can be a mess finding them otherwise. Once you're done click Save.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Controls-Se_DFE6/SNAGHTML117790c5.png"&gt;&lt;img style="display: inline" title="Then" alt="Then" src="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Controls-Se_DFE6/SNAGHTML117790c5_thumb.png" width="400" height="241" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Repeat the procedure for the Google IP. Add a new Rule with Google as Input claim issuer and the Output claim value set to "Google" - the rest should be the same as above. The Rule Group should look like this after these two operations:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Controls-Se_DFE6/SNAGHTML117c6e09.png"&gt;&lt;img style="display: inline" title="There they are..." alt="There they are..." src="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Controls-Se_DFE6/SNAGHTML117c6e09_thumb.png" width="400" height="79" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;Configure the SharePoint Trusted Identity Provider&lt;/h3&gt;

&lt;p&gt;Now we need to configure the Trusted Identity Provider in &lt;a href="http://sharepoint.microsoft.com/"&gt;SharePoint 2010&lt;/a&gt; so that it accepts these incoming claims. And of course this is done in PowerShell. First we create a new claim mapping and then get a handle on our Trusted Identity Provider. After that we add our custom claim type to the trusted IP and finally add a claim mapping, before we persist the values.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$map = New-SPClaimTypeMapping 
    &lt;br /&gt;    -IncomingClaimType "http://visualauthn.accesscontrol.windows.net/IdentitySource" 

    &lt;br /&gt;    -IncomingClaimTypeDisplayName "Identity Source" 

    &lt;br /&gt;    -SameAsIncoming 

    &lt;br /&gt;$tip = Get-SPTrustedIdentityTokenIssuer "Visual AuthN ACS" 

    &lt;br /&gt;$tip.ClaimTypes.Add("http://visualauthn.accesscontrol.windows.net/IdentitySource") 

    &lt;br /&gt;Add-SPClaimTypeMapping -Identity $map -TrustedIdentityTokenIssuer $tip 

    &lt;br /&gt;$tip.Update()&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Controls-Se_DFE6/SNAGHTML1180a639.png"&gt;&lt;img style="display: inline" title="PowerShelling..." alt="PowerShelling..." src="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Controls-Se_DFE6/SNAGHTML1180a639_thumb.png" width="600" height="209" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That's it - we should be ready to test it now...&lt;/p&gt;

&lt;h3&gt;Validate the the claims&lt;/h3&gt;

&lt;p&gt;If we log out and in again (this is required to get the new set of claims) we should see that our new claim is there and with the correct value. &lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Controls-Se_DFE6/SNAGHTML118855a9.png"&gt;&lt;img style="display: inline" title="We got our claim!!!" alt="We got our claim!!!" src="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Controls-Se_DFE6/SNAGHTML118855a9_thumb.png" width="600" height="185" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you have configured a separate web application and a secondary trusted identity provider, shown in the previous article, you will also see this claim - without modifying the secondary trusted IP. Cool huh!&lt;/p&gt;

&lt;p&gt;We can now use this claim to set permissions using the people picker:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Controls-Se_DFE6/SNAGHTML1191189a.png"&gt;&lt;img style="display: inline" title="People Picker" alt="People Picker" src="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Controls-Se_DFE6/SNAGHTML1191189a_thumb.png" width="400" height="170" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;Summary&lt;/h3&gt;

&lt;p&gt;I've now shown you how easy it is to augment claims using Azure ACS and to leverage them in SharePoint 2010. There are tons of cases where this is important and very useful. In the next post we'll add another claim for Facebook users - which will allow us to do some really cool stuff.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/TXeoN40GmYGQirrAXS4uj_0iWY8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/TXeoN40GmYGQirrAXS4uj_0iWY8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/TXeoN40GmYGQirrAXS4uj_0iWY8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/TXeoN40GmYGQirrAXS4uj_0iWY8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/WictorWilen?a=s6Wvbjri90Q:OG1Q7KAqO08:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WictorWilen?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/WictorWilen?a=s6Wvbjri90Q:OG1Q7KAqO08:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WictorWilen?i=s6Wvbjri90Q:OG1Q7KAqO08:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/WictorWilen?a=s6Wvbjri90Q:OG1Q7KAqO08:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WictorWilen?i=s6Wvbjri90Q:OG1Q7KAqO08:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/WictorWilen?a=s6Wvbjri90Q:OG1Q7KAqO08:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WictorWilen?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/WictorWilen?a=s6Wvbjri90Q:OG1Q7KAqO08:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WictorWilen?i=s6Wvbjri90Q:OG1Q7KAqO08:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/WictorWilen/~4/s6Wvbjri90Q" height="1" width="1"/&gt;</description><atom:author xmlns:atom="http://www.w3.org/2005/Atom">
                    <atom:name>Wictor Wilén</atom:name>
                </atom:author><atom:published xmlns:atom="http://www.w3.org/2005/Atom">2012-02-18 06:41:34Z</atom:published><atom:updated xmlns:atom="http://www.w3.org/2005/Atom">2012-02-18 06:41:34Z</atom:updated><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">3</slash:comments><trackback:ping xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">http://www.wictorwilen.se/trackback.aspx?id=631</trackback:ping><feedburner:origLink>http://www.wictorwilen.se/Post/Visual-guide-to-Azure-Access-Controls-Services-authentication-with-SharePoint-2010-part-5-Custom-Claims.aspx</feedburner:origLink></item><item><title>Visual guide to Azure Access Controls Services authentication with SharePoint 2010 - Index Post</title><link>http://feedproxy.google.com/~r/WictorWilen/~3/lmr2kUwWsjE/Visual-guide-to-Azure-Access-Controls-Services-authentication-with-SharePoint-2010-Index-Post.aspx</link><category>Security</category><category>Windows Live</category><category>Windows Azure</category><category>SharePoint 2010</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Wictor Wilén</dc:creator><pubDate>Fri, 17 Feb 2012 15:03:32 PST</pubDate><guid isPermaLink="false">http://www.wictorwilen.se/Post/Visual-guide-to-Azure-Access-Controls-Services-authentication-with-SharePoint-2010-Index-Post.aspx</guid><description>&lt;p&gt;This post serves as an index for all the articles in the &lt;strong&gt;Visual guide to Azure Access Controls Services authentication with &lt;/strong&gt;&lt;a href="http://sharepoint.microsoft.com/"&gt;&lt;strong&gt;SharePoint 2010&lt;/strong&gt;&lt;/a&gt;.  &lt;/p&gt;  &lt;p&gt;This series is a set [not yet determined amount] of articles where I show you how to leverage the Azure Access Controls Services (ACS) in combination with SharePoint 2010 to make it easier for you to use identity providers such as Google ID, Windows Live ID, Facebook AuthN etc.&lt;/p&gt;  &lt;h3&gt;Posts&lt;/h3&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.wictorwilen.se/Post/Visual-guide-to-Azure-Access-Controls-Services-authentication-with-SharePoint-2010-part-1.aspx"&gt;&lt;strong&gt;Part 1 - basic setup&lt;/strong&gt;&lt;/a&gt;       &lt;br /&gt;This article guides you through the basic setup of ACS and SharePoint 2010, from creating the Azure ACS endpoints to configuring the identity providers and relying party to finalizing the setup in SharePoint 2010  and finally log in using Google ID credentials. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;&lt;a href="http://www.wictorwilen.se/Post/Visual-guide-to-Azure-Access-Control-Services-authentication-with-SharePoint-2010-part-2-common-problems.aspx"&gt;Part 2 - common problems&lt;/a&gt;&lt;/strong&gt;       &lt;br /&gt;Even though if you follow all the instructions in part 1 you or more likely your colleague will run into problems. This article discusses the most common problems - and will hopefully be updated as time flies by. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;&lt;a href="http://www.wictorwilen.se/Post/Visual-guide-to-Azure-Access-Control-Services-authentication-with-SharePoint-2010-part-3-Facebook.aspx"&gt;Part 3 - Facebook Authentication&lt;/a&gt;&lt;/strong&gt;       &lt;br /&gt;The third part shows how to enable Facebook Authentication for your Azure ACS namespace and log in using a Facebook account to SharePoint 2010. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;&lt;a href="http://www.wictorwilen.se/Post/Visual-guide-to-Azure-Access-Controls-Services-authentication-with-SharePoint-2010-part-4-multiple-web-applications.aspx"&gt;Part 4 - Multiple Web Applications&lt;/a&gt;         &lt;br /&gt;&lt;/strong&gt;This post will show you how to handle the case when you have multiple web applications and would like to use the same Azure ACS settings. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;&lt;a href="http://www.wictorwilen.se/Post/Visual-guide-to-Azure-Access-Controls-Services-authentication-with-SharePoint-2010-part-5-Custom-Claims.aspx"&gt;Part 5 - Custom Claims&lt;/a&gt;&lt;/strong&gt;       &lt;br /&gt;In this post we'll take a look at how we can add custom claims through Azure ACS and leverage them in SharePoint. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;&lt;a href="http://www.wictorwilen.se/Post/Visual-guide-to-Azure-Access-Controls-Services-authentication-with-SharePoint-2010-part-6-Facebook-integration.aspx"&gt;Part 6 - Facebook Integration&lt;/a&gt;        &lt;br /&gt;&lt;/strong&gt;In this post we'll use the features in Azure ACS to do deeper integration with the Facebook Graph API. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Part 7 - Customize the login experience&lt;/strong&gt; &lt;/li&gt;    &lt;li&gt;... &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;em&gt;Note: this is what is actually written and planned for now . Any planned posts might change over time...&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Happy reading!&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/hXSOYfa8CMYn4asP4dzkii5xY1Y/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/hXSOYfa8CMYn4asP4dzkii5xY1Y/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/hXSOYfa8CMYn4asP4dzkii5xY1Y/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/hXSOYfa8CMYn4asP4dzkii5xY1Y/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/WictorWilen?a=lmr2kUwWsjE:fE4EWvrerd4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WictorWilen?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/WictorWilen?a=lmr2kUwWsjE:fE4EWvrerd4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WictorWilen?i=lmr2kUwWsjE:fE4EWvrerd4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/WictorWilen?a=lmr2kUwWsjE:fE4EWvrerd4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WictorWilen?i=lmr2kUwWsjE:fE4EWvrerd4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/WictorWilen?a=lmr2kUwWsjE:fE4EWvrerd4:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WictorWilen?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/WictorWilen?a=lmr2kUwWsjE:fE4EWvrerd4:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WictorWilen?i=lmr2kUwWsjE:fE4EWvrerd4:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/WictorWilen/~4/lmr2kUwWsjE" height="1" width="1"/&gt;</description><atom:author xmlns:atom="http://www.w3.org/2005/Atom">
                    <atom:name>Wictor Wilén</atom:name>
                </atom:author><atom:published xmlns:atom="http://www.w3.org/2005/Atom">2012-02-17 23:03:32Z</atom:published><atom:updated xmlns:atom="http://www.w3.org/2005/Atom">2012-02-17 23:03:32Z</atom:updated><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">3</slash:comments><trackback:ping xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">http://www.wictorwilen.se/trackback.aspx?id=630</trackback:ping><feedburner:origLink>http://www.wictorwilen.se/Post/Visual-guide-to-Azure-Access-Controls-Services-authentication-with-SharePoint-2010-Index-Post.aspx</feedburner:origLink></item><item><title>Visual guide to Azure Access Controls Services authentication with SharePoint 2010 - part 4 - multiple web applications</title><link>http://feedproxy.google.com/~r/WictorWilen/~3/RJ54m9sE59c/Visual-guide-to-Azure-Access-Controls-Services-authentication-with-SharePoint-2010-part-4-multiple-web-applications.aspx</link><category>Security</category><category>Windows Azure</category><category>SharePoint 2010</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Wictor Wilén</dc:creator><pubDate>Fri, 17 Feb 2012 15:01:23 PST</pubDate><guid isPermaLink="false">http://www.wictorwilen.se/Post/Visual-guide-to-Azure-Access-Controls-Services-authentication-with-SharePoint-2010-part-4-multiple-web-applications.aspx</guid><description>&lt;p&gt;Back with another promised post in the &lt;strong&gt;Visual guide to Azure Access Controls Services authentication with &lt;/strong&gt;&lt;a href="http://sharepoint.microsoft.com/"&gt;&lt;strong&gt;SharePoint 2010&lt;/strong&gt;&lt;/a&gt;. This time I'm going to show you how to work with &lt;strong&gt;multiple web applications&lt;/strong&gt;. We're going to use the stuff we configured in &lt;a href="http://www.wictorwilen.se/Post/Visual-guide-to-Azure-Access-Controls-Services-authentication-with-SharePoint-2010-part-1.aspx"&gt;part 1 (basic setup)&lt;/a&gt; and &lt;a href="http://www.wictorwilen.se/Post/Visual-guide-to-Azure-Access-Control-Services-authentication-with-SharePoint-2010-part-3-Facebook.aspx"&gt;part 3 (Facebook setup)&lt;/a&gt;, and hopefully we're avoiding the problems discussed in &lt;a href="http://www.wictorwilen.se/Post/Visual-guide-to-Azure-Access-Control-Services-authentication-with-SharePoint-2010-part-2-common-problems.aspx"&gt;part 2 (common problems)&lt;/a&gt;. &lt;/p&gt;  &lt;h3&gt;Scenario&lt;/h3&gt;  &lt;p&gt;In this article I would like to show you how to use Azure ACS and SharePoint 2010 when we have multiple Web Applications in SharePoint. The sample will assume the same web application as used in the previous posts, but now with a dedicated My Site Host Web Application (called http://my). If we just enable the same &lt;strong&gt;Trusted Identity Provider &lt;/strong&gt;to the "My" Web Application, the user will be redirected to the Azure ACS log in page, but when he/she is redirected back it will redirect back to the other web application (called http://sp2010 in the previous posts), because that's the web application we configured in the Return URL in Azure ACS.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/891996050817_EA27/SNAGHTMLfb94dc4.png"&gt;&lt;img style="display: inline" title="Only one Return URL" alt="Only one Return URL" src="http://www.wictorwilen.se/Windows-Live-Writer/891996050817_EA27/SNAGHTMLfb94dc4_thumb.png" width="514" height="139" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Since this is a "visual" guide we're only using the Azure ACS management web site to configure the ACS and the UI only supports &lt;strong&gt;one Return URL per Relying Party Application&lt;/strong&gt;. If you're using the ACS management web services you can configure multiple return url's - but that's another story for someone else to write about.&lt;/p&gt;  &lt;p&gt;So, we actually need to create a new &lt;strong&gt;Relying Party Application&lt;/strong&gt; in ACS to handle a different Return URL, and with that also another Trusted Identity Provider in SharePoint.&lt;/p&gt;  &lt;h3&gt;Create a new Azure Relying Party&lt;/h3&gt;  &lt;p&gt;Let's start with Azure ACS. Log in to the Azure management portal and go to Relying Party Applications, then choose to add a new one. Give it a Name (must be unique), a &lt;strong&gt;new&lt;/strong&gt; Realm (must also be unique within the ACS namespace) and finally the &lt;strong&gt;new&lt;/strong&gt; Return URL for our new web application.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/891996050817_EA27/SNAGHTMLfbdf910.png"&gt;&lt;img style="display: inline" title="SNAGHTMLfbdf910" alt="SNAGHTMLfbdf910" src="http://www.wictorwilen.se/Windows-Live-Writer/891996050817_EA27/SNAGHTMLfbdf910_thumb.png" width="299" height="302" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The next parts are pretty trivial, but important. Make sure you choose SAML 1.1 as token format, increase the Token Lifetime (to the same value as your other/original RP), then choose the same Identity Providers as for your other RP. Do NOT create a new Rule Group, make sure to select the same Rule Group as your original Relying Party. This is to make it easier for us to manage (especially for upcoming posts). Leave the rest as is and click Save.&lt;/p&gt;  &lt;p&gt;The next thing to do is to configure the Token Signing certificate for this guy. Click on Certificates and Keys and choose to add a new Token Signing certificate. Choose the newly created Relying Party Application in the drop down and then choose to upload the SAME certificate that you used for your original RP - this is important, no other certificate will do!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/891996050817_EA27/SNAGHTMLfc2bdb5.png"&gt;&lt;img style="display: inline" title="Add the SAME certificate for the new RP" alt="Add the SAME certificate for the new RP" src="http://www.wictorwilen.se/Windows-Live-Writer/891996050817_EA27/SNAGHTMLfc2bdb5_thumb.png" width="400" height="154" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Hit Save once you're done and we're done with configuring our new Relying Party Application for the new SharePoint Web Application.&lt;/p&gt;  &lt;h3&gt;Create a new SharePoint Trusted Identity Provider&lt;/h3&gt;  &lt;p&gt;In SharePoint we need to add a new Trusted Identity Provider that uses the &lt;strong&gt;new Realm&lt;/strong&gt; that was specified in the Relying Party Application. The procedure is basically the same as we did for our first Trusted IP, but with a subtle but important difference - we will not set the &lt;strong&gt;ImportTrustCertificate&lt;/strong&gt; parameter in the cmdlet. We have already imported the certificate once, to the original trusted IP. Adding the same certificate to a new trusted IP will throw an exception. But this is good, you will shortly learn that. So use the following PowerShell to create the new trusted identity provider.&lt;/p&gt;  &lt;p&gt;&lt;code&gt;$realm = "&lt;strong&gt;&lt;font color="#c0504d"&gt;uri:visualauthn-my&lt;/font&gt;&lt;/strong&gt;"       &lt;br /&gt;$signinurl = "https://&lt;strong&gt;&lt;font color="#c0504d"&gt;visualauthn&lt;/font&gt;&lt;/strong&gt;.accesscontrol.windows.net/v2/wsfederation”       &lt;br /&gt;$map1 = New-SPClaimTypeMapping      &lt;br /&gt;    "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress"       &lt;br /&gt;    -IncomingClaimTypeDisplayName "Email"       &lt;br /&gt;    –SameAsIncoming       &lt;br /&gt;New-SPTrustedIdentityTokenIssuer       &lt;br /&gt;    -Name "&lt;strong&gt;&lt;font color="#c0504d"&gt;Visual AuthN ACS - MY&lt;/font&gt;&lt;/strong&gt;"       &lt;br /&gt;    -Description "ACS rocks!"       &lt;br /&gt;    -Realm $realm       &lt;br /&gt;    -ClaimsMappings $map1       &lt;br /&gt;    -SignInUrl $signinurl       &lt;br /&gt;    -IdentifierClaim $map1.InputClaimType       &lt;br /&gt;&lt;/code&gt;&lt;/p&gt;  &lt;p&gt;The important things here to notice is that we're using the new Realm, the same sign in URL, gives the trusted ip a new Name and do not choose to use the ImportTrustCertificate parameter.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/891996050817_EA27/SNAGHTMLfc9ca62.png"&gt;&lt;img style="display: inline" title="Creating the new trusted ip" alt="Creating the new trusted ip" src="http://www.wictorwilen.se/Windows-Live-Writer/891996050817_EA27/SNAGHTMLfc9ca62_thumb.png" width="400" height="120" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Now we're ready to connect the web application to the new trusted identity provider.&lt;/p&gt;  &lt;h3&gt;&lt;/h3&gt;  &lt;h3&gt;Configure the secondary Web Application&lt;/h3&gt;  &lt;p&gt;In Central Administration go to Web Applications Management, choose the new Web Application (in this case http://my ) and select the Authentication Providers button in the Ribbon. Choose the appropriate zone in the dialog and then scroll down to Trusted Identity Providers and select the newly created one.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/891996050817_EA27/SNAGHTMLfd317d6.png"&gt;&lt;img style="display: inline" title="Configure the web app" alt="Configure the web app" src="http://www.wictorwilen.se/Windows-Live-Writer/891996050817_EA27/SNAGHTMLfd317d6_thumb.png" width="316" height="222" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Click Save when done and you're ready to test it.&lt;/p&gt;  &lt;h3&gt;Test it&lt;/h3&gt;  &lt;p&gt;Now when you browse to the secondary web application you can log in using our new Azure ACS Relying Party Application and you will be redirected to the correct web application (and not back to the first one, which is the case if we used the original trusted IP for the secondary web application).&lt;/p&gt;  &lt;p&gt;Now to the really interesting stuff! If you choose My Settings in both web applications you will notice that the account name is exactly the same.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/891996050817_EA27/SNAGHTMLfd69704.png"&gt;&lt;img style="display: inline" title="Personal settings" alt="Personal settings" src="http://www.wictorwilen.se/Windows-Live-Writer/891996050817_EA27/SNAGHTMLfd69704_thumb.png" width="531" height="127" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;This is good! This account will now be same throughout your web applications and you can actually set up a dedicated My Site Web App and have all Notes and Tags from the other web apps.&lt;/p&gt;  &lt;p&gt;Even though we created a new trusted identity provider, the account name is exactly the same! Even the issuer is the same in this identity. The reason behind this is that since we did not add any signing certificate to the secondary trusted IP (and we don't want to). When first trying to sign in SharePoint will redirect to the sign in URL (remember we have the same for both trusted IP's) using the Realm for the web application. We're using the same token signing certificate for both the ACS RP's (and the same rule group, which means that we get the same set of claims back) and when SharePoint retrieves the incoming request from Azure ACS it will locate the trusted identity provider using that token signing certificate. And it will find our original trusted identity provider and use it's settings (including claims mappings - which we'll also see in subsequent posts). Smart huh!&lt;/p&gt;  &lt;p&gt;The image below just shows our trusted IP's and their certificates.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/891996050817_EA27/SNAGHTMLfdb5228.png"&gt;&lt;img style="display: inline" title="SNAGHTMLfdb5228" alt="SNAGHTMLfdb5228" src="http://www.wictorwilen.se/Windows-Live-Writer/891996050817_EA27/SNAGHTMLfdb5228_thumb.png" width="600" height="88" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Summary&lt;/h3&gt;  &lt;p&gt;In this case we're adding a new Relying Party Application and a new Trusted Identity Provider in SharePoint just to get a new Return URL. The Trusted IP is there to send the correct Realm to Azure ACS so that it sends back the request to the correct Return URL. And this is only what the new trusted IP is for - in follow up posts to this one we'll modify the trusted IP and we only need to modify the original one to get effects on both web applications.&lt;/p&gt;  &lt;p&gt;SharePoint is smarter than you think! &lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/1LagtzL5eelu3l5Z6Q5df2VEPCQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/1LagtzL5eelu3l5Z6Q5df2VEPCQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/1LagtzL5eelu3l5Z6Q5df2VEPCQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/1LagtzL5eelu3l5Z6Q5df2VEPCQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/WictorWilen?a=RJ54m9sE59c:onGBXQWtT2w:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WictorWilen?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/WictorWilen?a=RJ54m9sE59c:onGBXQWtT2w:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WictorWilen?i=RJ54m9sE59c:onGBXQWtT2w:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/WictorWilen?a=RJ54m9sE59c:onGBXQWtT2w:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WictorWilen?i=RJ54m9sE59c:onGBXQWtT2w:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/WictorWilen?a=RJ54m9sE59c:onGBXQWtT2w:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WictorWilen?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/WictorWilen?a=RJ54m9sE59c:onGBXQWtT2w:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WictorWilen?i=RJ54m9sE59c:onGBXQWtT2w:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/WictorWilen/~4/RJ54m9sE59c" height="1" width="1"/&gt;</description><atom:author xmlns:atom="http://www.w3.org/2005/Atom">
                    <atom:name>Wictor Wilén</atom:name>
                </atom:author><atom:published xmlns:atom="http://www.w3.org/2005/Atom">2012-02-17 23:01:23Z</atom:published><atom:updated xmlns:atom="http://www.w3.org/2005/Atom">2012-02-17 23:01:23Z</atom:updated><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">6</slash:comments><trackback:ping xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">http://www.wictorwilen.se/trackback.aspx?id=629</trackback:ping><feedburner:origLink>http://www.wictorwilen.se/Post/Visual-guide-to-Azure-Access-Controls-Services-authentication-with-SharePoint-2010-part-4-multiple-web-applications.aspx</feedburner:origLink></item><item><title>Visual guide to Azure Access Control Services authentication with SharePoint 2010 - part 3 - Facebook</title><link>http://feedproxy.google.com/~r/WictorWilen/~3/V8BooCRvBR4/Visual-guide-to-Azure-Access-Control-Services-authentication-with-SharePoint-2010-part-3-Facebook.aspx</link><category>Security</category><category>Windows Azure</category><category>SharePoint 2010</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Wictor Wilén</dc:creator><pubDate>Wed, 15 Feb 2012 23:03:56 PST</pubDate><guid isPermaLink="false">http://www.wictorwilen.se/Post/Visual-guide-to-Azure-Access-Control-Services-authentication-with-SharePoint-2010-part-3-Facebook.aspx</guid><description>&lt;p&gt;Welcome back to a third post in the &lt;strong&gt;Visual Guide to Azure Access Control Services authentication with &lt;/strong&gt;&lt;a href="http://sharepoint.microsoft.com/"&gt;&lt;strong&gt;SharePoint 2010&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;.&lt;/strong&gt; &lt;a href="http://www.wictorwilen.se/Post/Visual-guide-to-Azure-Access-Controls-Services-authentication-with-SharePoint-2010-part-1.aspx"&gt;In the first part I showed you&lt;/a&gt; how to do the basic configuration of Azure ACS and SharePoint 2010 and log in using a Google Id. &lt;a href="http://www.wictorwilen.se/Post/Visual-guide-to-Azure-Access-Control-Services-authentication-with-SharePoint-2010-part-2-common-problems.aspx"&gt;The second part&lt;/a&gt; discussed the most common problems I've seen so far. In this post we'll continue extending the ACS Relying Party to support another Identity Provider - namely &lt;strong&gt;Facebook&lt;/strong&gt;! Depending on what type of site/community you're trying to build with your SharePoint 2010 site it might be of interest to use Facebook login (they have like a gazillion of users or something). The Facebook AuthN parts are a bit different than the others OOB IP's in Azure ACS - but not complicated at all, so let's get started...&lt;/p&gt;  &lt;h3&gt;Create a Facebook application&lt;/h3&gt;  &lt;p&gt;The first thing we need to do is to actually create a Facebook application. This is required to allow Azure ACS to convert the Facebook OAuth to outgoing claims, using the Facebook Graph API. And to do this you need a Facebook developer account. You do this by going to &lt;a title="http://developers.facebook.com/" href="http://developers.facebook.com/"&gt;http://developers.facebook.com/&lt;/a&gt;. Once you have your account you just click Apps in the upper right.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Control-Ser_ED14/SNAGHTML7456695.png"&gt;&lt;img style="display: inline" title="Apps, apps, apps" alt="Apps, apps, apps" src="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Control-Ser_ED14/SNAGHTML7456695_thumb.png" width="400" height="87" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;This will take you to all your apps, if you're new you don't have any...but you get the point. Next, click the &lt;strong&gt;Create New App&lt;/strong&gt; button. Give the app a display name and a namespace (as always namespaces must be unique - the UI helps you with that). Agree to the terms (you read those, right!?) and click Continue.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Control-Ser_ED14/image_2.png"&gt;&lt;img style="display: inline" title="Create a new app" alt="Create a new app" src="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Control-Ser_ED14/image_thumb.png" width="400" height="138" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;You will be asked to fill in the security check - do that and finalize you app creation. &lt;/p&gt;  &lt;p&gt;Now we need to do some configuring, but just one simple thing. We need to tell the app how we integrate with Facebook - we'll do that by checking the Website mark and then entering the URL to Azure ACS - it should be https://[your ACS namespace].accesscontrol.windows.net (you can also find the URL under Application Integration in the ACS portal). Then save the changes. It says this will take a couple of minutes, but we have some more configuring to do so we'll be okay.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Control-Ser_ED14/SNAGHTML74a9ffc.png"&gt;&lt;img style="display: inline" title="Connect the app to Azure" alt="Connect the app to Azure" src="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Control-Ser_ED14/SNAGHTML74a9ffc_thumb.png" width="600" height="134" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Keep this page open, you'll need the&lt;strong&gt; App ID&lt;/strong&gt; and &lt;strong&gt;App Secret&lt;/strong&gt; in the next step, when we configure Azure ACS.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Control-Ser_ED14/image_16.png"&gt;&lt;img style="display: inline" title="Important stuff" alt="Important stuff" src="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Control-Ser_ED14/image_thumb_7.png" width="400" height="58" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;h3&gt;Configure Azure Access Control Services&lt;/h3&gt;  &lt;p&gt;I assume that you have already created your Azure ACS Relying Party, but if you have not &lt;a href="http://www.wictorwilen.se/Post/Visual-guide-to-Azure-Access-Controls-Services-authentication-with-SharePoint-2010-part-1.aspx"&gt;revert to Part 1 of this series&lt;/a&gt;. Choose to add a new Identity Provider and select &lt;strong&gt;Facebook application&lt;/strong&gt;. Click Next when done.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Control-Ser_ED14/SNAGHTML6ead971.png"&gt;&lt;img style="display: inline" title="Add Identity Provider" alt="Add Identity Provider" src="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Control-Ser_ED14/SNAGHTML6ead971_thumb.png" width="400" height="171" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Now you need the App ID and App Secret from the Facebook application, input those values.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Control-Ser_ED14/SNAGHTML6edcb4e.png"&gt;&lt;img style="display: inline" title="Configure the Facebook IP" alt="Configure the Facebook IP" src="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Control-Ser_ED14/SNAGHTML6edcb4e_thumb.png" width="400" height="230" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Make sure that the checkbox is checked next to your Relying Party under &lt;strong&gt;Used By&lt;/strong&gt; and then click Save.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Control-Ser_ED14/SNAGHTML6ee4be2.png"&gt;&lt;img style="display: inline" title="Verification!" alt="Verification!" src="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Control-Ser_ED14/SNAGHTML6ee4be2_thumb.png" width="318" height="199" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Next step is to create Rules for this new IP. Go to the Rule Group that your RP is using and click on &lt;strong&gt;Generate&lt;/strong&gt;. Azure ACS will by default mark those IP's that does not have any rules, so just click the &lt;strong&gt;Generate &lt;/strong&gt;button to create the default rules.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Control-Ser_ED14/SNAGHTML6ef4676.png"&gt;&lt;img style="display: inline" title="More rules..." alt="More rules..." src="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Control-Ser_ED14/SNAGHTML6ef4676_thumb.png" width="348" height="259" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Once the rules are created, you can verify that an output claim is created for the Facebook IP using the emailaddress claim.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Control-Ser_ED14/SNAGHTML6f00235.png"&gt;&lt;img style="display: inline" title="It has to be there...." alt="It has to be there...." src="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Control-Ser_ED14/SNAGHTML6f00235_thumb.png" width="400" height="58" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Also check your Relying Party and make sure that it has the correct set of IP's configured.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Control-Ser_ED14/SNAGHTML6f29a11.png"&gt;&lt;img style="display: inline" title="Remove that fugly WLID" alt="Remove that fugly WLID" src="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Control-Ser_ED14/SNAGHTML6f29a11_thumb.png" width="336" height="224" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;That's it with the Azure ACS configuring. Now all that is left to do is test it in SharePoint!&lt;/p&gt;  &lt;h3&gt;&lt;/h3&gt;            &lt;h3&gt;Login using your Facebook account in SharePoint 2010&lt;/h3&gt;  &lt;p&gt;Before logging in you need to give access to your Facebook account in SharePoint. You'll use the e-mail address of the Facebook account - just add it to the Members Group of the site.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Control-Ser_ED14/image_4.png"&gt;&lt;img style="display: inline" title="Grant access to the FB account" alt="Grant access to the FB account" src="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Control-Ser_ED14/image_thumb_1.png" width="400" height="152" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Then log out and sign in as a new user and choose to use Azure ACS login. You will now, as usual, be redirected to the ACS Sign in screen and you should see Facebook listed as an IP there. You might have to refresh your browser using Ctrl-F5, since the page might be cached.&lt;/p&gt;    &lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Control-Ser_ED14/image_18.png"&gt;&lt;img style="display: inline" title="Sign in..." alt="Sign in..." src="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Control-Ser_ED14/image_thumb_8.png" width="287" height="302" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;When you click the Facebook button you will be redirected to Facebook which will prompt you for your credentials. Log in using the account you just gave permissions.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Control-Ser_ED14/image_14.png"&gt;&lt;img style="display: inline" title="AuthN" alt="AuthN" src="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Control-Ser_ED14/image_thumb_6.png" width="400" height="167" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The first time you will be requested to approve that Facebook sends information to your App, just click &lt;strong&gt;Go to App&lt;/strong&gt; and you'll be authenticated in ACS.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Control-Ser_ED14/image_12.png"&gt;&lt;img style="display: inline" title="Approve..." alt="Approve..." src="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Control-Ser_ED14/image_thumb_5.png" width="400" height="176" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;And voila! You have now logged in to SharePoint 2010 using your Facebook account.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Control-Ser_ED14/SNAGHTML6f95f05.png"&gt;&lt;img style="display: inline" title="Houston, we have lift off" alt="Houston, we have lift off" src="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Control-Ser_ED14/SNAGHTML6f95f05_thumb.png" width="348" height="176" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Summary&lt;/h3&gt;  &lt;p&gt;Making SharePoint take advantage of Azure ACS and the Facebook integration you can very easily create a log in experience that users are quite used to by now. As I have shown you it just takes a couple of minutes.&lt;/p&gt;  &lt;p&gt;I just can't stop writing on this topic, so I'll be back with some more awesomeness another day...&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/npH7581Tf_lSS1nWytrhw4YcdUs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/npH7581Tf_lSS1nWytrhw4YcdUs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/npH7581Tf_lSS1nWytrhw4YcdUs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/npH7581Tf_lSS1nWytrhw4YcdUs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/WictorWilen?a=V8BooCRvBR4:IwvFh-iW-pw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WictorWilen?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/WictorWilen?a=V8BooCRvBR4:IwvFh-iW-pw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WictorWilen?i=V8BooCRvBR4:IwvFh-iW-pw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/WictorWilen?a=V8BooCRvBR4:IwvFh-iW-pw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WictorWilen?i=V8BooCRvBR4:IwvFh-iW-pw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/WictorWilen?a=V8BooCRvBR4:IwvFh-iW-pw:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WictorWilen?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/WictorWilen?a=V8BooCRvBR4:IwvFh-iW-pw:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WictorWilen?i=V8BooCRvBR4:IwvFh-iW-pw:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/WictorWilen/~4/V8BooCRvBR4" height="1" width="1"/&gt;</description><atom:author xmlns:atom="http://www.w3.org/2005/Atom">
                    <atom:name>Wictor Wilén</atom:name>
                </atom:author><atom:published xmlns:atom="http://www.w3.org/2005/Atom">2012-02-16 07:03:56Z</atom:published><atom:updated xmlns:atom="http://www.w3.org/2005/Atom">2012-02-16 07:03:56Z</atom:updated><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">12</slash:comments><trackback:ping xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">http://www.wictorwilen.se/trackback.aspx?id=628</trackback:ping><feedburner:origLink>http://www.wictorwilen.se/Post/Visual-guide-to-Azure-Access-Control-Services-authentication-with-SharePoint-2010-part-3-Facebook.aspx</feedburner:origLink></item><item><title>Visual guide to Azure Access Control Services authentication with SharePoint 2010 - part 2 - common problems</title><link>http://feedproxy.google.com/~r/WictorWilen/~3/d_rYz-JfXtg/Visual-guide-to-Azure-Access-Control-Services-authentication-with-SharePoint-2010-part-2-common-problems.aspx</link><category>Security</category><category>Windows Azure</category><category>SharePoint 2010</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Wictor Wilén</dc:creator><pubDate>Wed, 15 Feb 2012 20:17:48 PST</pubDate><guid isPermaLink="false">http://www.wictorwilen.se/Post/Visual-guide-to-Azure-Access-Control-Services-authentication-with-SharePoint-2010-part-2-common-problems.aspx</guid><description>&lt;p&gt;This is a the second part of the Visual guide to Azure Access Control Services authentication with &lt;a href="http://sharepoint.microsoft.com/"&gt;SharePoint 2010&lt;/a&gt;. I hope you've read &lt;a href="http://www.wictorwilen.se/Post/Visual-guide-to-Azure-Access-Controls-Services-authentication-with-SharePoint-2010-part-1.aspx"&gt;part 1 which showed you how to configure SharePoint 2010 to use Windows Azure Access Control Services&lt;/a&gt;, ACS, as the federated Identity Provider, IP. In this post I'll go through the most common errors that you might stumble upon (most likely due to the fact that you didn't follow part 1 thoroughly). These errors are also applicable to other providers such as ADFS.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: this post is written using Azure ACS as per February 2012 and with SharePoint 2010 Server with SP1 and December 2011 Cumulative Update.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;So let's get started with a very annoying problem - Live ID...&lt;/p&gt;  &lt;h3&gt;Windows Live ID and the e-mail claim&lt;/h3&gt;  &lt;p&gt;The first error is not an error per see. You will see this one if you followed the instructions in the first part - but instead tried to use Windows Live ID when logging in. What you will see is the classic "&lt;strong&gt;An unexpected error occurred&lt;/strong&gt;".&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Controls-Se_13678/image_2.png"&gt;&lt;img style="display: inline" title="An unexpected error occurred" alt="An unexpected error occurred" src="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Controls-Se_13678/image_thumb.png" width="400" height="178" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The key here is to take a look at the URL. You will see a query string parameter called &lt;strong&gt;errorCode&lt;/strong&gt; which has the value &lt;strong&gt;TrustedMissingIdentityClaimSource&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Controls-Se_13678/SNAGHTML16ff35.png"&gt;&lt;img style="display: inline" title="URL reveals it all" alt="URL reveals it all" src="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Controls-Se_13678/SNAGHTML16ff35_thumb.png" width="600" height="36" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;So there is something missing! To understand what happened here we need to get back to the ACS management portal and take a look at the &lt;strong&gt;Rule Group&lt;/strong&gt; that was created for our Relying Party Application. As you can see in the image below only one claim is augmented when using Windows Live ID - the &lt;strong&gt;nameidentifier&lt;/strong&gt;. In part 1 we configured the identity claim (in the PowerShell script) and we configured it to use the e-mail as identity claim (&lt;a href="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress"&gt;http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress&lt;/a&gt;). If you read the last series on Live ID AuthN with SharePoint 2010 you might remember that you could not use the e-mail address of the Live ID user but instead had to use the UUID (basically a GUID that uniquely identified the user). Unfortunately (and this is a real bummer) this UUID (claim type &lt;a title="http://schemas.xmlsoap.org/claims/UPN" href="http://schemas.xmlsoap.org/claims/UPN"&gt;http://schemas.xmlsoap.org/claims/UPN&lt;/a&gt;) &lt;a href="http://msdn.microsoft.com/en-us/library/windowsazure/gg185944.aspx"&gt;is not available in Azure ACS, for Live ID&lt;/a&gt;. Instead the only claim we have access to is the &lt;strong&gt;nameidentifier&lt;/strong&gt; - which is a unique identifier for the specific user on this ACS namespace. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Controls-Se_13678/image_6.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Rules, rules, rules" border="0" alt="Rules, rules, rules" src="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Controls-Se_13678/image_thumb_2.png" width="404" height="104" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;If we add a new Rule in Azure ACS that uses the &lt;strong&gt;nameidentifier&lt;/strong&gt; as input claim and outputs it as the &lt;strong&gt;emailaddress&lt;/strong&gt; identifier claim. Then we at least have something unique for the user to work with.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Controls-Se_13678/SNAGHTML6b73fd0.png"&gt;&lt;img style="display: inline" title="Create me a rule" alt="Create me a rule" src="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Controls-Se_13678/SNAGHTML6b73fd0_thumb.png" width="400" height="223" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;When you now log in using a Live ID you will get an access denied message, which displays this unique nameidentifier. Copy the identifier and then log in using a Windows account (or the working Google account) and this identifier to the Members group (for instance).&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Controls-Se_13678/image_10.png"&gt;&lt;img style="display: inline" title="Who is that!" alt="Who is that!" src="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Controls-Se_13678/image_thumb_4.png" width="400" height="175" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Then log in again it will work, but...&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Controls-Se_13678/SNAGHTML6b9d654.png"&gt;&lt;img style="display: inline" title="Fugly" alt="Fugly" src="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Controls-Se_13678/SNAGHTML6b9d654_thumb.png" width="400" height="167" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Looks pretty bad! So you better leave Windows Live ID out of the discussion (until &lt;a href="http://www.microsoft.com" target="_blank"&gt;Microsoft&lt;/a&gt; fixes ACS to give us a decent claim to work with). Edit the Relying Party Application in ACS and remove Windows Live ID as Identity Provider and you will be a much happier person.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Controls-Se_13678/SNAGHTML2ff8d0.png"&gt;&lt;img style="display: inline" title="Turn of WLA" alt="Turn of WLA" src="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Controls-Se_13678/SNAGHTML2ff8d0_thumb.png" width="288" height="171" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;No Rules applied here!&lt;/h3&gt;  &lt;p&gt;One problem you might see when setting up the authentication using ACS is that you might be to trigger happy and fast when configuring and just forgets to add any Rules to your Relying Party. When you're trying to log in you will see an error message like this:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Controls-Se_13678/SNAGHTML65143d4.png"&gt;&lt;img style="display: inline" title="ACS600001" alt="ACS600001" src="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Controls-Se_13678/SNAGHTML65143d4_thumb.png" width="400" height="153" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The error message is &lt;strong&gt;ACS50000&lt;/strong&gt;: There was an error issuing a token, with two inner messages &lt;strong&gt;ACS60000 &lt;/strong&gt;and &lt;strong&gt;ACS60001 &lt;/strong&gt;where the last one gives us the clue in plain text: "&lt;em&gt;No output claims were generated during rules processing&lt;/em&gt;". This is just because you have no rules applied to that Relying Party which converts the incoming claims from the IP's to outgoing claims. To fix it edit your Rule Group and just use the &lt;strong&gt;Generate&lt;/strong&gt; to create your output claims:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Controls-Se_13678/SNAGHTML654477c.png"&gt;&lt;img style="display: inline" title="No rules!" alt="No rules!" src="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Controls-Se_13678/SNAGHTML654477c_thumb.png" width="400" height="59" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;This might happen if you're adding more Identity Providers to your Relying Party once you have configured it.&lt;/p&gt;  &lt;p&gt;Note: make sure that you're doing it for the correct Rule Group - the one selected in the Relying Party.&lt;/p&gt;  &lt;h3&gt;Invalid identifier claim&lt;/h3&gt;  &lt;p&gt;Another error, not that common though, that might happen if you start fiddling with the claims is that you do not get any incoming identifier claim to SharePoint. When this error happens you will get the classic &lt;em&gt;An unexpected error has occurred&lt;/em&gt; error page. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Controls-Se_13678/image_4.png"&gt;&lt;img style="display: inline" title="The expected unexpected" alt="The expected unexpected" src="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Controls-Se_13678/image_thumb_1.png" width="231" height="104" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The actual error can be find either in the URL or in the trace logs - both explain exactly what has happened. In the URL the error code is written out as &lt;strong&gt;TrustedMissingIdentityClaimSource. &lt;/strong&gt;Exactly the same as in the Windows Live ID dilemma above.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Controls-Se_13678/SNAGHTML69f8087.png"&gt;&lt;img style="display: inline" title="Check thy URL" alt="Check thy URL" src="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Controls-Se_13678/SNAGHTML69f8087_thumb.png" width="600" height="46" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;And in the trace logs you will find several entries (depending on your log level):&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Controls-Se_13678/SNAGHTML6a14ae7.png"&gt;&lt;img style="display: inline" title="ULSViewer FTW!" alt="ULSViewer FTW!" src="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Controls-Se_13678/SNAGHTML6a14ae7_thumb.png" width="600" height="131" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;To fix this make sure that you have an output claim, from the ACS Relying Party, for each Identity Provider, that matches the exact claim that you specified when configuring the token issuer identity claim (using PowerShell). You can verify your identity claims by running the PowerShell snippet&lt;/p&gt;  &lt;p&gt;&lt;code&gt;Get-SPTrustedIdentityTokenIssuer | ft Name,  @{Label = "Id Claim"; `      &lt;br /&gt;Expression={$_.IdentityClaimTypeInformation.InputClaimType}} -autosize&lt;/code&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Controls-Se_13678/SNAGHTML6a9ce58.png"&gt;&lt;img style="display: inline" title="PowerShell" alt="PowerShell" src="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Controls-Se_13678/SNAGHTML6a9ce58_thumb.png" width="600" height="123" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Then check you ACS rules and that each IP has an output claim of that type (that is unique of course!).&lt;/p&gt;  &lt;h3&gt;&lt;/h3&gt;  &lt;h3&gt;Token lifetime&lt;/h3&gt;  &lt;p&gt;The most common problem with Azure ACS and SharePoint 2010 is that you successfully logs in and then either directly are redirected back to the log in page or you're logged in for a second and then as soon as you click something are requested to log in again. If you have enabled Verbose Trace Logging for Claims Authentication (which definitely is a good thing to do when troubleshooting claims stuff) you will also see this message in the ULS logs: "&lt;em&gt;Token cache entry missing.&lt;/em&gt;".&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Controls-Se_13678/SNAGHTML666c88d.png"&gt;&lt;img style="display: inline" title="missing token" alt="missing token" src="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Controls-Se_13678/SNAGHTML666c88d_thumb.png" width="611" height="103" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;This is most likely due to that you have misconfigured the Token Lifetime, or just let it have the standard value of 600. Most likely you did not read my previous post thoroughly enough!!!&lt;/p&gt;  &lt;p&gt;The STS of SharePoint 2010 has a default lifetime of the logon token set to 10 minutes (600 seconds) and this is also the default value of the ACS RP token lifetime (600 seconds). If you with these default  values can actually log in you have a fast connection/machine, but any subsequent action in SharePoint will force you to re-authenticate. You have to configure the lifetime in ACS larger than the value in SharePoint (either by increasing the ACS token lifetime or lowering the SharePoint 2010 &lt;strong&gt;LogonTokenCacheExpirationWindow&lt;/strong&gt; value of the  STS.&lt;/p&gt;  &lt;p&gt;In my previous post I set the token lifetime to 700 seconds - this will then make your users log in every 100 seconds (700-600). If you set it to 610 seconds in ACS you will have to re-authenticate every 10 seconds. A recommendation is to bump it up to 3.600 seconds, so you don't annoy your users to much! &lt;/p&gt;  &lt;h3&gt;Not using correct SAML version&lt;/h3&gt;  &lt;p&gt;Another common error is that you get a Runtime Error (Yellow Screen of Death) directly after you have logged in using one of the IP's. The ULS logs does not show any useful information, you just see that a request is going to the /_trust/default.aspx page.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Controls-Se_13678/SNAGHTML658a757.png"&gt;&lt;img style="display: inline" title="YSOD" alt="YSOD" src="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Controls-Se_13678/SNAGHTML658a757_thumb.png" width="362" height="302" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;On the other hand, if you switch to the Windows Event Viewer you will notice an ASP.NET error, with event id 1309. And if you look closer at the details, the answer is there, once again under your fingertips.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Controls-Se_13678/SNAGHTML65ee0ed.png"&gt;&lt;img style="display: inline" title="Event Viewer" alt="Event Viewer" src="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Controls-Se_13678/SNAGHTML65ee0ed_thumb.png" width="400" height="282" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The exception message says: "&lt;em&gt;ID4014: A SecurityTokenHandler is not registered to read security token ('Assertion', 'urn:oasis:names:tc:SAML:2.0:assertion').". &lt;/em&gt;Once again you've misconfigured the ACS Relying Party - you &lt;strong&gt;must&lt;/strong&gt; use &lt;strong&gt;SAML 1.1&lt;/strong&gt; to get this working (without setting up an intermediate ADFS server or similar).&lt;/p&gt;  &lt;h3&gt;Certificate problems&lt;em&gt; &lt;/em&gt; &lt;/h3&gt;  &lt;p&gt;Another issue that might throw the yellow screen of death on the /_trust/default.aspx page is when you have invalid or missing certificates. Again both the trace logs and Windows event logs shows us the error. In the Windows Event Logs you will see a SharePoint error with event id &lt;strong&gt;8311&lt;/strong&gt;. This error will say that it could not validate the certificate used to sign the incoming claims. The trace logs will show the exact same error, also with id 8311, in the Topology category.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Controls-Se_13678/SNAGHTML6acb3e6.png"&gt;&lt;img style="display: inline" title="Certificates..." alt="Certificates..." src="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Controls-Se_13678/SNAGHTML6acb3e6_thumb.png" width="600" height="162" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Fix the error by making sure that you have added the same signing certificate to Azure ACS and as a trusted root authority. See part 1 of this series for more info.    &lt;br /&gt;&lt;/p&gt;  &lt;h3&gt;Summary&lt;/h3&gt;  &lt;p&gt;As you can see it's all about configuration and make it right! I hope this post will help you with the basic problems, and if you get any other errors, please post a comment. &lt;/p&gt;  &lt;p&gt;I'll be back with at least one more post on this topic...&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/iE-Yq5hNrsO0EWxvDpUNl79lSX4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/iE-Yq5hNrsO0EWxvDpUNl79lSX4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/iE-Yq5hNrsO0EWxvDpUNl79lSX4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/iE-Yq5hNrsO0EWxvDpUNl79lSX4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/WictorWilen?a=d_rYz-JfXtg:C_nbsTc9uB0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WictorWilen?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/WictorWilen?a=d_rYz-JfXtg:C_nbsTc9uB0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WictorWilen?i=d_rYz-JfXtg:C_nbsTc9uB0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/WictorWilen?a=d_rYz-JfXtg:C_nbsTc9uB0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WictorWilen?i=d_rYz-JfXtg:C_nbsTc9uB0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/WictorWilen?a=d_rYz-JfXtg:C_nbsTc9uB0:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WictorWilen?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/WictorWilen?a=d_rYz-JfXtg:C_nbsTc9uB0:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WictorWilen?i=d_rYz-JfXtg:C_nbsTc9uB0:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/WictorWilen/~4/d_rYz-JfXtg" height="1" width="1"/&gt;</description><atom:author xmlns:atom="http://www.w3.org/2005/Atom">
                    <atom:name>Wictor Wilén</atom:name>
                </atom:author><atom:published xmlns:atom="http://www.w3.org/2005/Atom">2012-02-16 04:17:48Z</atom:published><atom:updated xmlns:atom="http://www.w3.org/2005/Atom">2012-02-16 04:17:48Z</atom:updated><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">7</slash:comments><trackback:ping xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">http://www.wictorwilen.se/trackback.aspx?id=627</trackback:ping><feedburner:origLink>http://www.wictorwilen.se/Post/Visual-guide-to-Azure-Access-Control-Services-authentication-with-SharePoint-2010-part-2-common-problems.aspx</feedburner:origLink></item><item><title>Visual guide to Azure Access Controls Services authentication with SharePoint 2010 - part 1</title><link>http://feedproxy.google.com/~r/WictorWilen/~3/gQJISNZCuVI/Visual-guide-to-Azure-Access-Controls-Services-authentication-with-SharePoint-2010-part-1.aspx</link><category>Windows Azure</category><category>SharePoint 2010</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Wictor Wilén</dc:creator><pubDate>Wed, 01 Feb 2012 01:38:19 PST</pubDate><guid isPermaLink="false">http://www.wictorwilen.se/Post/Visual-guide-to-Azure-Access-Controls-Services-authentication-with-SharePoint-2010-part-1.aspx</guid><description>&lt;p&gt;A year and a half ago I posted the &lt;a href="http://www.wictorwilen.se/Post/Visual-guide-to-Windows-Live-ID-authentication-with-SharePoint-2010-part-1.aspx"&gt;Visual guide to Windows Live ID authentication with SharePoint 2010&lt;/a&gt; series, a post that got a tremendously amount of hits (and still gets) and tons of comments (and new ones still coming in). It showed quite a cumbersome way to Live ID enable your &lt;a href="http://sharepoint.microsoft.com/"&gt;SharePoint 2010&lt;/a&gt; Web Applications using the &lt;a href="http://www.microsoft.com" target="_blank"&gt;Microsoft&lt;/a&gt; Service Manager, MSM, (which works some times and some times not). Although it did/do work it is not the best way to enable Live ID authentication to your SharePoint 2010 web site. The MSM required you to first test in their INT environment and get approval before putting it into production, and you had to follow a set of guidelines on how to use Live ID logos etc etc, not mentioning all the manual configuration.&lt;/p&gt;  &lt;p&gt;Microsoft has a service in its &lt;strong&gt;Windows Azure&lt;/strong&gt; offering called &lt;strong&gt;Access Control Services&lt;/strong&gt;. This is essentially an Identity Federation Provider, living in Windows Azure. This IP not only allows you to federate Live ID authentication but also Google ID, Facebook ID etc. In this post, and subsequent ones, I'll do a visual guide on how to configure SharePoint 2010 to use Windows Azure Access Control Services, &lt;strong&gt;ACS&lt;/strong&gt;, to handle your authentication.&lt;/p&gt;  &lt;h3&gt;Configuring Azure ACS&lt;/h3&gt;  &lt;p&gt;First of all let's get acquainted with Windows Azure Access Control Services. But before you start you need to have a Windows Azure subscription. Unfortunately this isn't for free, but if you have an MSDN Subscription you can take advantage of the &lt;a href="http://www.windowsazure.com/en-us/pricing/member-offers/msdn-benefits/"&gt;MSDN Azure benefits&lt;/a&gt;. Once you have your subscription you head on over to &lt;a href="http://windows.azure.com"&gt;http://windows.azure.com&lt;/a&gt; and sign in with your Live ID. Once you're signed in you are in the &lt;strong&gt;Azure Management Portal&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Services-au_B544/image_2.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Windows Azure Portal" border="0" alt="Windows Azure Portal" src="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Services-au_B544/image_thumb.png" width="504" height="308" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;On the left hand side is the navigation and select &lt;strong&gt;Service Bus, Access Control &amp; Caching&lt;/strong&gt; (this is the part that was/is called Azure &lt;a href="http://www.microsoft.com/windowsazure/appfabric/overview/default.aspx" target="_blank"&gt;AppFabric&lt;/a&gt;), #1 in the image below. This will load all the AppFabric Services and you will get a new navigation tree on the left hand side and the Ribbon menu will update. To create your &lt;strong&gt;Service Namespace&lt;/strong&gt;, which is like a "container" for the AppFabric services, click on the &lt;strong&gt;New &lt;/strong&gt;button in the Ribbon (#2).&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Services-au_B544/SNAGHTML17e4ccf.png"&gt;&lt;img style="display: inline" title="AppFabric" alt="AppFabric" src="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Services-au_B544/SNAGHTML17e4ccf_thumb.png" width="225" height="302" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;This will bring up a dialog  where you create your new namespace. First of all select the services you want in this namespace - for this authentication sample we only need the &lt;strong&gt;Access Control &lt;/strong&gt;(#1). Secondly you need to specify a unique namespace for your Service Namespace (#2). After that select an appropriate Region (#3) and optionally a Subscription if you have multiple ones. Once your satisfied click &lt;strong&gt;Create Namespace&lt;/strong&gt; (#4) to start the creation.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Services-au_B544/image_4.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="New Service Namespace" border="0" alt="New Service Namespace" src="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Services-au_B544/image_thumb_1.png" width="504" height="213" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The creation will take a couple of minutes, so now it's a good time to take that coffee you all been waiting for! As always when dealing with AuthN, coffee breaks are good, that's what my good ol' buddy Spence always nagging about. Wait until the service namespace has the status of Active until proceeding further.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Services-au_B544/SNAGHTML18722d3.png"&gt;&lt;img style="display: inline" title="Activating..." alt="Activating..." src="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Services-au_B544/SNAGHTML18722d3_thumb.png" width="500" height="83" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Once it has the Active Status, select your newly created Service Namespace (#1) and  choose &lt;strong&gt;Access Control Service&lt;/strong&gt; in the Ribbon menu (#2). This will open the Access Control Services administration. Note: you will navigate away from the Azure management and reuse the same browser window.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Services-au_B544/SNAGHTML188a3f4.png"&gt;&lt;img style="display: inline" title="Configure it..." alt="Configure it..." src="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Services-au_B544/SNAGHTML188a3f4_thumb.png" width="500" height="228" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The Access Control Service administration site contains a lot of configuration options. You will see a left hand side navigation where you can set up everything from &lt;strong&gt;Identity Providers&lt;/strong&gt;, IP,&lt;strong&gt; &lt;/strong&gt;and Trusted Parties to custom certificates and get details on how to integrate this with your applications. The first thing we will do here is to add a couple of identity providers, click on &lt;strong&gt;Identity Providers&lt;/strong&gt; in the menu.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Services-au_B544/image_8.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Access Control Services Management Portal" border="0" alt="Access Control Services Management Portal" src="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Services-au_B544/image_thumb_3.png" width="404" height="250" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h4&gt;&lt;/h4&gt;  &lt;h4&gt;Identity Providers&lt;/h4&gt;  &lt;p&gt;The Identity Providers menu option shows all the Identity Providers that currently is available for this ACS Service Namespace. By default you will only see Windows Live ID. While Windows Live ID might work (if you can live with all the guid based identities) it's very convenient to add other IP's here. Click on &lt;strong&gt;Add&lt;/strong&gt; to add a new IP.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Services-au_B544/SNAGHTML1906002.png"&gt;&lt;img style="display: inline" title="Identity Providers" alt="Identity Providers" src="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Services-au_B544/SNAGHTML1906002_thumb.png" width="329" height="126" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I like to add the Google Identity Provider, since all the user identities from Google IP will use the Google login id (e-mail). Select &lt;strong&gt;Google&lt;/strong&gt; amongst the preconfigured IP's and then click &lt;strong&gt;Next&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Services-au_B544/SNAGHTML1928434.png"&gt;&lt;img style="display: inline" title="Add IP" alt="Add IP" src="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Services-au_B544/SNAGHTML1928434_thumb.png" width="229" height="179" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The next page gives you some customizations options for the Google IP. Change anything you want here and click &lt;strong&gt;Save &lt;/strong&gt;to continue.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Services-au_B544/SNAGHTML1940b5d.png"&gt;&lt;img style="display: inline" title="Login Page" alt="Login Page" src="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Services-au_B544/SNAGHTML1940b5d_thumb.png" width="241" height="175" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;This should take you back to the IP page and you should now see both Windows Live ID and Google listed there.&lt;/p&gt;  &lt;h4&gt;The Relying Party&lt;/h4&gt;  &lt;p&gt;Next thing to do is to add a &lt;strong&gt;Relying Party Application&lt;/strong&gt;, that is our SharePoint Web Application. Choose Relying party applications in the left hand menu. You will have no RP's configured by default so click on &lt;strong&gt;Add&lt;/strong&gt; to create a new one.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Services-au_B544/SNAGHTML1963b14.png"&gt;&lt;img style="display: inline" title="Relying Parties" alt="Relying Parties" src="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Services-au_B544/SNAGHTML1963b14_thumb.png" width="252" height="155" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;You will now see a form and it is here things must be written correctly otherwise you will not get the AuthN to work with SharePoint 2010. First of all give your RP a nice and easy &lt;strong&gt;name&lt;/strong&gt; (#1). Secondly is the &lt;strong&gt;realm&lt;/strong&gt; (#2), if you remember from the Live ID visual guide the Realm is important. Use a URI instead of URL, it's easier to remember and always works. In this case I choose &lt;code&gt;uri:visualauthn&lt;/code&gt;. Then we also need to fill in the &lt;strong&gt;Return URL&lt;/strong&gt; (#3). The return URL must point to http://server/&lt;strong&gt;_trust/default.aspx&lt;/strong&gt; when dealing with SharePoint 2010 (of course replace with your server name, localhost also works in a test environment).&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Services-au_B544/SNAGHTML19a6899.png"&gt;&lt;img style="display: inline" title="RP Settings" alt="RP Settings" src="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Services-au_B544/SNAGHTML19a6899_thumb.png" width="299" height="302" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The next things to configure is the tokens. First of all SAML 1.1 must be used as &lt;strong&gt;Token Format&lt;/strong&gt; (#1), SAML 2.0 is default in ACS so make sure to change this. Leave &lt;strong&gt;Token encryption policy&lt;/strong&gt; to None (#2). Then finally an important piece - the &lt;strong&gt;Token lifetime&lt;/strong&gt;. By default this is set to 600 seconds and you need to increase this value. The reason for that is that SharePoint 2010 has the expected token lifetime configured to 600 seconds and when SharePoint validates the token, which is after it's been issued by ACS it will fall outside the lifetime. So you have two options here lower the SharePoint lifetime or increase it in ACS, in this case I've done the latter and set it to 700 seconds.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Services-au_B544/SNAGHTML19f747c.png"&gt;&lt;img style="display: inline" title="Token Settings" alt="Token Settings" src="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Services-au_B544/SNAGHTML19f747c_thumb.png" width="400" height="254" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The rest of the configuration is left intact. If you like you can uncheck Windows Live ID if you do not want Live ID users to sign in with this RP. Click &lt;strong&gt;Save &lt;/strong&gt;when you're done.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Services-au_B544/SNAGHTML1a3ac5d.png"&gt;&lt;img style="display: inline" title="Save!" alt="Save!" src="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Services-au_B544/SNAGHTML1a3ac5d_thumb.png" width="299" height="302" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;You should now see your newly created Relying Party.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Services-au_B544/image_14.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="The RP" border="0" alt="The RP" src="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Services-au_B544/image_thumb_6.png" width="404" height="81" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h4&gt;Some rules!&lt;/h4&gt;  &lt;p&gt;We now have two IP's connected to the RP - each of the IP's has a set of outgoing claims to our RP and we need to make sure that the claims received from the IP's to the RP are passed through to SharePoint as outgoing claims from the RP. This is done through the &lt;strong&gt;Rule Groups&lt;/strong&gt;. Select Rule groups in the left hand menu. You will see a Rule Group called "Default Rule Group for Visual AuthN" - this group was automatically created for us when we created the RP: Now click on the rule group to create the actual rules.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Services-au_B544/SNAGHTML2277a29.png"&gt;&lt;img style="display: inline" title="Rule Groups" alt="Rule Groups" src="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Services-au_B544/SNAGHTML2277a29_thumb.png" width="400" height="191" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Note that there are no rules by default. To create the default rules, just click on &lt;strong&gt;Generate&lt;/strong&gt; to create them.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Services-au_B544/SNAGHTML228adb7.png"&gt;&lt;img style="display: inline" title="Generate" alt="Generate" src="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Services-au_B544/SNAGHTML228adb7_thumb.png" width="400" height="81" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;First we need to select for which IP's to generate the rules, make sure both Live ID and Google (in this case) are selected and click the &lt;strong&gt;Generate &lt;/strong&gt;button.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Services-au_B544/SNAGHTML2298d6b.png"&gt;&lt;img style="display: inline" title="Generate Rules" alt="Generate Rules" src="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Services-au_B544/SNAGHTML2298d6b_thumb.png" width="400" height="150" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Now ACS will generate the default rules for all selected IP's. Click &lt;strong&gt;Save&lt;/strong&gt; to complete the rules setup.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Services-au_B544/SNAGHTML22b0143.png"&gt;&lt;img style="display: inline" title="The Rules" alt="The Rules" src="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Services-au_B544/SNAGHTML22b0143_thumb.png" width="400" height="190" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I will in follow up posts on this one, show you how to fiddle a bit with these rules. But for now we're just using all the default settings.&lt;/p&gt;  &lt;h3&gt;Certificates&lt;/h3&gt;  &lt;p&gt;Next thing to do is to create a certificate that we will be using for &lt;strong&gt;Token Signing&lt;/strong&gt;. The Management Portal makes it very easy for us to make a self signed certificate for testing and demo purposes. For production scenarios either purchase an X.509 certificate or request one from your local Certification Authority (CA) (for instance AD Certificate Services). Just make sure it's a certificate for sign &lt;strong&gt;and &lt;/strong&gt;encrypt the payload. Navigate to the &lt;strong&gt;Certificates and Keys &lt;/strong&gt;in the ACS Management Portal. Click on &lt;strong&gt;Add&lt;/strong&gt; next to the &lt;strong&gt;Token Signing&lt;/strong&gt; certificates.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Services-au_B544/SNAGHTML1b4793d.png"&gt;&lt;img style="display: inline" title="Certificates and Keys" alt="Certificates and Keys" src="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Services-au_B544/SNAGHTML1b4793d_thumb.png" width="400" height="216" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;First of all make sure that the correct Relying Party is selected, it should be the one you just created. ACS allows you to have multiple RP's so just make an extra check.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Services-au_B544/SNAGHTML1c94b4b.png"&gt;&lt;img style="display: inline" title="Used for" alt="Used for" src="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Services-au_B544/SNAGHTML1c94b4b_thumb.png" width="400" height="153" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;If you want to create a self signed certificate, take a look at the middle of that page. There is a small snippet that you just can copy and paste to create your own certificate (if you have the MakeCert utility, which is a part of the Windows SDK).&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Services-au_B544/SNAGHTML1b5a607.png"&gt;&lt;img style="display: inline" title="MakeCert" alt="MakeCert" src="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Services-au_B544/SNAGHTML1b5a607_thumb.png" width="400" height="112" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Copy and paste that into a command window or a PowerShell console. This will create your signing certificate and store in the My store on the box you run the command at. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Services-au_B544/SNAGHTML1b824c7.png"&gt;&lt;img style="display: inline" title="MakeCert POSH" alt="MakeCert POSH" src="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Services-au_B544/SNAGHTML1b824c7_thumb.png" width="400" height="68" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Now you need to export this certificate into two files (with and without the private key). One to upload to ACS and one to import into SharePoint 2010 later. You can export the certificates using the Certificates MMC Snap-In (like in the previous visual Live ID guide) or use PowerShell, which will impress your colleagues more.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Services-au_B544/SNAGHTML1c4d7d1.png"&gt;&lt;img style="display: inline" title="Export Cert POSH" alt="Export Cert POSH" src="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Services-au_B544/SNAGHTML1c4d7d1_thumb.png" width="400" height="136" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The PowerShell I use to export the certificate to one password protected Pfx file (with key) and a Cer file (without key) are the following:&lt;/p&gt;  &lt;p&gt;&lt;code&gt;$cert = @(dir cert: -Recurse |   Where-Object { $_.subject -like "&lt;strong&gt;CN=visualauthn&lt;/strong&gt;*" })[0] $type = [System.Security.Cryptography.X509Certificates.X509ContentType]::Cert       &lt;br /&gt;$bytes = $cert.Export($type)       &lt;br /&gt;[System.IO.File]::WriteAllBytes("&lt;strong&gt;c:\visualauthn.cer&lt;/strong&gt;", $bytes)       &lt;br /&gt;$type = [System.Security.Cryptography.X509Certificates.X509ContentType]::Pfx       &lt;br /&gt;$pass = read-host "Password" -assecurestring       &lt;br /&gt;$bytes = $cert.Export($type, $pass)       &lt;br /&gt;[System.IO.File]::WriteAllBytes("&lt;strong&gt;c:\visualauthn.pfx&lt;/strong&gt;", $bytes) &lt;/code&gt;&lt;/p&gt;  &lt;p&gt;As you can see I grab the certificate with the correct subject and then use the .NET classes to export the certificates and finally save the bytes into files. Replace the exported filenames with your own and also the subject on the first line when doing this for your service,&lt;/p&gt;  &lt;p&gt;The Pfx file must be uploaded to ACS. You should still be on the Add Token Signing certificate page and now choose to upload the Pfx certificate and then enter the password you used when exporting it. Make sure that you choose to use this certificate as primary certificate and then click &lt;strong&gt;Save&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Services-au_B544/SNAGHTML1c787dd.png"&gt;&lt;img style="display: inline" title="Upload cert" alt="Upload cert" src="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Services-au_B544/SNAGHTML1c787dd_thumb.png" width="400" height="218" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;By now we're done with ACS. Let's head on over to configuring SharePoint.&lt;/p&gt;  &lt;h3&gt;Configuring SharePoint&lt;/h3&gt;  &lt;p&gt;Now it's time for the fun stuff - SharePoint. First of all you need to have a Web Application that uses Claims Authentication. If your web app is in Classic mode, either create a new one or upgrade from Classic to Claims.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Services-au_B544/image_16.png"&gt;&lt;img style="display: inline" title="Claims FTW" alt="Claims FTW" src="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Services-au_B544/image_thumb_7.png" width="400" height="119" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h4&gt;Trusted Root Authority&lt;/h4&gt;  &lt;p&gt;Now we need to make sure that the SharePoint farm trusts the certificate used by ACS to sign the tokens. This is done by uploading the other certificate file into SharePoint, using PowerShell. The following code is used to import the .cer file:&lt;/p&gt;  &lt;p&gt;&lt;code&gt;asnp microsoft.sharepoint.powershell      &lt;br /&gt;$cert = Get-PfxCertificate "C:\visualauthn.cer"       &lt;br /&gt;New-SPTrustedRootAuthority -Certificate $cert -Name "Visual AuthN ACS"&lt;/code&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Services-au_B544/SNAGHTML1e5a28f.png"&gt;&lt;img style="display: inline" title="Trusted Root Authority POSH" alt="Trusted Root Authority POSH" src="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Services-au_B544/SNAGHTML1e5a28f_thumb.png" width="400" height="199" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;To verify that the certificate is imported as a trusted certificate in SharePoint, go to Central Administration &gt; Security &gt; Manage Trust. You should see the name of the trust there:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Services-au_B544/SNAGHTML1e7b074.png"&gt;&lt;img style="display: inline" title="Ok, it's there" alt="Ok, it's there" src="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Services-au_B544/SNAGHTML1e7b074_thumb.png" width="400" height="85" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h4&gt;The Trusted Identity Provider&lt;/h4&gt;  &lt;p&gt;Next up is to add the ACS RP as a &lt;strong&gt;Trusted Token Issuer&lt;/strong&gt; in SharePoint. Once again we'll do this using PowerShell. Here it is really important that you specify the exact realm as entered when you created the RP in ACS (see line 1 in POSH below). Then you also need the Sign In URL for your RP. Modify line 2 below to match the URL for your Service Namespace (bold and red). Next we define a claim mapping for the identity claim that we want to use, in this case the e-mail address. Finally we just add the new trusted identity token issuer&lt;/p&gt;  &lt;p&gt;&lt;code&gt;$realm = "&lt;strong&gt;uri:visualauthn&lt;/strong&gt;"       &lt;br /&gt;$signinurl = "https://&lt;strong&gt;&lt;font color="#c0504d"&gt;visualauthn&lt;/font&gt;&lt;/strong&gt;.accesscontrol.windows.net/v2/wsfederation”       &lt;br /&gt;$map1 = New-SPClaimTypeMapping       &lt;br /&gt;    "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress"       &lt;br /&gt;    -IncomingClaimTypeDisplayName "Email" –SameAsIncoming       &lt;br /&gt;New-SPTrustedIdentityTokenIssuer -Name "&lt;strong&gt;Visual AuthN ACS&lt;/strong&gt;"       &lt;br /&gt;    -Description "&lt;strong&gt;ACS rocks!&lt;/strong&gt;"       &lt;br /&gt;    -Realm $realm       &lt;br /&gt;    -ImportTrustCertificate $cert       &lt;br /&gt;    -ClaimsMappings $map1       &lt;br /&gt;    -SignInUrl $signinurl       &lt;br /&gt;    -IdentifierClaim $map1.InputClaimType&lt;/code&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Services-au_B544/SNAGHTML1f42304.png"&gt;&lt;img style="display: inline" title="Magic POSH" alt="Magic POSH" src="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Services-au_B544/SNAGHTML1f42304_thumb.png" width="400" height="143" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Now it's time to modify our Web Application to use this ACS RP. Go to Central Administration and Web Application administration. Choose the Web Application you want to enable the RP for (remember that it has to be a Claims Web App). Choose to modify &lt;strong&gt;Authentication Providers&lt;/strong&gt; from the Ribbon menu and select the correct Zone (normally Default). Then scroll down to Claims Authentication Types and check the &lt;strong&gt;Trusted Identity Provider &lt;/strong&gt;checkbox and then our own ACS Trusted Identity Provider. Once that's done click &lt;strong&gt;Save&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Services-au_B544/SNAGHTML234d775.png"&gt;&lt;img style="display: inline" title="Web App AuthN" alt="Web App AuthN" src="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Services-au_B544/SNAGHTML234d775_thumb.png" width="270" height="302" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;One final thing here before testing it all. I personally prefer to add a User Policy on the web application directly for one of the users that will log in through the ACS RP. You can of course log in using Windows AuthN and then set permissions inside the site if you prefer so. But this is how I do it. Select the web application and then click &lt;strong&gt;User Policy &lt;/strong&gt;in the Ribbon. Then click &lt;strong&gt;Add User &lt;/strong&gt;choose All Zones and enter the Google e-mail of the user that you will test with, give the user Full Control on the web application. Make sure that you type the e-mail correct - SharePoint will by default validate anything that you write in in Claims mode (more on this in another post).&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Services-au_B544/image_20.png"&gt;&lt;img style="display: inline" title="User Policy" alt="User Policy" src="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Services-au_B544/image_thumb_9.png" width="400" height="227" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;With this policy in place all should be set to test drive it all.&lt;/p&gt;  &lt;h3&gt;Test it!&lt;/h3&gt;  &lt;p&gt;Now all we have to do is test it. Browse to the web application for which you added the Trusted Identity Provider, once it's loaded you will be presented by the default multiple login page. The drop down will show all the available AuthN providers for the web application. To use the ACS login we only need to choose that provider in the list.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Services-au_B544/SNAGHTML26587c1.png"&gt;&lt;img style="display: inline" title="Login" alt="Login" src="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Services-au_B544/SNAGHTML26587c1_thumb.png" width="400" height="190" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Once the provider is selected you will be redirected to the ACS RP login page. In this case we will see two possible providers to use - Live ID and Google. Click on the Google button and you will be redirected, once again...&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Services-au_B544/SNAGHTML266c0ac.png"&gt;&lt;img style="display: inline" title="Login 2" alt="Login 2" src="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Services-au_B544/SNAGHTML266c0ac_thumb.png" width="198" height="168" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;..this time to the Google log in page which will ask you for username and password. Enter the username (e-mail) that you used when creating the user policy for the web application and log in. In this case, with Google, Google will ask for confirmation that you trust the ACS RP. Choose Allow and you'll be redirected back to the RP which will seamless redirect you to SharePoint.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Services-au_B544/SNAGHTML2681ed2.png"&gt;&lt;img style="display: inline" title="Login 3" alt="Login 3" src="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Services-au_B544/SNAGHTML2681ed2_thumb.png" width="208" height="181" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;...and voila! You're in! Take a look at the username in the upper right corner - it should be the e-mail address of the Google ID you used.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Services-au_B544/SNAGHTML26a51d3.png"&gt;&lt;img style="display: inline" title="YAY!!!" alt="YAY!!!" src="http://www.wictorwilen.se/Windows-Live-Writer/Visual-guide-to-Azure-Access-Services-au_B544/SNAGHTML26a51d3_thumb.png" width="400" height="178" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Summary&lt;/h3&gt;  &lt;p&gt;That was it - a visual guide on how to configure federated authentication using Windows Azure Access Control Services and SharePoint 2010. It is this easy! Even though this article was quite lengthy you can do it all in a couple of minutes (compare that to the way I previously showed)! &lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/2lS__enTlyWqgIF3RDGDbxgbBqE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/2lS__enTlyWqgIF3RDGDbxgbBqE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/2lS__enTlyWqgIF3RDGDbxgbBqE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/2lS__enTlyWqgIF3RDGDbxgbBqE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/WictorWilen?a=gQJISNZCuVI:ULybopP-wjE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WictorWilen?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/WictorWilen?a=gQJISNZCuVI:ULybopP-wjE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WictorWilen?i=gQJISNZCuVI:ULybopP-wjE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/WictorWilen?a=gQJISNZCuVI:ULybopP-wjE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WictorWilen?i=gQJISNZCuVI:ULybopP-wjE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/WictorWilen?a=gQJISNZCuVI:ULybopP-wjE:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WictorWilen?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/WictorWilen?a=gQJISNZCuVI:ULybopP-wjE:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WictorWilen?i=gQJISNZCuVI:ULybopP-wjE:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/WictorWilen/~4/gQJISNZCuVI" height="1" width="1"/&gt;</description><atom:author xmlns:atom="http://www.w3.org/2005/Atom">
                    <atom:name>Wictor Wilén</atom:name>
                </atom:author><atom:published xmlns:atom="http://www.w3.org/2005/Atom">2012-02-01 09:38:19Z</atom:published><atom:updated xmlns:atom="http://www.w3.org/2005/Atom">2012-02-01 09:38:19Z</atom:updated><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">13</slash:comments><trackback:ping xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">http://www.wictorwilen.se/trackback.aspx?id=626</trackback:ping><feedburner:origLink>http://www.wictorwilen.se/Post/Visual-guide-to-Azure-Access-Controls-Services-authentication-with-SharePoint-2010-part-1.aspx</feedburner:origLink></item><item><title>Enhanced Search Migration Tool for SharePoint 2010</title><link>http://feedproxy.google.com/~r/WictorWilen/~3/xWKA9hE6zd0/Enhanced-Search-Migration-Tool-for-SharePoint-2010.aspx</link><category>SharePoint 2010</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Wictor Wilén</dc:creator><pubDate>Mon, 30 Jan 2012 13:22:54 PST</pubDate><guid isPermaLink="false">http://www.wictorwilen.se/Post/Enhanced-Search-Migration-Tool-for-SharePoint-2010.aspx</guid><description>&lt;p&gt;The SharePoint Enterprise Search Migration Tool (SMT), created  by &lt;a href="http://www.microsoft.com" target="_blank"&gt;Microsoft&lt;/a&gt;, is a great little tool for moving/migrating search settings from one SharePoint Search Service Application to another, and even from a SharePoint 2007 SSP to a &lt;a href="http://sharepoint.microsoft.com/"&gt;SharePoint 2010&lt;/a&gt; SSA or FAST for SharePoint. The tool is available for download from the &lt;a href="http://archive.msdn.microsoft.com/odcsp2010searchmigra"&gt;MSDN Archive - both as a binary and its source code&lt;/a&gt;. It is a console application that creates an XML when exporting the settings and uses the same XML when importing the settings, and it works great in a scripting environment. The SMT that's available from MSDN Archive allows you to migrate Best Bets, Search Scopes and Site Collection Search settings.&lt;/p&gt;  &lt;h3&gt;Introducing the Enhanced Search Migration Tool!&lt;/h3&gt;  &lt;p&gt;Consider using this tool when moving search settings from an SSA in a staging environment to an SSA in a production environment, or from production to a standby-farm. There's some stuff missing then - it's not enough just migrating best bets, search scopes etc. In my case I had to move the &lt;strong&gt;Managed Properties&lt;/strong&gt; between our environments. Ok, you can script it all using PowerShell, but I'd prefer having something that automatically could move Managed Properties from dev to test to stage to production to standby.&lt;/p&gt;  &lt;p&gt;So I took the source for the SMT and added functionality to work with the Managed Properties. It will export the Managed Properties from one SSA including its configuration and mapped crawled properties to the same XML file as the other Search Settings, and can then be used to import the Managed Properties to another SSA.&lt;/p&gt;  &lt;p&gt;Here's how it works:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Export Managed Properties:&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;code&gt;SearchMigrationTool.exe -export -managedproperty managedprops.xml&lt;/code&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Import Managed Properties:&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;code&gt;SearchMigrationTool.exe -import -managedproperty -conflictBehavior prompt managedprops.xml &lt;/code&gt;&lt;/p&gt;  &lt;p&gt;As you can see it follows the same routine as the default SMT does and supports conflict resolution. And you can of course combine the export and import with the other SMT switches such as BestBet, Scope, SearchSettings or All (which exports/imports everything).&lt;/p&gt;  &lt;h4&gt;Features&lt;/h4&gt;  &lt;p&gt;The features of this Enhanced SMT are:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Import/Export Managed Properties, including all their configuration&lt;/li&gt;    &lt;li&gt;Only works for SharePoint 2010 to SharePoint 2010 (no 2007 and no FAST)&lt;/li&gt;    &lt;li&gt;Only maps existing crawled properties to the managed property&lt;/li&gt;    &lt;li&gt;It will not change the type of a Managed Property&lt;/li&gt;    &lt;li&gt;Handles the case when an SSA is present in multiple proxy groups (bug in original SMT)&lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;Sample usage&lt;/h3&gt;  &lt;p&gt;Here's a sample on how to use it. Assume that your developers need to add a new Managed Property. Instead of them writing feature receivers or PowerShell to create the Managed Properties they just write a snippet of XML, like this:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/Enhanced-Search-Migration_760B/image_2.png"&gt;&lt;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="A new Managed Property" border="0" alt="A new Managed Property" src="http://www.wictorwilen.se/Windows-Live-Writer/Enhanced-Search-Migration_760B/image_thumb.png" width="604" height="151" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The admins then use the Search Migration Tool to import this new Managed Property (as a part of the update POSH or similar).&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/Enhanced-Search-Migration_760B/image_4.png"&gt;&lt;img style="display: inline" title="Import the MP" alt="Import the MP" src="http://www.wictorwilen.se/Windows-Live-Writer/Enhanced-Search-Migration_760B/image_thumb_1.png" width="600" height="297" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Once this is done you will see the Managed Property in your SSA.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.wictorwilen.se/Windows-Live-Writer/Enhanced-Search-Migration_760B/SNAGHTML2e72b0.png"&gt;&lt;img style="display: inline" title="The MP!" alt="The MP!" src="http://www.wictorwilen.se/Windows-Live-Writer/Enhanced-Search-Migration_760B/SNAGHTML2e72b0_thumb.png" width="600" height="60" /&gt;&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;Can't be easier?&lt;/p&gt;  &lt;h3&gt;Support for this!&lt;/h3&gt;  &lt;p&gt;There is no support for this tool at all, but I would appreciate any feedback on it. I've had it running for a while amongst my friends and received positive feedback.&lt;/p&gt;  &lt;p&gt;Hopefully my additions will be merged into the "official" SMT - but until then download the tool from here and get your SSA's in sync!&lt;/p&gt;  &lt;h3&gt;Download&lt;/h3&gt;  &lt;p&gt;Here are the downloads:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.wictorwilen.se/files/ESMT.zip"&gt;Just the binaries&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.wictorwilen.se/files/ESMTSource.zip"&gt;The source code&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Note! If you're going to modify/build the SMT you need to grab the SharePoint assemblies. They are not included in this package due to licensing restrictions.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/G7j37DgN81gDuVSRb7HOdfJ5IIA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/G7j37DgN81gDuVSRb7HOdfJ5IIA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/G7j37DgN81gDuVSRb7HOdfJ5IIA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/G7j37DgN81gDuVSRb7HOdfJ5IIA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/WictorWilen?a=xWKA9hE6zd0:mu2RrBV4ibU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WictorWilen?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/WictorWilen?a=xWKA9hE6zd0:mu2RrBV4ibU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WictorWilen?i=xWKA9hE6zd0:mu2RrBV4ibU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/WictorWilen?a=xWKA9hE6zd0:mu2RrBV4ibU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WictorWilen?i=xWKA9hE6zd0:mu2RrBV4ibU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/WictorWilen?a=xWKA9hE6zd0:mu2RrBV4ibU:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WictorWilen?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/WictorWilen?a=xWKA9hE6zd0:mu2RrBV4ibU:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WictorWilen?i=xWKA9hE6zd0:mu2RrBV4ibU:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/WictorWilen/~4/xWKA9hE6zd0" height="1" width="1"/&gt;</description><atom:author xmlns:atom="http://www.w3.org/2005/Atom">
                    <atom:name>Wictor Wilén</atom:name>
                </atom:author><atom:published xmlns:atom="http://www.w3.org/2005/Atom">2012-01-30 21:22:54Z</atom:published><atom:updated xmlns:atom="http://www.w3.org/2005/Atom">2012-01-30 21:22:54Z</atom:updated><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">2</slash:comments><trackback:ping xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">http://www.wictorwilen.se/trackback.aspx?id=625</trackback:ping><feedburner:origLink>http://www.wictorwilen.se/Post/Enhanced-Search-Migration-Tool-for-SharePoint-2010.aspx</feedburner:origLink></item></channel></rss>

