Nugget that adds OpenID/Facebook/Twitter login via JanRain Engage for Asp.Net MVC
C# ASP Ruby Other
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
packaging
src
.gitignore
README.markdown
rakefile.rb

README.markdown

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.

Getting Started (Asp.Net MVC)

Step 1: Add reference to EngageNet.dll and EngageNet.Mvc.dll

Step 2: Configure Engage

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

Step 3: Create a new controller named "EngageController". Add the LogOn action:

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");
}

Step 6: Create LogOnCancelled and LogOnSuccess views, or have those scenarios redirect to existing actions.