/Auth0.NancyFx.SelfHost

Auth0 Authentication Library for NancyFx SelfHosted Applications

Primary LanguageC#Apache License 2.0Apache-2.0

Auth0.NancyFx.SelfHost

Auth0 Authentication Library for NancyFx SelfHosted Applications

Ready to use in NancyFx style: super-duper-happy-path implementation. Install the package by NuGet

PM> Install-Package Auth0.NancyFx.SelfHost

In your Nancy self hosted application add to your BootStrapper:

protected override void ApplicationStartup(TinyIoCContainer container, IPipelines pipelines)
{
  ...
        
  Auth0Authentication.Enable(pipelines, new AuthenticationConfig
  {
    RedirectOnLoginFailed = "login",
    CookieName = "_auth0_userid",
    UserIdentifier = "userid"
  });
        
  ...
}

The AuthenticationConfig gives you more control. Use RedirectOnLoginFailed to define the view shoud shown an unauthenticated user. The CookieName allows you to set your own cookie name. And last but not least you can set the identifier to identify the requests. This value of your user instance will save in the cookie. At this time you can set as identifier all fields of the Auth0 user token witch I implemented.

  • userid,
  • email,
  • nickname,
  • gravatarurl

Important Hint: Auth0.Nancy.SelfHost enabled in background the CookieBasedSessions setting. If you use in your App this setting too, switch it of now.

###How to use it in your project?

After you enabled the Auth0Authentication you are able to block all unauthenticated requests by unsing

public class SecurePage : NancyModule
{
    public SecurePage()
    {
        this.RequiresAuthentication(); //<- This is a new implemetation of default extension
        Get["/securepage"] = o => View["securepage"];
    }
}

But this it's not all. You need for Auth0 a callback route, and a way log in and log out too. Take look for my implementation.

public class Authentication : NancyModule
{
    public Authentication()
    {
        Get["/login"] = o =>
        {
            if (this.SessionIsAuthenticated())
                return Response.AsRedirect("securepage");

            return View["login"];
        };

        Get["/login-callback"] = o => this
            .AuthenticateThisSession()
            .ThenRedirectTo("securepage");

        Get["/logout"] = o => this
            .RemoveAuthenticationFromThisSession()
            .ThenRedirectTo("index");
    }
}

###Implementig with Auth0

Look into the sample. The implementation with Auth0 is like any other implementation.

First insert your Auth0 settings into app.config (like here ASP.Net Auth0 Documentation)

<appSettings>
    <!-- Auth0 configuration -->
    <add key="auth0:ClientId" value="YOUR-CLIENTID" />
    <add key="auth0:ClientSecret" value="YOUR-CLINET-SECTRET" />
    <add key="auth0:Domain" value="YOUR-DOMAIN" />
    <add key="auth0:CallbackUrl" value="http://localhost:3579/login-callback" />
</appSettings>

and put the Widget Code into your login website

<div id="root" style="width: 400px; margin: 40px auto; padding: 10px; border-style: dashed; border-width: 1px;">
    embeded area
</div>
<script src="https://cdn.auth0.com/w2/auth0-widget-2.4.6.min.js"></script>
<script>
    var widget = new Auth0Widget({
        domain:         'YOUR_DOMAIN',
        clientID:       'YOUR-CLIENTID',
        callbackURL:    'http://localhost:3579/login-callback'
        });
        
    widget.signin({ container: 'root', chrome: true });
</script>

That's it