Search code examples
asp.netactive-directoryopenidsecuritysingle-sign-on

What is the best way to implement SSO for ASP.NET Web Apps with Active Directory?


My organisation has several web facing ASP.NET Web Forms Apps. They currently use Windows Authentication with impersonation enabled. The web apps are hosted internally but are exposed publicly via different domains e.g. www.abc.com & www.xyz.org.

A new requirement, is that a single log on page will be provided for all users of these apps to log in via.

Some of the solutions proposed are:

  • Implement an OpenId Provider backed by Active Directory (DotNetOpenAuth), modify existing apps to become relying parties of this OP.
  • Implement SSO through MS Forefront Threat Management Gateway.

I don't have experience with either of these. Are the proposed solutions feasible? What are the pros and cons of each? Are there other solutions that might be more appropriate?


Solution

  • OpenId Provider is a fairly good idea. It will be an easier route and there are some good details around the web.

    You may also want to look into Active Directory Federation Services.

    http://msdn.microsoft.com/en-us/library/bb897402.aspx

    It is not uncommon for businesses moving to hosted solutions look to implement federated services and this is something Microsoft anticipated when setting up and creating Azure - to be corporate friendly.

    They have put together a comprehensive guide here, which while not directly related to your question, does have extensive details about the technology behind federated services.

    http://msdn.microsoft.com/en-us/library/windowsazure/hh127796.aspx

    For more thoughts and information on, specifically the pros and cons, take a look at these articles which answer it in more depth:

    http://technet.microsoft.com/en-us/magazine/ff721824.aspx

    http://windowsitpro.com/active-directory/ease-cloud-security-concerns-federated-identity

    http://www.csoonline.com/article/221034/the-truth-about-federated-identity-management

    Some DotNetOpenAuth thoughts:

    http://www.codeproject.com/Articles/325228/Choosing-technologies-for-NET-project

    http://social.msdn.microsoft.com/Forums/en-US/windowsazuresecurity/thread/7a1c4e0c-346c-4008-9e5c-87ba1273b2aa/

    Finally, we have personally gone with OpenAuth for one of my teams solutions. The implementation was fairly painless once we took time to really understand the RFCs (which was no easy feet, but worth taking the time to do). There are also a ton of resources on the web to get a hang of the implementation.