<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule"
>

<channel>
	<title>Martin Normark&#039;s blog &#187; Windows Live Development</title>
	<atom:link href="http://martinnormark.com/tag/windows-live-development/feed" rel="self" type="application/rss+xml" />
	<link>http://martinnormark.com</link>
	<description></description>
	<lastBuildDate>Tue, 15 May 2012 21:06:09 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
<creativeCommons:license>http://creativecommons.org/licenses/by/3.0/</creativeCommons:license>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>Windows Live Development &#8211; Authenticating users via Windows Live ID</title>
		<link>http://martinnormark.com/windows-live-development-part-1-authenticating-users-via-windows-live-id?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=rss</link>
		<comments>http://martinnormark.com/windows-live-development-part-1-authenticating-users-via-windows-live-id#comments</comments>
		<pubDate>Thu, 19 Jun 2008 23:01:34 +0000</pubDate>
		<dc:creator>Martin Normark</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[Windows Live]]></category>
		<category><![CDATA[Windows Live Development]]></category>

		<guid isPermaLink="false">/post/Windows-Live-Development-Part-1-Authenticating-users-via-Windows-Live-ID.aspx</guid>
		<description><![CDATA[With so many online services out there, you nearly claim a new online identity somewhere every day. You tend to use the same username and password couple for all of them, but sometimes your preferred username is taken, or your &#8230; <p><a class="btn small" href="http://martinnormark.com/windows-live-development-part-1-authenticating-users-via-windows-live-id">Continue reading <span class="meta-nav">&#8594;</span></a></p>]]></description>
			<content:encoded><![CDATA[<p>With so many online services out there, you nearly claim a new online identity somewhere every day. You tend to use the same username and password couple for all of them, but sometimes your preferred username is taken, or your password does not meet the sites' password policy. I reckon I have well over 100 online identities out there - I rely on the same 3-4 combinations of username and password, and it's really messy. In this blog post I'm going to cover how to authenticate users of an ASP.NET application against <a href="http://dev.live.com/">Windows Live</a>, using the <a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=24195B4E-6335-4844-A71D-7D395D20E67B&amp;displaylang=en">SDK</a> for <a href="http://dev.live.com/liveID/default.aspx">Windows Live ID</a>. I'm going use the built-in <a href="http://msdn.microsoft.com/en-us/library/yh26yfzy.aspx">ASP.NET Membership</a> mechanism and go from there.</p>
<p>I could have gone the <a href="http://openid.net/">OpenID</a> way, but <a href="http://www.hanselman.com/blog/">Scott Hanselman</a> already did an <a href="http://www.hanselman.com/blog/TheWeeklySourceCode25OpenIDEdition.aspx">example on OpenID</a>, so I thought I'd try out Windows Live. <a href="http://www.codinghorror.com">Jeff Atwood</a> asked the question, if we <a href="http://www.codinghorror.com/blog/archives/001121.html">really need another username and password</a> in the pursuit of the best authentication model for <a href="http://www.stackoverflow.com">stackoverflow.com</a>.</p>
<h3>Conceptual idea of using Windows Live ID</h3>
<p><img style="margin: 5px 15px 0px 0px;" src="http://www.martinnormark.com/image.axd?picture=WindowsLiveWriter/WindowsLiveDevelopmentPart1Authenticatio_130BF/tmpF3A8_3.png" border="0" alt="tmpF3A8" width="240" height="51" align="left" />Windows Live ID, is the technology you should be quite familiar with when authenticating on Microsoft web sites, and Messenger. If you want to know more about what Windows Live ID is, take a look at <a href="http://channel9.msdn.com/posts/Charles/Lynn-Ayres-What-is-Windows-Live-ID/">this video</a> from <a href="http://channel9.msdn.com">Channel9</a>.</p>
<p>When using Windows Live ID, you redirect the user to the Windows Live login-page, with a return URL specified. When the user authenticates, Windows Live will redirect the user back to your site, and delivering a user id and a token. Here's an overview of how it looks:</p>
<p><a href="http://www.martinnormark.com/image.axd?picture=WindowsLiveWriter/WindowsLiveDevelopmentPart1Authenticatio_130BF/image_2.png" target="_blank"><img src="http://www.martinnormark.com/image.axd?picture=WindowsLiveWriter/WindowsLiveDevelopmentPart1Authenticatio_130BF/image_thumb.png" alt="image" width="550" height="372" /></a></p>
<h3>Getting your application ID to use Windows Live ID</h3>
<p>To get started using Windows Live ID, first of all you need an application ID. Basically you need to sign up for one, and register your application. Go to <a title="https://msm.live.com/app/default.aspx" href="https://msm.live.com/app/default.aspx">https://msm.live.com/app/default.aspx</a> and click 'Register an Application'. (You can find Microsoft's guide to this here: <a title="http://msdn.microsoft.com/en-us/library/cc287659.aspx" href="http://msdn.microsoft.com/en-us/library/cc287659.aspx">http://msdn.microsoft.com/en-us/library/cc287659.aspx</a>)</p>
<p><a href="http://www.martinnormark.com/image.axd?picture=WindowsLiveWriter/WindowsLiveDevelopmentPart1Authenticatio_130BF/tmpF3F5_2.png" target="_blank"><img src="http://www.martinnormark.com/image.axd?picture=WindowsLiveWriter/WindowsLiveDevelopmentPart1Authenticatio_130BF/tmpF3F5_thumb.png" alt="tmpF3F5" width="550" height="482" /></a></p>
<p>Leave Domain Name blank. Save your self-chosen Secret Key for later use, and submit the form. When you see the confirmation page, your application ID is shown. Copy that, as we're going to use it later.</p>
<p>In the return URL field, type the URL of your application followed by a name of a page to handle the Windows Live ID communication, like <a href="http://localhost/demoapp/webauth-handler.aspx">http://localhost/demoapp/webauth-handler.aspx</a>.</p>
<h3>Download and install Windows Live ID Web Authentication SDK</h3>
<p>Microsoft has made it quite easy for ASP.NET developers to get started, by providing an SDK. Download it here: <a title="http://www.microsoft.com/downloads/details.aspx?FamilyId=24195B4E-6335-4844-A71D-7D395D20E67B&amp;displaylang=en" href="http://www.microsoft.com/downloads/details.aspx?FamilyId=24195B4E-6335-4844-A71D-7D395D20E67B&amp;displaylang=en">http://www.microsoft.com/downloads/details.aspx?FamilyId=24195B4E-6335-4844-A71D-7D395D20E67B&amp;displaylang=en</a> and install the SDK. By default it is installed here: C:\Program Files\Windows Live ID\WebAuth</p>
<p>From the SDK we need a class called WindowsLiveLogin, located in the App_Code folder of the sample. Keep this file in mind for a few seconds.</p>
<h3>Start coding - create a new website</h3>
<p>Open Visual Studio 2005/2008 and create a new ASP.NET website the way you want it. First we will add the WindowsLiveLogin.cs file to our App_Code folder. (C:\Program Files\Windows Live ID\WebAuth\Sample\App_Code\WindowsLiveLogin.cs).</p>
<p>Leave the default.aspx page, and put the following HTML in the markup:</p>
<div style="font-size: 8pt; margin: 20px 0px 10px; overflow: auto; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; height: 333px; background-color: #f4f4f4; border: gray 1px solid; padding: 4px;">
<pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px;"><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">html</span><span style="color: #0000ff;">&gt;</span>
<span style="color: #0000ff;">&lt;</span><span style="color: #800000;">head</span><span style="color: #0000ff;">&gt;</span>
  <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">title</span><span style="color: #0000ff;">&gt;</span>Windows Live<span style="color: #ff0000;">&amp;trade;</span> ID<span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">title</span><span style="color: #0000ff;">&gt;</span>
<span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">head</span><span style="color: #0000ff;">&gt;</span>
<span style="color: #0000ff;">&lt;</span><span style="color: #800000;">body</span><span style="color: #0000ff;">&gt;</span>
  <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">iframe</span> <span style="color: #ff0000;">id</span><span style="color: #0000ff;">="WebAuthControl"</span> <span style="color: #ff0000;">name</span><span style="color: #0000ff;">="WebAuthControl"</span> <span style="color: #ff0000;">src</span><span style="color: #0000ff;">="http://login.live.com/controls/WebAuth.htm?appid=&lt;%=AppId%&gt;&amp;style=font-size%3A+10pt%3B+font-family%3A+verdana%3B+background%3A+white%3B"</span>
    <span style="color: #ff0000;">width</span><span style="color: #0000ff;">="80px"</span> <span style="color: #ff0000;">height</span><span style="color: #0000ff;">="20px"</span> <span style="color: #ff0000;">marginwidth</span><span style="color: #0000ff;">="0"</span> <span style="color: #ff0000;">marginheight</span><span style="color: #0000ff;">="0"</span> <span style="color: #ff0000;">align</span><span style="color: #0000ff;">="middle"</span> <span style="color: #ff0000;">frameborder</span><span style="color: #0000ff;">="0"</span>
    <span style="color: #ff0000;">scrolling</span><span style="color: #0000ff;">="no"</span><span style="color: #0000ff;">&gt;&lt;/</span><span style="color: #800000;">iframe</span><span style="color: #0000ff;">&gt;</span>
  <span style="background-color: #ffff00;">&lt;%</span>
<pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px;"><span style="color: #606060;">   1:</span>  <span style="color: #0000ff;">if</span> (UserId == <span style="color: #0000ff;">null</span>)</pre>
<pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px;"><span style="color: #606060;">   2:</span>      {</pre>
<p><span style="background-color: #ffff00;">%&gt;</span><br />
<span style="color: #0000ff;">&lt;</span><span style="color: #800000;">p</span><span style="color: #0000ff;">&gt;</span><br />
This application does not know who you are! Click the <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">b</span><span style="color: #0000ff;">&gt;</span>Sign in<span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">b</span><span style="color: #0000ff;">&gt;</span> link above.<span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">p</span><span style="color: #0000ff;">&gt;</span><br />
<span style="background-color: #ffff00;">&lt;%</span></p>
<pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px;"><span style="color: #606060;">   1:</span>  }</pre>
<pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px;"><span style="color: #606060;">   2:</span>      <span style="color: #0000ff;">else</span></pre>
<pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px;"><span style="color: #606060;">   3:</span>      {</pre>
<p><span style="background-color: #ffff00;">%&gt;</span><br />
<span style="color: #0000ff;">&lt;</span><span style="color: #800000;">p</span><span style="color: #0000ff;">&gt;</span><br />
Now this application knows that you are the user with ID = "<span style="color: #0000ff;">&lt;</span><span style="color: #800000;">b</span><span style="color: #0000ff;">&gt;</span><span style="background-color: #ffff00;">&lt;%</span></p>
<pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px;"><span style="color: #606060;">   1:</span> =UserId</pre>
<p><span style="background-color: #ffff00;">%&gt;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">b</span><span style="color: #0000ff;">&gt;</span>".<span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">p</span><span style="color: #0000ff;">&gt;</span><br />
<span style="background-color: #ffff00;">&lt;%</span></p>
<pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px;"><span style="color: #606060;">   1:</span>  }</pre>
<p><span style="background-color: #ffff00;">%&gt;</span><br />
<span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">body</span><span style="color: #0000ff;">&gt;</span><br />
<span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">html</span><span style="color: #0000ff;">&gt;</span></pre>
</div>
<p>And this piece of code in its code-behind class.</p>
<div style="font-size: 8pt; margin: 20px 0px 10px; overflow: auto; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border: gray 1px solid; padding: 4px;">
<pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px;"><span style="color: #0000ff;">using</span> System;
<span style="color: #0000ff;">using</span> System.Web;
<span style="color: #0000ff;">using</span> System.IO;
<span style="color: #0000ff;">using</span> WindowsLive;

<span style="color: #0000ff;">public</span> <span style="color: #0000ff;">partial</span> <span style="color: #0000ff;">class</span> DefaultPage : System.Web.UI.Page
{
  <span style="color: #0000ff;">const</span> <span style="color: #0000ff;">string</span> LoginCookie = <span style="color: #006080;">"webauthtoken"</span>;

  <span style="color: #008000;">// Initialize the WindowsLiveLogin class.</span>
  <span style="color: #0000ff;">private</span> <span style="color: #0000ff;">static</span> WindowsLiveLogin wll = <span style="color: #0000ff;">new</span> WindowsLiveLogin(<span style="color: #0000ff;">true</span>);

  <span style="color: #0000ff;">protected</span> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">string</span> AppId = wll.AppId;
  <span style="color: #0000ff;">protected</span> <span style="color: #0000ff;">string</span> UserId;

  <span style="color: #0000ff;">protected</span> <span style="color: #0000ff;">void</span> Page_Load(<span style="color: #0000ff;">object</span> sender, EventArgs e)
  {
    HttpRequest req = HttpContext.Current.Request;
    HttpApplicationState app = HttpContext.Current.Application;

    HttpCookie loginCookie = req.Cookies[LoginCookie];

    <span style="color: #0000ff;">if</span> (loginCookie != <span style="color: #0000ff;">null</span>)
    {
      <span style="color: #0000ff;">string</span> token = loginCookie.Value;

      WindowsLiveLogin.User user = wll.ProcessToken(token);

      <span style="color: #0000ff;">if</span> (user != <span style="color: #0000ff;">null</span>)
      {
        UserId = user.Id;
      }
    }
  }
}</pre>
</div>
<p>Default.aspx will work as a login page. Users click the Sign-in button, and is redirected to Windows Live. When they authenticate, they're redirected back to our handler page, that we will now create...</p>
<p>Create a new aspx page, and name it webauth-handler.aspx. Recall that this was the page we provided as the return URL when we registered the application at Windows Live.</p>
<p>This page will serve as the handler page for the user, when Windows Live redirects back to your site. Windows Live will post authentication specific values for you to use. Because this page is never seen by a user (we will send the user back where they began), we can simply remove all the markup.</p>
<p>Put the following code in your code-behind class for webauth-handler.aspx.</p>
<div style="font-size: 8pt; margin: 20px 0px 10px; overflow: auto; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border: gray 1px solid; padding: 4px;">
<pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px;"><span style="color: #0000ff;">using</span> System;
<span style="color: #0000ff;">using</span> System.Web;
<span style="color: #0000ff;">using</span> System.IO;
<span style="color: #0000ff;">using</span> WindowsLive;

<span style="color: #0000ff;">public</span> <span style="color: #0000ff;">partial</span> <span style="color: #0000ff;">class</span> HandlerPage : System.Web.UI.Page
{
  <span style="color: #008000;">// Relative path to the login- and logoutpage.</span>
  <span style="color: #0000ff;">const</span> <span style="color: #0000ff;">string</span> LoginPage = <span style="color: #006080;">"default.aspx"</span>;
  <span style="color: #0000ff;">const</span> <span style="color: #0000ff;">string</span> LogoutPage = <span style="color: #006080;">"default.aspx"</span>;
  <span style="color: #0000ff;">const</span> <span style="color: #0000ff;">string</span> LoginCookie = <span style="color: #006080;">"webauthtoken"</span>;
  <span style="color: #0000ff;">static</span> DateTime ExpireCookie = DateTime.Now.AddYears(-10);
  <span style="color: #0000ff;">static</span> DateTime PersistCookie = DateTime.Now.AddYears(10);

  <span style="color: #008000;">// Initialize the WindowsLiveLogin class.</span>
  <span style="color: #0000ff;">static</span> WindowsLiveLogin wll = <span style="color: #0000ff;">new</span> WindowsLiveLogin(<span style="color: #0000ff;">true</span>);

  <span style="color: #0000ff;">protected</span> <span style="color: #0000ff;">void</span> Page_Load(<span style="color: #0000ff;">object</span> sender, EventArgs e)
  {
    HttpRequest request = HttpContext.Current.Request;
    HttpResponse response = HttpContext.Current.Response;
    HttpApplicationState application = HttpContext.Current.Application;

    <span style="color: #0000ff;">string</span> action = request[<span style="color: #006080;">"action"</span>];

    <span style="color: #0000ff;">if</span> (action == <span style="color: #006080;">"logout"</span>)
    {
      HttpCookie loginCookie = <span style="color: #0000ff;">new</span> HttpCookie(LoginCookie);
      loginCookie.Expires = ExpireCookie;
      response.Cookies.Add(loginCookie);
      response.Redirect(LogoutPage);
      response.End();
    }
    <span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> (action == <span style="color: #006080;">"clearcookie"</span>)
    {
      HttpCookie loginCookie = <span style="color: #0000ff;">new</span> HttpCookie(LoginCookie);
      loginCookie.Expires = ExpireCookie;
      response.Cookies.Add(loginCookie);

      <span style="color: #0000ff;">string</span> type;
      <span style="color: #0000ff;">byte</span>[] content;
      wll.GetClearCookieResponse(<span style="color: #0000ff;">out</span> type, <span style="color: #0000ff;">out</span> content);
      response.ContentType = type;
      response.OutputStream.Write(content, 0, content.Length);

      response.End();
    }
    <span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> (action == <span style="color: #006080;">"login"</span>)
    {
      HttpCookie loginCookie = <span style="color: #0000ff;">new</span> HttpCookie(LoginCookie);

      WindowsLiveLogin.User user = wll.ProcessLogin(request.Form);

      <span style="color: #0000ff;">if</span> (user != <span style="color: #0000ff;">null</span>)
      {
        loginCookie.Value = user.Token;

        <span style="color: #0000ff;">if</span> (user.UsePersistentCookie)
        {
          loginCookie.Expires = PersistCookie;
        }
      }
      <span style="color: #0000ff;">else</span>
      {
        loginCookie.Expires = ExpireCookie;
      }

      response.Cookies.Add(loginCookie);
      response.Redirect(LoginPage);
      response.End();
    }
    <span style="color: #0000ff;">else</span>
    {
      response.Redirect(LoginPage);
      response.End();
    }
  }
}</pre>
</div>
<h3>The first login test</h3>
<p>Now we've got everything setup as we should, and it should be possible to login using Windows Live. View the default.aspx page in your favorite browser, and let's try.</p>
<p>First you will see out login page:<br />
<a href="http://www.martinnormark.com/image.axd?picture=WindowsLiveWriter/WindowsLiveDevelopmentPart1Authenticatio_130BF/tmp9D6_2.png"><img src="http://www.martinnormark.com/image.axd?picture=WindowsLiveWriter/WindowsLiveDevelopmentPart1Authenticatio_130BF/tmp9D6_thumb.png" alt="tmp9D6" width="547" height="139" /></a></p>
<p>Click the Sign in link, which will take you to Windows Live:<br />
<a href="http://www.martinnormark.com/image.axd?picture=WindowsLiveWriter/WindowsLiveDevelopmentPart1Authenticatio_130BF/wlive_signin_2.jpg"><img src="http://www.martinnormark.com/image.axd?picture=WindowsLiveWriter/WindowsLiveDevelopmentPart1Authenticatio_130BF/wlive_signin_thumb.jpg" alt="wlive_signin" width="547" height="312" /></a></p>
<p>Sign in with your Windows Live ID, and you will return to our login page - which will now welcome you and show your user ID:<br />
<a href="http://www.martinnormark.com/image.axd?picture=WindowsLiveWriter/WindowsLiveDevelopmentPart1Authenticatio_130BF/wlive_signin_4.jpg"><img src="http://www.martinnormark.com/image.axd?picture=WindowsLiveWriter/WindowsLiveDevelopmentPart1Authenticatio_130BF/wlive_signin_thumb_1.jpg" alt="wlive_signin" width="547" height="310" /></a></p>
<p>Now your user has authenticated against Windows Live, using the Windows Live ID. Now it's up to you to handle the user's Windows Live ID, which is what I'm going to blog about in part 2 of the Windows Live Development series here...</p>
<p><a href="http://www.dotnetkicks.com/kick/?url=http://www.martinnormark.com/post/Windows-Live-Development-Part-1---Authenticating-users-via-Windows-Live-ID.aspx&amp;title=Windows Live Development Part 1 - Authenticating users via Windows Live ID"><br />
<img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http://www.martinnormark.com/post/Windows-Live-Development-Part-1---Authenticating-users-via-Windows-Live-ID.aspx" border="0" alt="kick it on DotNetKicks.com" /><br />
</a></p>
]]></content:encoded>
			<wfw:commentRss>http://martinnormark.com/windows-live-development-part-1-authenticating-users-via-windows-live-id/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
	<creativeCommons:license>http://creativecommons.org/licenses/by/3.0/</creativeCommons:license>
	</item>
	</channel>
</rss>

