Skip to main content

MAuth Client for Python

Project description

MAuth Client Python

Build Status

MAuth Client Python is an authentication library to manage the information needed to both sign and authenticate requests and responses for Medidata's MAuth authentication system.


To use MAuth Authenticator you will need:

  • An MAuth app ID
  • An MAuth private key (with the public key registered with Medidata's MAuth server)


To resolve packages using pip, add the following to ~/.pip/pip.conf:

index-url = https://<username>:<password>

Install using pip:

$ pip install mauth-client

Or directly from GitHub:

$ pip install git+

This will also install the dependencies.

To resolve using a requirements file, the index URL can be specified in the first line of the file:

--index-url https://<username>:<password>
mauth-client==<latest version>


Signing Outgoing Requests

import requests
from mauth_client.requests_mauth import MAuth

# MAuth configuration
private_key = open("private.key", "r").read()
mauth = MAuth(APP_UUID, private_key)

# Call an MAuth protected resource, in this case an iMedidata API
# listing the studies for a particular user
user_uuid = "10ac3b0e-9fe2-11df-a531-12313900d531"
url = "{}/studies.json".format(user_uuid)

# Make the requests call, passing the auth client
result = requests.get(url, auth=mauth)

# Print results
if result.status_code == 200:
    print([r["uuid"] for r in result.json()["studies"]])

The mauth_sign_versions option can be set as an environment variable to specify protocol versions to sign outgoing requests:

Key Value
MAUTH_SIGN_VERSIONS (optional) Comma-separated protocol versions to sign requests. Defaults to v1.

This option can also be passed to the constructor:

mauth_sign_versions = "v1,v2"
mauth = MAuth(APP_UUID, private_key, mauth_sign_versions)

Authenticating Incoming Requests

MAuth Client Python supports AWS Lambda functions and Flask applications to authenticate MAuth signed requests.

The following variables are required to be configured in the environment variables:

Key Value
APP_UUID APP_UUID for the AWS Lambda function
PRIVATE_KEY Encrypted private key for the APP_UUID
MAUTH_URL MAuth service URL (e.g.

The following variables can optionally be set in the environment variables:

Key Value
MAUTH_API_VERSION (optional) MAuth API version. Only v1 exists as of this writing. Defaults to v1.
MAUTH_MODE (optional) Method to authenticate requests. local or remote. Defaults to local.
V2_ONLY_AUTHENTICATE (optional) Authenticate requests with only V2. Defaults to False.

AWS Lambda functions

from mauth_client.lambda_authenticator import LambdaAuthenticator

authenticator = LambdaAuthenticator(method, url, headers, body)
authentic, status_code, message = authenticator.is_authentic()
app_uuid = authenticator.get_app_uuid()

Flask applications

You will need to create an application instance and initialize it with FlaskAuthenticator:

from flask import Flask
from mauth_client.flask_authenticator import FlaskAuthenticator

app = Flask("Some Sample App")
authenticator = FlaskAuthenticator()

To specify routes that need to be authenticated use the requires_authentication decorator:

from flask import Flask
from mauth_client.flask_authenticator import requires_authentication

@app.route("/some/private/route", methods=["GET"])
def private_route():
    return "Wibble"

@app.route("/app_status", methods=["GET"])
def app_status():
    return "OK"



Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mauth-client-1.2.2.tar.gz (15.6 kB view hashes)

Uploaded source

Built Distribution

mauth_client-1.2.2-py3-none-any.whl (18.9 kB view hashes)

Uploaded py3

Supported by

AWS AWS Cloud computing Datadog Datadog Monitoring Facebook / Instagram Facebook / Instagram PSF Sponsor Fastly Fastly CDN Google Google Object Storage and Download Analytics Huawei Huawei PSF Sponsor Microsoft Microsoft PSF Sponsor NVIDIA NVIDIA PSF Sponsor Pingdom Pingdom Monitoring Salesforce Salesforce PSF Sponsor Sentry Sentry Error logging StatusPage StatusPage Status page