Voilà is a popular library that lets you transform a Jupyter Notebook into an interactive dashboard, enabling you to share your work with others. Dashboards often contain sensitive or confidential information, so authentication ensures that only authorized users can access this data. Authenticated users can have personalized dashboards tailored to their specific roles or needs.
In this tutorial, we’ll look at some methods of securing your Voilà
dashboards.
Ploomber Cloud
Password Protection
Securing your applications with Ploomber Cloud
is as easy as a single click and entering your username and password. The setup process is effortless, thus making it a suitable choice for developers
of different skill levels. Ensuring security is crucial for any web application, and Ploomber Cloud prioritizes this aspect by encrypting all credentials. This encryption process transforms your username and password into a highly complex format, making it extremely challenging for unauthorized individuals to decipher. Whether you’re managing sensitive data or simply aiming to limit access to specific users, Ploomber Cloud’s encryption ensures the safety of your authentication details.
To set the credentials for your Voilà
application, turn on the Enable password protection
toggle. It should display your login credentials by default. But you can change it to the desired Username
and Password
.
Once you click on VIEW APPLICATION
after deployment completion, you’ll be prompted for the username
and password
. Enter your credentials set in the previous step for accessing the application.
The authentication process mentioned here is framework-agnostic and can be implemented in any type of application, not limited to just Voilà
.
Auth0 Authentication
Auth0 is a platform that allows developers to implement secure login processes and control access to applications. Ploomber Cloud enables you to easily secure your Voilà
applications using auth0
.
Let’s look at a sample application that contains a voila.py
configuration file and an app.ipynb
app file. We define a prelaunch-hook function in the voila.py
file that reads the auth0
username X-Auth-Name
from the request headers. Additionally, this function also injects a notebook cell in the app file for displaying the username:
import nbformat
def hook_function(req, notebook, cwd):
headers = req.request.headers
user = headers.get('X-Auth-Name', 'Anonymous')
set_user_cell = f"user = '{user}'\n"
print_user_cell = f"print(f\"Welcome {user}\")"
user_cell = nbformat.v4.new_code_cell(source=f"{set_user_cell}{print_user_cell}")
notebook.cells.insert(0, user_cell)
return notebook
c.Voila.prelaunch_hook = hook_function
Here is the notebook for displaying a simple bar chart.
To deploy this application on Ploomber Cloud, you first need to install the CLI:
pip install ploomber-cloud
Then, you can run the below command to download the sample application that demonstrates auth0 integration:
ploomber-cloud examples voila/app-with-auth0
cd
into the app-with-auth0
directory and initialize the project. This should create a ploomber-cloud.json
file with the project id
information.
ploomber-cloud init
To set up auth0
authentication for the project we need to create a new application in the Auth0
account:
Once done, note down the values of Client ID
and Domain
in the application Settings
page.
Next, run ploomber-cloud templates auth0
in the project root folder. You need to set Client ID
and Domain
as the AUTH_CLIENT_ID
and AUTH_ISSUER_BASE_URL
respectively:
ploomber-cloud templates auth0
Enter the value for AUTH_CLIENT_ID: Pi9RW***********************MQAy
Enter the value for AUTH_ISSUER_BASE_URL: dev-****************.us.auth0.com
Successfully configured auth0. To deploy, run 'ploomber-cloud deploy'
Once the auth0 setup is done you should find a .env
file with the credentials entered in the previous step. To deploy the project run ploomber-cloud deploy
. The application ID will be of the format https://application-name-1999.ploomberapp.io
. Copy this URL and set callback URLs as follows:
Once the application deployment is complete you can click on the VIEW APPLICATION
button and you should see the login page:
To learn more about auth0 integration check out the documentation.
Token Authentication
Voilà
supports token authentication by using jupyter server 2
. To enable token authentication, generate a random token using the secrets
module:
python -c 'from secrets import token_hex; print(token_hex(16))'
Now run the Voilà app using this token. It should display a login page:
voila --token=my-secret-token notebook.ipynb
Enter my-secret-token
to login:
Note that you can also use any password of your choice to set up token authentication.
Click here to learn more about token authentication.