I've been doing some work on improving the codebase used by Portland Code Camp for use in our coming Palouse Code Camp. One of my first projects, has been replacing the standard ASP.NET FormsAuthentication that was being used with OpenID, since I'm a firm believer that we don't need to store usernames and passwords. OpenID may not be perfect, but pretty much everyone has one, and it's usability story is improving.
In all, it has a clean API, good examples, and within an hour or so, I was doing very basic authentication with OpenID.
There is, however, one problem. They don't provide even a base implementation of a Membership Provider, Profile Providers or Role Providers, and the existing code uses these. So, I'm left implementing my own. The code I'm working on is open source, it's on bitbucket, so I will eventually have a working implementation, but it was still disappointing that it wasn't available.
Still, DotNetOpenAuth is a solid project, it works well, and has great examples. If you need authentication on a .NET project, I'd definitely suggest looking at it.