<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/atom10full.xsl" type="text/xsl" media="screen"?><?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/itemcontent.css" type="text/css" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:gd="http://schemas.google.com/g/2005" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;A0YNR3wyfSp7ImA9WxRQFE0.&quot;"><id>tag:blogger.com,1999:blog-6894552</id><updated>2008-10-07T12:53:16.295-07:00</updated><title>JMPInline</title><subtitle type="html">Read up on .NET news, tips, cautions... and other areas of technological interest.</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://blog.nerdbank.net/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://blog.nerdbank.net/" /><link rel="next" type="application/atom+xml" href="http://blog.nerdbank.net/feeds/posts/default?start-index=26&amp;max-results=25&amp;redirect=false" /><author><name>Andrew</name><uri>http://www.blogger.com/profile/13632400519774640095</uri><email>noreply@blogger.com</email></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>106</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><geo:lat>47.71828</geo:lat><geo:long>-122.197026</geo:long><link rel="self" href="http://feeds.feedburner.com/Jmpinline" type="application/atom+xml" /><feedburner:browserFriendly>This is an XML content feed. It is intended to be viewed in a newsreader or syndicated to another site, subject to copyright and fair use.</feedburner:browserFriendly><entry gd:etag="W/&quot;CEEFRXg5eCp7ImA9WxRQE0w.&quot;"><id>tag:blogger.com,1999:blog-6894552.post-5737582779110009132</id><published>2008-10-06T10:03:00.001-07:00</published><updated>2008-10-06T10:03:34.620-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-10-06T10:03:34.620-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="OAuth" /><category scheme="http://www.blogger.com/atom/ns#" term="ASP.NET" /><category scheme="http://www.blogger.com/atom/ns#" term="OpenID" /><title>Why OAuth can't be ignored</title><link rel="replies" type="application/atom+xml" href="http://blog.nerdbank.net/feeds/5737582779110009132/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6894552&amp;postID=5737582779110009132" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6894552/posts/default/5737582779110009132?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6894552/posts/default/5737582779110009132?v=2" /><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/Jmpinline/~3/412986138/why-oauth-can-be-ignored.html" title="Why OAuth can&amp;#39;t be ignored" /><author><name>Andrew</name><uri>http://www.blogger.com/profile/13632400519774640095</uri><email>noreply@blogger.com</email></author><content type="html">Do you realize that your email password is probably your most sensitive piece of information?  You should never, ever give it away.  Not to another "trustworthy" web site, and not to a desktop app that wants to perform some service for you.  Web-based email these days is hosted by providers that offer many other services using the same user account.  For instance, if you use a desktop app to &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=dko1m"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=dko1m" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=kIoBM"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=kIoBM" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=gsrbm"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=gsrbm" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=uxLJm"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=uxLJm" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=vHC8M"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=vHC8M" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Jmpinline/~4/412986138" height="1" width="1"/&gt;</content><feedburner:origLink>http://blog.nerdbank.net/2008/10/why-oauth-can-be-ignored.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkMDQXs6cSp7ImA9WxRRFEk.&quot;"><id>tag:blogger.com,1999:blog-6894552.post-1318863246559934770</id><published>2008-09-26T07:47:00.001-07:00</published><updated>2008-09-26T07:47:50.519-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-09-26T07:47:50.519-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="OAuth" /><category scheme="http://www.blogger.com/atom/ns#" term=".NET" /><category scheme="http://www.blogger.com/atom/ns#" term="OpenID" /><title>What's coming for DotNetOpenId and DotNetOAuth</title><link rel="replies" type="application/atom+xml" href="http://blog.nerdbank.net/feeds/1318863246559934770/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6894552&amp;postID=1318863246559934770" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6894552/posts/default/1318863246559934770?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6894552/posts/default/1318863246559934770?v=2" /><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/Jmpinline/~3/403864799/what-coming-for-dotnetopenid-and.html" title="What&amp;#39;s coming for DotNetOpenId and DotNetOAuth" /><author><name>Andrew</name><uri>http://www.blogger.com/profile/13632400519774640095</uri><email>noreply@blogger.com</email></author><content type="html">Did you even know DotNetOAuth existed?  It's alpha quality right now but that will change soon.  OAuth and OpenID serve two orthogonal needs, and although Google is trying to combine the two, I haven't figured out how they are going to do it yet.  In the meantime I have been writing the DotNetOAuth library for you .NET programmers out there.  It's coming along nicely.  When I joined the &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=vGrxl"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=vGrxl" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=m9ttL"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=m9ttL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=HAlml"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=HAlml" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=AtYul"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=AtYul" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=kacOL"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=kacOL" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Jmpinline/~4/403864799" height="1" width="1"/&gt;</content><feedburner:origLink>http://blog.nerdbank.net/2008/09/what-coming-for-dotnetopenid-and.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUUDSXc4fip7ImA9WxRSGEU.&quot;"><id>tag:blogger.com,1999:blog-6894552.post-1757944827554203988</id><published>2008-09-19T21:01:00.001-07:00</published><updated>2008-09-19T21:01:18.936-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-09-19T21:01:18.936-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term=".NET" /><title>NoTrailingWhitespace StyleCop rule, and others</title><link rel="replies" type="application/atom+xml" href="http://blog.nerdbank.net/feeds/1757944827554203988/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6894552&amp;postID=1757944827554203988" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6894552/posts/default/1757944827554203988?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6894552/posts/default/1757944827554203988?v=2" /><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/Jmpinline/~3/397832985/notrailingwhitespace-stylecop-rule-and.html" title="NoTrailingWhitespace StyleCop rule, and others" /><author><name>Andrew</name><uri>http://www.blogger.com/profile/13632400519774640095</uri><email>noreply@blogger.com</email></author><content type="html">After a period of initial bad taste, I've come to like StyleCop.  I dislike a few of their rules, and I turn those off.  But overall I like how it helps many developers maintain a consistent coding style within a project.  I wrote a few rules of my own, and offer them here for free.  Source code here: NerdBank StyleCop Rules  And here are the rules that are currently in the library, with more &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=abaVl"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=abaVl" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=lzQML"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=lzQML" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=yadel"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=yadel" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=zTCtl"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=zTCtl" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=AiT0L"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=AiT0L" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Jmpinline/~4/397832985" height="1" width="1"/&gt;</content><feedburner:origLink>http://blog.nerdbank.net/2008/09/notrailingwhitespace-stylecop-rule-and.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0ABQXs-eCp7ImA9WxRSFEQ.&quot;"><id>tag:blogger.com,1999:blog-6894552.post-3442137076785001350</id><published>2008-09-15T08:15:00.001-07:00</published><updated>2008-09-15T08:15:50.550-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-09-15T08:15:50.550-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="OpenID" /><title>A rebuttal to the concerns surrounding OpenID</title><link rel="replies" type="application/atom+xml" href="http://blog.nerdbank.net/feeds/3442137076785001350/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6894552&amp;postID=3442137076785001350" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6894552/posts/default/3442137076785001350?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6894552/posts/default/3442137076785001350?v=2" /><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/Jmpinline/~3/393308135/rebuttal-to-concerns-surrounding-openid.html" title="A rebuttal to the concerns surrounding OpenID" /><author><name>Andrew</name><uri>http://www.blogger.com/profile/13632400519774640095</uri><email>noreply@blogger.com</email></author><content type="html">  OpenID is still largely unknown to most Internet users.  Those who already know something about it are mostly very tech savvy and have a strong opinion either for or against it.  Those for it see it as a realistic vision for single sign-on for the web.  Those who are against it range from simply not seeing a need for it to adamantly thinking it's one of the worst protocols because of the &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=8HBml"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=8HBml" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=4lWOL"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=4lWOL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=hQndl"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=hQndl" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=RVdpl"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=RVdpl" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=kCFuL"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=kCFuL" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Jmpinline/~4/393308135" height="1" width="1"/&gt;</content><feedburner:origLink>http://blog.nerdbank.net/2008/09/rebuttal-to-concerns-surrounding-openid.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkcCSHY6cCp7ImA9WxRTGUg.&quot;"><id>tag:blogger.com,1999:blog-6894552.post-1923903381275404236</id><published>2008-09-09T04:01:00.001-07:00</published><updated>2008-09-09T04:01:09.818-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-09-09T04:01:09.818-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="OpenID" /><title>My OpenID Provider wishlist</title><link rel="replies" type="application/atom+xml" href="http://blog.nerdbank.net/feeds/1923903381275404236/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6894552&amp;postID=1923903381275404236" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6894552/posts/default/1923903381275404236?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6894552/posts/default/1923903381275404236?v=2" /><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/Jmpinline/~3/387563814/my-openid-provider-wishlist.html" title="My OpenID Provider wishlist" /><author><name>Andrew</name><uri>http://www.blogger.com/profile/13632400519774640095</uri><email>noreply@blogger.com</email></author><content type="html">I have yet to find an OpenID Provider that offers all that OpenID has to offer.  Though some come awfully close, myopenid.com most notably.       Multiple personas          Attribute Exchange support (using the correct type URIs), including both ordinary persona information and allowing RPs to push attributes up.       Simple registration support        Unsolicited assertions to any RP I name&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=vLMll"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=vLMll" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=r4SuL"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=r4SuL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=Bwyql"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=Bwyql" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=n9Bil"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=n9Bil" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=IhYYL"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=IhYYL" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Jmpinline/~4/387563814" height="1" width="1"/&gt;</content><feedburner:origLink>http://blog.nerdbank.net/2008/09/my-openid-provider-wishlist.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUIMQ3YycCp7ImA9WxdaEUU.&quot;"><id>tag:blogger.com,1999:blog-6894552.post-1157766733270276630</id><published>2008-08-18T14:20:00.004-07:00</published><updated>2008-08-19T15:06:22.898-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-08-19T15:06:22.898-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ASP.NET" /><category scheme="http://www.blogger.com/atom/ns#" term="OpenID" /><title>DotNetOpenId adds an OpenID AJAX login control</title><link rel="replies" type="application/atom+xml" href="http://blog.nerdbank.net/feeds/1157766733270276630/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6894552&amp;postID=1157766733270276630" title="10 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6894552/posts/default/1157766733270276630?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6894552/posts/default/1157766733270276630?v=2" /><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/Jmpinline/~3/369403196/dotnetopenid-adds-openid-ajax-login.html" title="DotNetOpenId adds an OpenID AJAX login control" /><author><name>Andrew</name><uri>http://www.blogger.com/profile/13632400519774640095</uri><email>noreply@blogger.com</email></author><content type="html">DotNetOpenId may be feature complete per the OpenID spec, but it's far from stagnant. The next version will be packed with new enhanced security features that can be optionally turned on by relying party sites with high security requirements, and a new AJAX login control! I'm pleased to announce as well that it will be just as easy to drop in and use as the non-AJAX version.  Ah, the joys and &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=oQkBgk"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=oQkBgk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=dCrS5K"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=dCrS5K" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=ttOEbk"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=ttOEbk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=U9Xr0k"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=U9Xr0k" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=7I9WL"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=7I9WL" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Jmpinline/~4/369403196" height="1" width="1"/&gt;</content><feedburner:origLink>http://blog.nerdbank.net/2008/08/dotnetopenid-adds-openid-ajax-login.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0IFR347cSp7ImA9WxdbE0w.&quot;"><id>tag:blogger.com,1999:blog-6894552.post-2651211700656126434</id><published>2008-08-09T13:58:00.001-07:00</published><updated>2008-08-09T13:58:36.009-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-08-09T13:58:36.009-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ASP.NET" /><title>Make your ASP.NET custom controls work with the validation controls</title><link rel="replies" type="application/atom+xml" href="http://blog.nerdbank.net/feeds/2651211700656126434/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6894552&amp;postID=2651211700656126434" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6894552/posts/default/2651211700656126434?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6894552/posts/default/2651211700656126434?v=2" /><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/Jmpinline/~3/360587647/make-your-aspnet-custom-controls-work.html" title="Make your ASP.NET custom controls work with the validation controls" /><author><name>Andrew</name><uri>http://www.blogger.com/profile/13632400519774640095</uri><email>noreply@blogger.com</email></author><content type="html">Do you have a custom ASP.NET control that you want to allow your users to attach the standard ASP.NET validation controls to?  A quick web search turns up a lot of forum topics that seem to suggest it's not possible.  But it is!  And it's so easy.  Just add a ValidationPropertyAttribute to your custom control's type declaration:  [ValidationProperty("Text")]
public class YourCustomControl : &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=tlDMkk"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=tlDMkk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=GqeozK"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=GqeozK" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=vLHsPk"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=vLHsPk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=FQSh0k"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=FQSh0k" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=Bog8L"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=Bog8L" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Jmpinline/~4/360587647" height="1" width="1"/&gt;</content><feedburner:origLink>http://blog.nerdbank.net/2008/08/make-your-aspnet-custom-controls-work.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0ICQnw9cSp7ImA9WxdbEEk.&quot;"><id>tag:blogger.com,1999:blog-6894552.post-6460508318809067442</id><published>2008-08-02T13:03:00.001-07:00</published><updated>2008-08-06T12:06:03.269-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-08-06T12:06:03.269-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term=".NET" /><title>How to use a library without taking a hard dependency on it</title><link rel="replies" type="application/atom+xml" href="http://blog.nerdbank.net/feeds/6460508318809067442/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6894552&amp;postID=6460508318809067442" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6894552/posts/default/6460508318809067442?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6894552/posts/default/6460508318809067442?v=2" /><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/Jmpinline/~3/353817506/how-to-use-library-without-taking-hard.html" title="How to use a library without taking a hard dependency on it" /><author><name>Andrew</name><uri>http://www.blogger.com/profile/13632400519774640095</uri><email>noreply@blogger.com</email></author><content type="html">First let me lay out the problem: you're writing a library that so far is self-contained as a single DLL.  You want to add some functionality to your library that is available in another library that your users may or may not have or wish to deploy with your library.  You can either add a reference to that library and code against it in your library and require that your users deploy both &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=5quZYk"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=5quZYk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=w9C2TK"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=w9C2TK" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=7hXDvk"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=7hXDvk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=EcXXvk"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=EcXXvk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=aAeVL"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=aAeVL" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Jmpinline/~4/353817506" height="1" width="1"/&gt;</content><feedburner:origLink>http://blog.nerdbank.net/2008/08/how-to-use-library-without-taking-hard.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0ANRHo6eSp7ImA9WxdUFEU.&quot;"><id>tag:blogger.com,1999:blog-6894552.post-6116586521885724294</id><published>2008-07-30T23:23:00.001-07:00</published><updated>2008-07-30T23:29:55.411-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-07-30T23:29:55.411-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term=".NET" /><category scheme="http://www.blogger.com/atom/ns#" term="ASP.NET" /><title>How to cleanly log messages without wasting cycles when not logging</title><link rel="replies" type="application/atom+xml" href="http://blog.nerdbank.net/feeds/6116586521885724294/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6894552&amp;postID=6116586521885724294" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6894552/posts/default/6116586521885724294?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6894552/posts/default/6116586521885724294?v=2" /><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/Jmpinline/~3/351251393/how-to-cleanly-log-messages-without.html" title="How to cleanly log messages without wasting cycles when not logging" /><author><name>Andrew</name><uri>http://www.blogger.com/profile/13632400519774640095</uri><email>noreply@blogger.com</email></author><content type="html">Whether you use System.Diagnostics.Trace, log4net, or any other logger, it's often the case that you want to allow the logging to be turned on or off at runtime. To avoid your logging to slow down your app unnecessarily when the log messages are not being collected, it's common to use conditionals to only execute the logging paths if someone is listening. This leads to logging logic that clutters&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=RUIsTj"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=RUIsTj" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=ZFTycJ"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=ZFTycJ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=oQKH8j"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=oQKH8j" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=ebwwij"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=ebwwij" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=2iw2L"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=2iw2L" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Jmpinline/~4/351251393" height="1" width="1"/&gt;</content><feedburner:origLink>http://blog.nerdbank.net/2008/07/how-to-cleanly-log-messages-without.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEQBQ34_eSp7ImA9WxdVGE8.&quot;"><id>tag:blogger.com,1999:blog-6894552.post-2610880835565772082</id><published>2008-07-22T23:23:00.001-07:00</published><updated>2008-07-23T07:12:32.041-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-07-23T07:12:32.041-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="OpenID" /><title>How I have taken control of my own identity, part 2</title><link rel="replies" type="application/atom+xml" href="http://blog.nerdbank.net/feeds/2610880835565772082/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6894552&amp;postID=2610880835565772082" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6894552/posts/default/2610880835565772082?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6894552/posts/default/2610880835565772082?v=2" /><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/Jmpinline/~3/343281597/how-i-have-taken-control-of-my-own_22.html" title="How I have taken control of my own identity, part 2" /><author><name>Andrew</name><uri>http://www.blogger.com/profile/13632400519774640095</uri><email>noreply@blogger.com</email></author><content type="html">In my last post, I discussed how I made http://blog.nerdbank.net my one OpenID URL that allows me to link my several accounts with various OpenID Providers into a single URL that I may use anywhere.  In this post, I'll talk about some of the problems that remain with the system, and how XRI i-names can solve them.  Why use an XRI/i-name?  I purchased =Arnott from 1id.com, one of the many XRI &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=9M1Y1j"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=9M1Y1j" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=ZSxyHJ"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=ZSxyHJ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=EoGfmj"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=EoGfmj" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=gsfjCj"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=gsfjCj" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=sc0eL"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=sc0eL" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Jmpinline/~4/343281597" height="1" width="1"/&gt;</content><feedburner:origLink>http://blog.nerdbank.net/2008/07/how-i-have-taken-control-of-my-own_22.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUUNQHo5eCp7ImA9WxdVFEw.&quot;"><id>tag:blogger.com,1999:blog-6894552.post-8948050388017137781</id><published>2008-07-18T13:33:00.001-07:00</published><updated>2008-07-18T13:34:51.420-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-07-18T13:34:51.420-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="OpenID" /><title>How I have taken control of my own identity, part 1</title><link rel="replies" type="application/atom+xml" href="http://blog.nerdbank.net/feeds/8948050388017137781/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6894552&amp;postID=8948050388017137781" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6894552/posts/default/8948050388017137781?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6894552/posts/default/8948050388017137781?v=2" /><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/Jmpinline/~3/339325970/how-i-have-taken-control-of-my-own.html" title="How I have taken control of my own identity, part 1" /><author><name>Andrew</name><uri>http://www.blogger.com/profile/13632400519774640095</uri><email>noreply@blogger.com</email></author><content type="html">First I obtained an OpenID account with www.myopenid.com.  I actually have several other accounts with other OpenID Providers, such as pip.verisignlabs.com and yahoo.com because some relying parties allow only white-listed Providers, and some services offer me an OpenID whether I use it or not.    But to avoid an identity crisis of appearing all over the web as http://andrew.arnott.myopenid.com, &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=of7q4j"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=of7q4j" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=ykgpfJ"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=ykgpfJ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=Nwk2lj"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=Nwk2lj" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=IaGSmj"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=IaGSmj" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=yhvtL"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=yhvtL" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Jmpinline/~4/339325970" height="1" width="1"/&gt;</content><feedburner:origLink>http://blog.nerdbank.net/2008/07/how-i-have-taken-control-of-my-own.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Dk8NRHw8fip7ImA9WxdVEEs.&quot;"><id>tag:blogger.com,1999:blog-6894552.post-1194984396391151513</id><published>2008-07-14T12:48:00.001-07:00</published><updated>2008-07-14T12:48:15.276-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-07-14T12:48:15.276-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term=".NET" /><category scheme="http://www.blogger.com/atom/ns#" term="ASP.NET" /><category scheme="http://www.blogger.com/atom/ns#" term="OpenID" /><title>DotNetOpenId gets a new face</title><link rel="replies" type="application/atom+xml" href="http://blog.nerdbank.net/feeds/1194984396391151513/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6894552&amp;postID=1194984396391151513" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6894552/posts/default/1194984396391151513?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6894552/posts/default/1194984396391151513?v=2" /><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/Jmpinline/~3/335393096/dotnetopenid-gets-new-face.html" title="DotNetOpenId gets a new face" /><author><name>Andrew</name><uri>http://www.blogger.com/profile/13632400519774640095</uri><email>noreply@blogger.com</email></author><content type="html">Javier Román has completed his work on the new DotNetOpenId logo.  I think he has done excellent work, and he did it for free in the spirit of contributing to this open source project.  This logo is now on the project home page, and will soon be added to the samples.      A big thank you to Javier!  &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=d2dm4j"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=d2dm4j" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=JuwJBJ"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=JuwJBJ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=F656ej"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=F656ej" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=xztZZj"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=xztZZj" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=DFdgL"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=DFdgL" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Jmpinline/~4/335393096" height="1" width="1"/&gt;</content><feedburner:origLink>http://blog.nerdbank.net/2008/07/dotnetopenid-gets-new-face.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEcGRn0zfip7ImA9WxdWFkk.&quot;"><id>tag:blogger.com,1999:blog-6894552.post-6750029193958599109</id><published>2008-07-09T16:27:00.001-07:00</published><updated>2008-07-09T16:27:07.386-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-07-09T16:27:07.386-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="OpenID" /><title>How to make your OpenID Provider case insensitive</title><link rel="replies" type="application/atom+xml" href="http://blog.nerdbank.net/feeds/6750029193958599109/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6894552&amp;postID=6750029193958599109" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6894552/posts/default/6750029193958599109?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6894552/posts/default/6750029193958599109?v=2" /><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/Jmpinline/~3/331232036/how-to-make-your-openid-provider-case.html" title="How to make your OpenID Provider case insensitive" /><author><name>Andrew</name><uri>http://www.blogger.com/profile/13632400519774640095</uri><email>noreply@blogger.com</email></author><content type="html">In my last post, I discussed why case sensitive OpenID URLs are so important for security.  But case sensitive OpenID URLs are no fun at all for users.  For instance, most users probably expect they could alternate between logging in as www.myprovider.com/myopenidurl and www.myprovider.com/MYOPENIDURL at an RP and be considered the same person.  But if OpenID URLs must be case sensitive, how can &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=9jM1Vj"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=9jM1Vj" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=JobC6J"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=JobC6J" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=EqMLAj"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=EqMLAj" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=JbWjuj"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=JbWjuj" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=PuCNL"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=PuCNL" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Jmpinline/~4/331232036" height="1" width="1"/&gt;</content><feedburner:origLink>http://blog.nerdbank.net/2008/07/how-to-make-your-openid-provider-case.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUMNQX44fCp7ImA9WxdWFUU.&quot;"><id>tag:blogger.com,1999:blog-6894552.post-954364099098282285</id><published>2008-07-08T23:02:00.001-07:00</published><updated>2008-07-08T23:04:50.034-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-07-08T23:04:50.034-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="OpenID" /><title>The case for case sensitive OpenID URL checking</title><link rel="replies" type="application/atom+xml" href="http://blog.nerdbank.net/feeds/954364099098282285/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6894552&amp;postID=954364099098282285" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6894552/posts/default/954364099098282285?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6894552/posts/default/954364099098282285?v=2" /><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/Jmpinline/~3/330512977/case-for-case-sensitive-openid-url.html" title="The case for case sensitive OpenID URL checking" /><author><name>Andrew</name><uri>http://www.blogger.com/profile/13632400519774640095</uri><email>noreply@blogger.com</email></author><content type="html">URLs on the Internet are case sensitive by definition.  Some web servers choose to be case insensitive.  To treat OpenID urls as anything but case sensitive for purposes of identifying a user introduces a grave security risk.  Implementers of OpenID should be cautious when using case-insensitive string comparisons and be aware that in most cases checks should be case sensitive.   OpenID Claimed &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=cyNbGj"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=cyNbGj" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=GhqW6J"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=GhqW6J" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=x9twwj"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=x9twwj" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=O0i7gj"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=O0i7gj" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=OcMfL"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=OcMfL" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Jmpinline/~4/330512977" height="1" width="1"/&gt;</content><feedburner:origLink>http://blog.nerdbank.net/2008/07/case-for-case-sensitive-openid-url.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkENQXszfSp7ImA9WxdWEU4.&quot;"><id>tag:blogger.com,1999:blog-6894552.post-289744742864386049</id><published>2008-07-03T19:18:00.001-07:00</published><updated>2008-07-03T19:31:30.585-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-07-03T19:31:30.585-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ASP.NET" /><category scheme="http://www.blogger.com/atom/ns#" term="OpenID" /><title>How to use DotNetOpenId's Attribute Exchange extension</title><link rel="replies" type="application/atom+xml" href="http://blog.nerdbank.net/feeds/289744742864386049/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6894552&amp;postID=289744742864386049" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6894552/posts/default/289744742864386049?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6894552/posts/default/289744742864386049?v=2" /><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/Jmpinline/~3/326293622/how-to-use-dotnetopenid-attribute.html" title="How to use DotNetOpenId&amp;#39;s Attribute Exchange extension" /><author><name>Andrew</name><uri>http://www.blogger.com/profile/13632400519774640095</uri><email>noreply@blogger.com</email></author><content type="html">DotNetOpenId supports OpenID extensions, but does not provide samples for using any except the Simple Registration extension.  Since the Attribute Exchange extension (AX) was added recently, which is more extensible and generally usable than Simple Registration, sites using OpenID should consider using this extension, perhaps in addition to Simple Registration, to ease your web visitor's new user&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=FxwPij"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=FxwPij" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=zIjwGJ"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=zIjwGJ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=u6uQTj"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=u6uQTj" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=qSferj"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=qSferj" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=dfKGL"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=dfKGL" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Jmpinline/~4/326293622" height="1" width="1"/&gt;</content><feedburner:origLink>http://blog.nerdbank.net/2008/07/how-to-use-dotnetopenid-attribute.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkYMQHY_eCp7ImA9WxdaGEg.&quot;"><id>tag:blogger.com,1999:blog-6894552.post-2514020446391126381</id><published>2008-07-03T18:36:00.001-07:00</published><updated>2008-08-27T08:16:21.840-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-08-27T08:16:21.840-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ASP.NET" /><category scheme="http://www.blogger.com/atom/ns#" term="OpenID" /><title>How to add OpenID to your ASP.NET forms web site without using ASP.NET controls</title><link rel="replies" type="application/atom+xml" href="http://blog.nerdbank.net/feeds/2514020446391126381/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6894552&amp;postID=2514020446391126381" title="6 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6894552/posts/default/2514020446391126381?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6894552/posts/default/2514020446391126381?v=2" /><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/Jmpinline/~3/326271469/how-to-add-openid-to-your-aspnet-forms.html" title="How to add OpenID to your ASP.NET forms web site without using ASP.NET controls" /><author><name>Andrew</name><uri>http://www.blogger.com/profile/13632400519774640095</uri><email>noreply@blogger.com</email></author><content type="html">Although DotNetOpenId makes adding OpenID support to your ASP.NET web site as easy as dropping a control on your page design surface, there are reasons you may want to take the lower-level approach of writing a bit of the code yourself. DotNetOpenId fully supports both scenarios. In this post, I'll walk through a best practice minimal sample of how to get it working without using the controls.  &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=Cz8U8j"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=Cz8U8j" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=Dd5PyJ"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=Dd5PyJ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=TseB0j"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=TseB0j" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=z6zVUj"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=z6zVUj" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=5BYWL"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=5BYWL" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Jmpinline/~4/326271469" height="1" width="1"/&gt;</content><feedburner:origLink>http://blog.nerdbank.net/2008/07/how-to-add-openid-to-your-aspnet-forms.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkUBRX09fyp7ImA9WxdXFE0.&quot;"><id>tag:blogger.com,1999:blog-6894552.post-4228256567512752036</id><published>2008-06-11T19:53:00.001-07:00</published><updated>2008-06-25T06:24:14.367-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-06-25T06:24:14.367-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="OpenID" /><title>Why Yahoo! says your OpenID site's identity is not confirmed</title><link rel="replies" type="application/atom+xml" href="http://blog.nerdbank.net/feeds/4228256567512752036/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6894552&amp;postID=4228256567512752036" title="9 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6894552/posts/default/4228256567512752036?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6894552/posts/default/4228256567512752036?v=2" /><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/Jmpinline/~3/310112750/why-yahoo-says-your-openid-site.html" title="Why Yahoo! says your OpenID site&amp;#39;s identity is not confirmed" /><author><name>Andrew</name><uri>http://www.blogger.com/profile/13632400519774640095</uri><email>noreply@blogger.com</email></author><content type="html">Are you building an OpenId 2.0 relying party site and having your visitors who use Yahoo! as their Provider see this message?     Warning: This website has not confirmed its identity with Yahoo! and might be fraudulent. Do not share any personal information with this website unless you are certain it is legitimate.   Here is what you need to do to get rid of this warning:     Write an XRDS &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=9F08Di"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=9F08Di" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=XODJxI"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=XODJxI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=xumQwi"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=xumQwi" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=7DRxyi"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=7DRxyi" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=VrxdL"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=VrxdL" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Jmpinline/~4/310112750" height="1" width="1"/&gt;</content><feedburner:origLink>http://blog.nerdbank.net/2008/06/why-yahoo-says-your-openid-site.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUYNQX89eyp7ImA9WxdRFk8.&quot;"><id>tag:blogger.com,1999:blog-6894552.post-4026896536567532548</id><published>2008-06-04T16:44:00.001-07:00</published><updated>2008-06-04T16:46:30.163-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-06-04T16:46:30.163-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term=".NET" /><title>When NOT to use the C# "as" keyword</title><link rel="replies" type="application/atom+xml" href="http://blog.nerdbank.net/feeds/4026896536567532548/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6894552&amp;postID=4026896536567532548" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6894552/posts/default/4026896536567532548?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6894552/posts/default/4026896536567532548?v=2" /><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/Jmpinline/~3/304896074/when-not-to-use-c-keyword.html" title="When NOT to use the C# &amp;quot;as&amp;quot; keyword" /><author><name>Andrew</name><uri>http://www.blogger.com/profile/13632400519774640095</uri><email>noreply@blogger.com</email></author><content type="html">Both C++ and C# offer the cast () operator.  C# also offers the "as" operator syntax which does almost the same thing and is considered by some to look prettier and be more C#'ish.  But using the "as" keyword has downsides that you may not know about. Consider the following two methods.  Please skip the question of "Why would you take an object and cast to a string instead of just casting to a &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=FkB7fi"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=FkB7fi" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=qfLBZI"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=qfLBZI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=fhjWIi"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=fhjWIi" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=JsCLwi"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=JsCLwi" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=B7QQL"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=B7QQL" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Jmpinline/~4/304896074" height="1" width="1"/&gt;</content><feedburner:origLink>http://blog.nerdbank.net/2008/06/when-not-to-use-c-keyword.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUQCQHY9cCp7ImA9WxZaFEU.&quot;"><id>tag:blogger.com,1999:blog-6894552.post-8586777094687573057</id><published>2008-04-28T16:29:00.003-07:00</published><updated>2008-04-29T09:42:41.868-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-04-29T09:42:41.868-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term=".NET" /><category scheme="http://www.blogger.com/atom/ns#" term="ASP.NET" /><title>Uri.AbsoluteUri and Uri.ToString() are NOT the same</title><link rel="replies" type="application/atom+xml" href="http://blog.nerdbank.net/feeds/8586777094687573057/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6894552&amp;postID=8586777094687573057" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6894552/posts/default/8586777094687573057?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6894552/posts/default/8586777094687573057?v=2" /><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/Jmpinline/~3/279704486/uriabsoluteuri-and-uritostring-are-not.html" title="Uri.AbsoluteUri and Uri.ToString() are NOT the same" /><author><name>Andrew</name><uri>http://www.blogger.com/profile/13632400519774640095</uri><email>noreply@blogger.com</email></author><content type="html">If you're familiar with the System.Uri class you know that it has a couple of ways of becoming a string for purposes of communication: its AbsoluteUri property and its ToString() method.  What I didn't find out until very recently was the significant difference between the two.  Since the difference led to functional bugs in production code, I thought I'd share the knowledge to help you avoid the&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=MqHmSg"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=MqHmSg" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=2zeSbG"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=2zeSbG" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=6hkeDg"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=6hkeDg" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=gMbIag"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=gMbIag" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=JV9WL"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=JV9WL" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Jmpinline/~4/279704486" height="1" width="1"/&gt;</content><feedburner:origLink>http://blog.nerdbank.net/2008/04/uriabsoluteuri-and-uritostring-are-not.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkcHR34yeip7ImA9WxZaEEQ.&quot;"><id>tag:blogger.com,1999:blog-6894552.post-2521325352852115555</id><published>2008-04-24T21:33:00.001-07:00</published><updated>2008-04-24T21:33:56.092-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-04-24T21:33:56.092-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term=".NET" /><category scheme="http://www.blogger.com/atom/ns#" term="ASP.NET" /><category scheme="http://www.blogger.com/atom/ns#" term="OpenID" /><title>DotNetOpenId 2.1.0 released, adds Attribute Exchange support</title><link rel="replies" type="application/atom+xml" href="http://blog.nerdbank.net/feeds/2521325352852115555/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6894552&amp;postID=2521325352852115555" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6894552/posts/default/2521325352852115555?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6894552/posts/default/2521325352852115555?v=2" /><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/Jmpinline/~3/277382100/dotnetopenid-210-released-adds.html" title="DotNetOpenId 2.1.0 released, adds Attribute Exchange support" /><author><name>Andrew</name><uri>http://www.blogger.com/profile/13632400519774640095</uri><email>noreply@blogger.com</email></author><content type="html">DotNetOpenId had a double release tonight.  Version 2.0.1 is a maintenance release with a few minor bug fixes.  Version 2.1 adds built-in support for the Attribute Exchange extension, but introduces a couple of small breaking changes.  Check out the VersionChanges page to decide which version is right for you.  Download the new versions here.  &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=uYBdcMg"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=uYBdcMg" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=6AsbH4G"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=6AsbH4G" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=127MFng"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=127MFng" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=tmHrhOg"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=tmHrhOg" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=zUrVL"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=zUrVL" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Jmpinline/~4/277382100" height="1" width="1"/&gt;</content><feedburner:origLink>http://blog.nerdbank.net/2008/04/dotnetopenid-210-released-adds.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkIASHg7fCp7ImA9WxdQEkk.&quot;"><id>tag:blogger.com,1999:blog-6894552.post-8926089148850968451</id><published>2008-04-22T07:16:00.001-07:00</published><updated>2008-06-11T20:15:49.604-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-06-11T20:15:49.604-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term=".NET" /><category scheme="http://www.blogger.com/atom/ns#" term="ASP.NET" /><category scheme="http://www.blogger.com/atom/ns#" term="OpenID" /><title>Enhancing the ASP.NET MVC OpenID login experience</title><link rel="replies" type="application/atom+xml" href="http://blog.nerdbank.net/feeds/8926089148850968451/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6894552&amp;postID=8926089148850968451" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6894552/posts/default/8926089148850968451?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6894552/posts/default/8926089148850968451?v=2" /><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/Jmpinline/~3/275434791/enhancing-aspnet-mvc-openid-login.html" title="Enhancing the ASP.NET MVC OpenID login experience" /><author><name>Andrew</name><uri>http://www.blogger.com/profile/13632400519774640095</uri><email>noreply@blogger.com</email></author><content type="html">In a previous post, I present an example of how to accept OpenIDs for logins on your ASP.NET MVC site.  To keep the sample simple, I left out a feature that people very quickly noticed was lacking: getting registration data from the OpenID Provider (like email and postal address) so the user didn't have to type it in manually.  High demand leads me to follow up with this post on how to add those &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=bxRttOg"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=bxRttOg" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=LC1SDTG"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=LC1SDTG" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=j3jub0g"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=j3jub0g" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=Gm3dang"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=Gm3dang" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=bayHL"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=bayHL" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Jmpinline/~4/275434791" height="1" width="1"/&gt;</content><feedburner:origLink>http://blog.nerdbank.net/2008/04/enhancing-aspnet-mvc-openid-login.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE4HSX46fSp7ImA9WxZaE00.&quot;"><id>tag:blogger.com,1999:blog-6894552.post-704278508267906790</id><published>2008-04-16T06:50:00.001-07:00</published><updated>2008-04-27T07:35:38.015-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-04-27T07:35:38.015-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ASP.NET" /><category scheme="http://www.blogger.com/atom/ns#" term="OpenID" /><title>Why DotNetOpenID as your C# OpenID library of choice</title><link rel="replies" type="application/atom+xml" href="http://blog.nerdbank.net/feeds/704278508267906790/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6894552&amp;postID=704278508267906790" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6894552/posts/default/704278508267906790?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6894552/posts/default/704278508267906790?v=2" /><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/Jmpinline/~3/271444407/why-dotnetopenid-as-your-c-openid.html" title="Why DotNetOpenID as your C# OpenID library of choice" /><author><name>Andrew</name><uri>http://www.blogger.com/profile/13632400519774640095</uri><email>noreply@blogger.com</email></author><content type="html">In choosing an implementation of OpenID for your .NET web site, of course I would have to recommend DotNetOpenId, seeing as I spend a considerable amount of my spare time working on it.  But Samuli (in the comments on Troy's recent blog post regarding OpenID) recently asked me to give a sales pitch for DotNetOpenID over another implementation called ExtremeSwank.    First I want to make clear &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=ExPBXng"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=ExPBXng" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=vBbcpjG"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=vBbcpjG" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=jM0rNLg"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=jM0rNLg" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=kv34P0g"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=kv34P0g" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=5LUUL"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=5LUUL" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Jmpinline/~4/271444407" height="1" width="1"/&gt;</content><feedburner:origLink>http://blog.nerdbank.net/2008/04/why-dotnetopenid-as-your-c-openid.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CU4MR3c4fip7ImA9WxdQEkk.&quot;"><id>tag:blogger.com,1999:blog-6894552.post-7616889881094061485</id><published>2008-04-14T10:26:00.001-07:00</published><updated>2008-06-11T21:13:06.936-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-06-11T21:13:06.936-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ASP.NET" /><category scheme="http://www.blogger.com/atom/ns#" term="OpenID" /><title>How to add OpenID to your ASP.NET web site (in C# or VB.NET)</title><link rel="replies" type="application/atom+xml" href="http://blog.nerdbank.net/feeds/7616889881094061485/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6894552&amp;postID=7616889881094061485" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6894552/posts/default/7616889881094061485?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6894552/posts/default/7616889881094061485?v=2" /><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/Jmpinline/~3/270147381/how-to-add-openid-to-your-aspnet-web.html" title="How to add OpenID to your ASP.NET web site (in C# or VB.NET)" /><author><name>Andrew</name><uri>http://www.blogger.com/profile/13632400519774640095</uri><email>noreply@blogger.com</email></author><content type="html">Adding OpenID support to your VB.NET web site couldn't be easier.  Here is the easiest way:     Download the DotNetOpenId library.   Extract the DotNetOpenId.dll from the bin directory of the .zip file you downloaded.   Make sure you're using FormsAuthentication.             Open Web.config        Find your &lt;authentication&amp;gt; tag (or create it if you're sure it doesn't already exist) and change it &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=rcLjQVg"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=rcLjQVg" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=aw18JhG"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=aw18JhG" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=DKzOhug"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=DKzOhug" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=meP6png"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=meP6png" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=oAU0L"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=oAU0L" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Jmpinline/~4/270147381" height="1" width="1"/&gt;</content><feedburner:origLink>http://blog.nerdbank.net/2008/04/how-to-add-openid-to-your-aspnet-web.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CU4HR3wycSp7ImA9WxZbGEo.&quot;"><id>tag:blogger.com,1999:blog-6894552.post-275658161416675398</id><published>2008-04-13T17:53:00.001-07:00</published><updated>2008-04-22T07:18:56.299-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-04-22T07:18:56.299-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ASP.NET" /><category scheme="http://www.blogger.com/atom/ns#" term="OpenID" /><title>Add OpenID login support to your ASP.NET MVC site</title><link rel="replies" type="application/atom+xml" href="http://blog.nerdbank.net/feeds/275658161416675398/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6894552&amp;postID=275658161416675398" title="6 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6894552/posts/default/275658161416675398?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6894552/posts/default/275658161416675398?v=2" /><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/Jmpinline/~3/269706944/add-openid-login-support-to-your-aspnet.html" title="Add OpenID login support to your ASP.NET MVC site" /><author><name>Andrew</name><uri>http://www.blogger.com/profile/13632400519774640095</uri><email>noreply@blogger.com</email></author><content type="html">  While this post assumes a C# web site, the steps will work for VB.NET just as well, but the syntax of the glue code will have to be adjusted slightly.  Because ASP.NET MVC changes frequently, this will be a high-level outline of what you must do to support OpenID, and the implementation details I will leave up to you and your particular version of MVC.  At the end I will show the code that &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=MwzuO1g"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=MwzuO1g" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=nqXJXUG"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=nqXJXUG" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=Sbk5E5g"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=Sbk5E5g" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=u9GVQrg"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=u9GVQrg" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=Xs0YL"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=Xs0YL" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Jmpinline/~4/269706944" height="1" width="1"/&gt;</content><feedburner:origLink>http://blog.nerdbank.net/2008/04/add-openid-login-support-to-your-aspnet.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0QCRH0yfSp7ImA9WxZUGUU.&quot;"><id>tag:blogger.com,1999:blog-6894552.post-7434723966579886202</id><published>2008-04-11T23:18:00.001-07:00</published><updated>2008-04-11T23:22:45.395-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-04-11T23:22:45.395-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term=".NET" /><category scheme="http://www.blogger.com/atom/ns#" term="ASP.NET" /><category scheme="http://www.blogger.com/atom/ns#" term="OpenID" /><title>An argument for the extra dependency of a library</title><link rel="replies" type="application/atom+xml" href="http://blog.nerdbank.net/feeds/7434723966579886202/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6894552&amp;postID=7434723966579886202" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6894552/posts/default/7434723966579886202?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6894552/posts/default/7434723966579886202?v=2" /><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/Jmpinline/~3/268817343/argument-for-extra-dependency-of.html" title="An argument for the extra dependency of a library" /><author><name>Andrew</name><uri>http://www.blogger.com/profile/13632400519774640095</uri><email>noreply@blogger.com</email></author><content type="html">Lately there has been some blogging activity around C# implementations of OpenID that are "so small you can just host the source code as a single class your web site."  This is argued to be a virtue because it keeps your web site from having to add another dependency to it.  I'm glad OpenID is gaining greater traction.  But I disagree with avoiding libraries.  Let me count the ways...     A &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=wqKt1Bg"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=wqKt1Bg" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=5rkYUuG"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=5rkYUuG" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=XtQH96g"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=XtQH96g" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=4cKF8cg"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=4cKF8cg" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Jmpinline?a=LGt7L"&gt;&lt;img src="http://feeds.feedburner.com/~f/Jmpinline?i=LGt7L" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Jmpinline/~4/268817343" height="1" width="1"/&gt;</content><feedburner:origLink>http://blog.nerdbank.net/2008/04/argument-for-extra-dependency-of.html</feedburner:origLink></entry></feed>
