Skip to main content

Authress SDK for authorization as a service and interact with the Authress API.

Project description

authress-sdk

Authress SDK for Python.

NuGet version Build Status

This is the Authress SDK used to integrate with the authorization as a service provider Authress at https://authress.io.

Usage

pip install authress-sdk

(you may need to run pip with root permission: sudo pip install authress-sdk)

Then import the package:

import authress_sdk

Getting Started

Authorize using a user token

from authress_sdk import AuthressClient

# create an instance of the API class during service initialization
# Authress custom domain or if there isn't one yet, use the authress account specific url
host = "https://login.your.domain.com" # or "https://ACCOUNT_ID.api.authress.io"
authress_client = AuthressClient(host)

# on api route
from flask import request
from authress_sdk import ApiException

@app.route('/resources/<resourceId>')
def get_resource(resourceId):
  # Get the user token and pass it to authress
  authorization_token = request.headers.get('authorization')
  authress_client.set_token(authorization_token)

  # Check Authress to authorize the user
  try
    authress_client.users.authorize_user(None, f'resources/{resourceId}', 'READ')
  except ApiException as api_exception:
    # Will throw except if the user is not authorized to read the resource
    if api_exception.status is 403:
      return 403

    raise api_exception

  # On success, continue with the route code to load resource and return it
  return 'Resource', 200

Authorize with a service client

from authress_sdk import AuthressClient

# create an instance of the API class during service initialization
# Authress custom domain or if there isn't one yet, use the authress account specific url
host = "https://login.your.domain.com" # or "https://ACCOUNT_ID.api.authress.io"

# Create a service client in the Authress management portal and past the access token here
access_token = 'eyJrZXlJ....'
authress_client = AuthressClient(host, access_token)

# on api route
from flask import request
from authress_sdk import ApiException

@app.route('/resources/<resourceId>')
def get_resource(resourceId):
  # Get the user
  user_id = get_user_id(request)

  # Check Authress to authorize the user
  try
    authress_client.users.authorize_user(user_id, f'resources/{resourceId}', 'READ')
  except ApiException as api_exception:
    # Will throw except if the user is not authorized to read the resource
    if api_exception.status is 403:
      return 403

    raise api_exception

  # On success, continue with the route code to load resource and return it
  return 'Resource', 200

Using the Authress service client as an API key

You can use the Authress service client access token as an api key for your application. This is as simple as pulling in the SDK and referencing the token provider.

Application SDK example

from authress_sdk import AuthressClient

access_key = "eyARB5k-..." # For your API clients, these can be created via the API at https://authress.io/app/#/api
authress_host = None # Optionally you can call the Authress API if there are authress resources to be fetched
authress_client = AuthressClient(authress_host, access_key)
# Generates a JWT to be used as a Bearer token for your API
jwt_token = authress_client.get_client_token()

In the case of a CLI or an SDK, the recommendation is to receive the access key from the user, perform these steps and then use the resulting jwt_token with your API. You can handle the JWTs as you would validate any JWT, in most cases it might be easier to make a request to Authress on the service side for token validation. An example is above:

authress_client.set_token(jwt_token)
authress_client.users.authorize_user(...)

Generation of service client

Since part of this process involves creating the service client and access token as part of your api. First create a service client which has Authress:Owner to resource Authress:ServiceClients/*. Then execute the following on user request to create a new api key.

from authress_sdk import AuthressClient
from authress_sdk.models import *

# Your service's service client access token
access_token = 'eyJrZXlJ....'
# Authress custom domain or if there isn't one yet, use the authress account specific url
host = "https://login.your.domain.com" # or "https://ACCOUNT_ID.api.authress.io"
authress_client = AuthressClient(host, access_token)

# User to create access token for
user_id = 'USER_A1'

# Create the service client
new_client = authress_client.clients.create_client(Client(name=f'ServiceClient for User {user_id}'))

# Give the service client access to the users data
authress_client.records.create_record(AccessRecord(
  name=f'API Key {new_client.client_id}',
  users=[AccessRecordUser(f'Authress:ServiceClients/{new_client.client_id}')],
  # Add the list of permissions this api key should have, for example here we've added all access to all the users resources as defined in Authress
  statements=[AccessRecordStatement(['Authress:Owner'], [AccessRecordResource(f'/users/{user_id}')])]))
# Request a new access key for that client
data = service_client_api.request_access_key(new_client.client_id)
# Return the access key to the user for usage
return data.access_key

Token Verifier

To verify incoming tokens from Authress call the verify_token method on the AuthressClient

from authress_sdk import AuthressClient

# User's access token from request
authorization_token = request.headers.get("authorization")

# Authress custom domain or if there isn't one yet, use the authress account specific url
host = "https://login.your.domain.com" # or "https://ACCOUNT_ID.api.authress.io"

# Instantiate the client
authress_client = AuthressClient(host)

# Verify the token, on successful verification the response is the decoded user identity JWT. On failure this raises an exception
user_identity = authress_client.verify_token(authorization_token)

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

authress-sdk-2.0.19.tar.gz (30.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

authress_sdk-2.0.19-py3-none-any.whl (47.1 kB view details)

Uploaded Python 3

File details

Details for the file authress-sdk-2.0.19.tar.gz.

File metadata

  • Download URL: authress-sdk-2.0.19.tar.gz
  • Upload date:
  • Size: 30.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.11.1

File hashes

Hashes for authress-sdk-2.0.19.tar.gz
Algorithm Hash digest
SHA256 11d0f8fa6c85f6c1e2ce6a0c6fbd3ed7d679215f9ef13b3edd18765438c188de
MD5 37ec48df4d6184110d9a7dfaa387a348
BLAKE2b-256 4d256d153e0a1cca890954c7292bdff1a04ce00c0a378045ebfe1bc13169f9aa

See more details on using hashes here.

File details

Details for the file authress_sdk-2.0.19-py3-none-any.whl.

File metadata

  • Download URL: authress_sdk-2.0.19-py3-none-any.whl
  • Upload date:
  • Size: 47.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.11.1

File hashes

Hashes for authress_sdk-2.0.19-py3-none-any.whl
Algorithm Hash digest
SHA256 936ec4f4c14b2c85c683c423f9cb98d82b90cfd76cad87f7be5a55df34279ca3
MD5 3ba0333ba2b21760f115962dfbc35114
BLAKE2b-256 453cef13489842f243e2d1be88ef67a440f4f1f813a7b93bb3f725e9b101936d

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page