Getting a users information from Auth0

Last time around we added Auth0 to a project to handle our login and signup. You can see that post here

With Auth0 handling our login and signup we want to connect to Auth0 and get the user information.

Source code for this can be found here

Auth0 Management API

This is were Auth0 management API comes into play. We use this to connect our app to Auth0 and get the user information.

Getting tokens

To access the management API from our code we need to create a machine to machine connection.

See here for more information on generating a token to use.

Time for some code

First up we want to add the Nuget package for the Auth0 Management API

Install-Package Auth0.ManagementApi 

Auth0 Get user information

Now we can get into the good stuff. To get the user information from the Auth0 we need to call this

var client = new ManagementApiClient("TOKEN", new Uri("https://DOMAIN.eu.auth0.com/api/v2/"));

return client.Users.GetAsync(USERID).Result;

That's pretty much it. Those 2 lines of code. We take their user ID from our identity management and then send it to Auth0 and it will give us back the users information. A sample of the fields available to use in this API.

{
  "email": "john.doe@gmail.com",
  "email_verified": false,
  "username": "johndoe",
  "phone_number": "+199999999999999",
  "phone_verified": false,
  "user_id": "usr_5457edea1b8f33391a000004",
  "created_at": "",
  "updated_at": "",
  "identities": [
    {
      "connection": "Initial-Connection",
      "user_id": "5457edea1b8f22891a000004",
      "provider": "auth0",
      "isSocial": false
    }
  ],
  "app_metadata": {},
  "user_metadata": {},
  "picture": "",
  "name": "",
  "nickname": "",
  "multifactor": [
    ""
  ],
  "last_ip": "",
  "last_login": "",
  "logins_count": 0,
  "blocked": false,
  "given_name": "",
  "family_name": ""
}

In my code I added a new method to my HomeController


    private async Task<Auth0.ManagementApi.Models.User> GetUserInformationAsync(string sUserId)
    {
      var client = new ManagementApiClient("YOURTOKEN", new Uri("https://YOURDOMAIN.eu.auth0.com/api/v2/"));

      return client.Users.GetAsync(sUserId).Result;
    }

I then check if my user is authenticated.


      // Get User information from Auth0
      if (User.Identity.IsAuthenticated)
      {
        string sUserId = User.Claims.Last()?.Value;


        Task<Auth0.ManagementApi.Models.User> _taskUserInfo = GetUserInformationAsync(sUserId);
      }

If the user is Authenticated I get the User ID and then call my new method to get the user information.

Summary

That's it I used Auth0 to handle the login and signup and then I called the Auth0 API to get user information like email and name.

I have done this live in a few places in production for example touroperator.io I have been using these posts to work out how to make the signup work better.

On Touroperator.io when you log in or signup I check if I have a record of in a tenant table. If not I then call the management API to get the user information. Then I create a tenant on my side. It really makes it easier to build out logins.