Skip to main content
1 of 2

sanction: a dead easy OAuth2 client Python implementation

Overview

sanction is a lightweight, dead simple (67 LOC!) client implementation of the OAuth2 protocol. The major goals of the library are:

  • Support multiple providers
    • Most providers have varying levels of diversion from the official spec. The goal with this library is to either handle these diversions natively, or expose a method to allow client code to deal with it efficiently and effectively.
  • Support all server-side OAuth2 flows
    • Three of the four OAuth2 flows should be supported by this library. Currently, only authorization code and client credential flows have been tested due to lack of other (known) implementations.

Example

c = Client(token_endpoint="https://accounts.google.com/o/oauth2/token",
    resource_endpoint="https://www.googleapis.com/oauth2/v1",
    redirect_uri="http://localhost:8080/login/google",
    client_id=config["google.client_id"],
    client_secret=config["google.client_secret"])

# redirect user to authorization page
my_redirect(client.flow.authorization_uri(state=my_state))

# get access token and make a resource request
c.request_token(response_dict)
c.request("/userinfo")

Supported Providers

The following OAuth2 providers have been (lightly) tested:

  • Facebook (include the test API)
  • Google
  • Foursquare
  • bitly
  • GitHub
  • StackExchange
  • Instagram

There is sample code for each in the example directory.

I decided to re-post this package as not only did the github repo URI change, but it underwent a ridiculously large refactor, going from roughly 470 LOC to 67 (looking nothing like the original)