title | name | image | tags | snippets | |||||||
---|---|---|---|---|---|---|---|---|---|---|---|
ServiceStack Tutorial |
ServiceStack |
/media/platforms/service-stack.png |
|
|
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 2012. Select "FILE -> New project -> MVC 3 Web Application -> Empty"
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 Global.asax
file (this is required for ServiceStack):
routes.IgnoreRoute("api/{*pathInfo}");
Add a 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.dependencies)}
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 : ServiceBase<Hello>
{
protected override object Run(Hello request)
{
IAuthSession session = this.GetSession();
var sb = new StringBuilder();
sb.AppendLine("Id: " + session.Id);
sb.AppendLine("DisplayName: " + session.DisplayName);
var auth0Session = session as Auth0UserSession;
var pic = auth0Session.ExtraData["picture"];
return new HelloResponse { 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!