| title | ServiceStack Tutorial | ||||||
|---|---|---|---|---|---|---|---|
| name | ServiceStack | ||||||
| image | /media/platforms/service-stack.png | ||||||
| tags |
|
||||||
| snippets |
|
<%= include('../_includes/_package', { pkgRepo: 'auth0-aspnet-owin', pkgBranch: 'master', pkgPath: 'examples/basic-mvc-sample', pkgFilePath: 'examples/basic-mvc-sample/BasicMvcSample/Web.config', pkgType: 'replace' }) %>
::: panel-info System Requirements This tutorial and seed project have been tested with the following:
- Microsoft Visual Studio 2015
- .NET Framework 4.5.2 :::
At the end of this tutorial you will have a working web site that calls a ServiceStack API with authenticated users.
We assume you are familiar with ServiceStack
For this example, we will use the standard template that ships with Visual Studio. Select "FILE -> New project -> ASP.NET Web Application -> MVC" .
Once the default template unfolds, use NuGet to install the ServiceStack.Host.Mvc nuget, running the command:
${snippet(meta.snippets.dependencies)}
Add the following line to your App_Start/Route_Config.cs file to the beginning of the RegisterRoutes function (this is required for ServiceStack):
routes.IgnoreRoute("api/{*pathInfo}");
Change HomeController to return the default.htm page. Under the Controllers folder add:
public class HomeController : Controller
{
public ActionResult Index()
{
return Redirect("default.htm");
}
}We provide a Nuget package to simplify integration of Auth0 with ServiceStack based applications.
Run this command on the Package Manager Console:
Install-Package Auth0-ServiceStack-OAuthProvider
This command will add two classes to your project under the App_Start folder: Auth0Provider and Auth0UserSession.
Auth0Provider extends ServiceStack's OAuthProvider and handles the authentication transaction for you.
Open the AppHost.cs file (also under the App_Start folder) generated by the ServiceStack NuGet. Uncomment the following call under the Configure method:
ConfigureAuth(container);
And then uncomment and edit the ConfigureAuth method to look like this:
${snippet(meta.snippets.setup)}
In this sample we are not interested in user registration. So we are leaving that section out.
After authenticating the user on Auth0, we will do a POST to a URL on your web site. For security purposes, you have to register this URL on the Application Settings section on Auth0 Admin app (make sure to change the port).
http://localhost:PORT/api/auth/auth0/Open your web.config file and change the three Auth0's parameters under <appSettings>:
<add key="oauth.auth0.AppId" value="${account.clientId}" />
<add key="oauth.auth0.AppSecret" value="${account.clientSecret}" />
<add key="oauth.auth0.OAuthServerUrl" value="https://${account.namespace}" />
Open the the WebServiceExamples.cs file.
[Authenticate]
public class Hello
{
public string Name { get; set; }
}public class HelloResponse
{
public IAuthSession UserInfo { get; set; }
public string Result { get; set; }
public ResponseStatus ResponseStatus { get; set; } //Where Exceptions get auto-serialized
}public class HelloService : Service
{
public object Any(Hello request)
{
IAuthSession session = this.GetSession();
var sb = new StringBuilder();
sb.AppendLine("Id: " + session.Id);
sb.AppendLine("DisplayName: " + session.DisplayName);
return new HelloResponse { Result = "Hello, " + request.Name, UserInfo = session };
}
}Notice we are not doing anything useful with these properties. You can place a breakpoint here and explore the session object.
${lockSDK}
Open default.htm and add the following statement in the jQuery.ready body:
// get user info from hello endpoint
$.getJSON('/api/hello', function (data) {
$('#userInfo').text(JSON.stringify(data.userInfo, 1, 2));
});Add a section to display the UserInfo:
<div>User Info:
<pre><code id="userInfo">Not logged in</code></pre>
</div>After successful authentication, the UserProfile will be displayed on the page.
Congratulations!
