Skip to content
This repository has been archived by the owner on Jun 4, 2022. It is now read-only.

A python helper library for AWS API Gateway Custom Authorizers

License

Notifications You must be signed in to change notification settings

oharaandrew314/aws-lambda-pyauthlib

Repository files navigation

aws-lambda-pyauthlib

https://travis-ci.org/oharaandrew314/aws-lambda-pyauthlib.svg?branch=master codecov.io

A python helper library for AWS API Gateway Custom Authorizers.

Installation

pip install aws-lambda-pyauthlib

or

pipenv install aws-lambda-pyauthlib

Quickstart

'''authorizer_handler.py'''
from pyauthlib import UserInfo, AuthPolicy, HttpMethod, parse_event, raise_401
from my_auth_client import get_client

def lambda_handler(event, _context):
    '''Exchanges access token for user_info and returns the policy.
        Unauthorized users are denied all access.
        Users are allowed read access to all resources.
        Admins are allowed full access to all resources.
    '''
    event = parse_event(event)

    identity = get_client().get_identity(event.access_token)
    user_info = UserInfo(identity['user_id'], identity['grants'])
    policy = AuthPolicy(user_info)

    if not user_info:
        raise_401()
    elif 'ROLE_ADMIN' in user_info.authorities:
        policy.allow(event.arn(method=HttpMethod.ALL, resource='*'))
    else:
        policy.allow(event.arn(method=HttpMethod.GET, resource='*'))

    return policy.build()

More Information

You can also return an arbitrary authorizer context, by passing kwargs into the UserInfo. A list of authorities is always required, but nothing is stopping you from using an empty list.

Go check out the examples!