Intro
In this post, I will demonstrate how to configure TabPy to require username and password, how to manage users for TabPy and how to connect from Tableau (both Desktop and Server) to TabPy with specifying credentials.
User Management for TabPy
After TabPy is installed (read Tableau Installation Instructions for how to install it) you can use tabpy-user
command-line utility for adding and updating TabPy user accounts.
The utility itself supports a set of parameters such as a path to passwords file, operation, username and so on. Run tabpy-user -h
to see all the parameters.
Adding a User
To add a user specify a username, a path to passwords file, password and add
operation, e.g.:
c:\TabPy>tabpy-user add -u alice -f c:\TabPy\tabpypwd.txt -p P@ssw0rd
Parsing passwords file c:\TabPy\tabpypwd.txt...
Passwords file c:\TabPy\tabpypwd.txt not found
Adding username "alice"
Adding username "alice" with password "P@ssw0rd"...
Added username "alice" with password "P@ssw0rd"
In the example above the user alice
with password P@ssw0rd
was added to file c:\TabPy\tabpypwd.txt
.
You can also let the utility generate a password for you simply skipping -p <Password>
parameter:
c:\TabPy>tabpy-user add -u bob -f c:\TabPy\tabpypwd.txt
Parsing passwords file c:\TabPy\tabpypwd.txt...
Found username alice
Authentication is enabled
Generated password: ")7!f}dA_K=hrF7{x"
Adding username "bob"
Adding username "bob" with password ")7!f}dA_K=hrF7{x"...
Added username "bob" with password ")7!f}dA_K=hrF7{x"
In the example above new user bob
was added to the same password file with password )7!f}dA_K=hrF7{x
.
Updating User Password
It is possible to update the password for a user with update
command, e.g.:
c:\TabPy>tabpy-user update -u alice -f c:\TabPy\tabpypwd.txt -p Secret_D0nt_Te11
Parsing passwords file c:\TabPy\tabpypwd.txt...
Found username alice
Found username bob
Authentication is enabled
Updating username "alice"
Updating username "alice" password to "Secret_D0nt_Te11"
In this example alice
‘s password was changed to Secret_D0nt_Te11
.
What’s Inside Passwords File?
The password file is just a text file with user names and hashed passwords on each line. If you open the file you will see something like this:
alice edb6473a71775f48538c1cee15dc41269302b06b79260c70ce149d1b24a4192f764570702d5449fa2712c0a99d0db9216c1a452f07a3a3b44dca1b491cd7d516
bob 7716853bdc91132fe4bef86adaac0ae6fa9cf474c5b075e89880fcd21834d2bb16266eb65d0be0a8faa2ee48342708350b95af4af3caebbb8044f59341fcfab6
Those long codes are actually the hashes for the passwords. Instead of keeping passwords in plain text or encrypted form TabPy uses hashes. What it does is makes it impossible (rather incredibly expensive) to recover passwords from those hashes. If you wonder how the passwords are hashed – at the moment TabPy uses PBKDF2 method with 10000 iterations (https://en.wikipedia.org/wiki/PBKDF2).
Deleting a User
Since the password file is just a text file you can delete a user with any text editor simply deleting the whole line with the user name in it.
Configuring TabPy with Authentication
Now when you have the passwords file you can point TabPy to it so it knows to require credentials with all the requests to serve.
NOTE: any changes for the password file do not affect any running instances of TabPy – you will need to restart TabPy for the changes to take effect.
In previous post TabPy: modifying default configuration it was shown how to changes some (or all) TabPy configuration parameters with a config file. Let’s create a config file to turn on authentication as well. I am storing the following configuration in c:\TabPy\tabpy_auth.conf
:
[TabPy]
TABPY_PWD_FILE = c:\TabPy\tabpypwd.txt
As you can see the only configuration parameter I am modifying there is the password file path. In real-life scenarios, you will have logger settings, port, timeout and any other of the parameters documented at TabPy Custom Settings page.
Now let’s start TabPy with the config:
c:\TabPy>tabpy --config c:\TabPy\tabpy_auth.conf
...
DEBUG:tabpy.tabpy_server.app.app:Parameter TABPY_PWD_FILE set to "c:\TabPy\tabpypwd.txt" from config file or environment variable
INFO:tabpy.tabpy_server.app.util:Parsing passwords file c:\TabPy\tabpypwd.txt...
DEBUG:tabpy.tabpy_server.app.util:Found username alice
DEBUG:tabpy.tabpy_server.app.util:Found username bob
INFO:tabpy.tabpy_server.app.util:Authentication is enabled
...
INFO:tabpy.tabpy_server.app.app:Web service listening on port 9004
TabPy is running with authentication on!
Connecting from Tableau
For Tableau to communicate with TabPy when credentials are required you need to configure the product with username and password. As mentioned at TabPy Authentication page basic authentication is used at the moment (https://en.wikipedia.org/wiki/Basic_access_authentication) which means username (login) and password sent with each HTTP request to TabPy. This is why it is highly recommended to use a secured communication channel rather than plain text. For how to configure secure connection read Configuring HTTP vs HTTPS documentation page.
Tableau Desktop
For Tableau Desktop go to the main menu, Help, Settings and Performance, Manage External Service Connection. The screenshots below are for Tableau 2019.4.2:
Set connection type to be TabPy/External API, enter Server (host) and Port for your TabPy instance (localhost and 9004 on the screenshot below), set check mark for Sign with username and password and enter credentials for a user:
To confirm the credentials are valid click Test Connection button and popup message with confirming success (or failure details) will show:
Tableau Server
To configure Tableau Server connection to TabPy with authentication follow instructions at TSM Security page. At the moment this post is being written the latest available version of Tableau Server is 2019.4.2 and the steps will be setting up a connection and applying the changes:
c:\user\admin>tsm security vizql-extsvc-ssl enable --connection-type tabpy --extsvc-host my_tabpy_server --extsvc-port 9004 --extsvc-username alice --extsvc-password Secret_D0nt_Te11
...
c:\user\admin>tsm pending-changes apply
[…] Connection Type, Host, and Port. Set Require SSL and authentication parameters as needed (read How to configure TabPy with authentication and use it in Tableau for authentication configurations steps) and click Save […]
[…] For how to configure authentication for TabPy read How to configure TabPy with authentication and use it in Tableau. […]
Hello TabPy Gurus!
I’m evaluating a possibility to enable a TabPy for a Tableau Server ( v.2021) working with confidential data in workbooks and flows. I’m not clear on installing SSL for TabPy hosted on a Windows Server 2019. TabPy without authentication and HTTP only works fine on Tableau Desktop and Tableau Server.
My TabPy server doesn’t have IIS. Should I install it and get self-signed SSL? Should I use Tableau Server SSL?
Would appreciate your help!
Thank you!
Elena
Elena,
I am not with Tableau anymore and not participating in TabPy development so I highly recommend contacting Tableau team via Tableau Community Forum.
As for your question – SSL cert for TabPy can be installed on Windows in the same way as you install any other certificates. Additional reading:
IIS is not needed for TabPy as TabPy is a webserver by itself.
Is it self-signed cert or a cert issued by your organization it is for you to decide. Tableau/TabPy support both. I would not recommend to use the same cert Tableau Server uses.
[…] TabPy is not – it does not support models (deployed functions), authentication, SSL, logging and other configuration and backward compatibility with older TabPy versions. Read […]