The JanRain Engage authentication service is a public API to simplify the integration of single sign-on via identity providers like Google, Facebook, Twitter, and OpenID. This project is a wrapper library for the Engage service written in .Net 4.0.
Included is an ASP.Net MVC 2 sample web site to demonstrate integrating the library into your MVC website.
Somewhere in your application startup you'll need to configure the EngageProvider by giving it your Engage application domain (your-site.rpxnow.com) and your API key. Both are available on your dashboard when you're logged in to to RPXNow.com. Here is an example of the configuration:
EngageProvider.ApplicationDomain = "your-site-name.rpxnow.com"; //TODO: set your site's Application Domain EngageProvider.Settings = new EngageNetSettings("YOUR_API_KEY"); //TODO: set your API key
public ViewResult LogOn() { return View(); }
Step 4A: Create the LogOn view. If you want to have a link that pops up the Engage overlay for logging in, use this example code:
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<dynamic>" %> <%@ Import Namespace="EngageNet.Mvc.Html" %> <asp:Content ID="title" ContentPlaceHolderID="TitleContent" runat="server"> Log On </asp:Content> <asp:Content ID="main" ContentPlaceHolderID="MainContent" runat="server"> <h2>Log On</h2> <p><%= Html.Engage().LogOnLink("Log On", "ProcessLogOn", "Engage") %></p> <%= Html.Engage().LogOnLinkScript() /*TODO: ideally this script include should be moved to the end of your page*/ %> </asp:Content>
Step 4B: Create the LogOn view. If you want to have an embedded version of the Engage login, use this example code:
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<dynamic>" %> <%@ Import Namespace="EngageNet.Mvc.Html" %> <asp:Content ID="title" ContentPlaceHolderID="TitleContent" runat="server"> Log On </asp:Content> <asp:Content ID="main" ContentPlaceHolderID="MainContent" runat="server"> <h2>Log On</h2> <%= Html.Engage().InlineWidget("ProcessLogOn", "Engage") %> </asp:Content>
Step 5: In the EngageController, you'll need to process the data returned from JanRain's servers. Add the following action and constructors:
private readonly IEngageNet _engage; public EngageController(IEngageNet engage) { _engage = engage; } public EngageController() : this(EngageProvider.Build()) { } public RedirectToRouteResult ProcessLogOn(string token) { if (string.IsNullOrEmpty(token)) return RedirectToAction("LogOnCancelled"); var authenticationDetails = _engage.GetAuthenticationDetails(token, true); FormsAuthentication.SetAuthCookie(authenticationDetails.Identifier, true); return RedirectToAction("LogOnSuccess"); }