{ "info": { "author": "Jupyter Development Team", "author_email": "jupyter@googlegroups.com", "bugtrack_url": null, "classifiers": [ "Intended Audience :: Developers", "Intended Audience :: Science/Research", "Intended Audience :: System Administrators", "License :: OSI Approved :: BSD License", "Programming Language :: Python", "Programming Language :: Python :: 3" ], "description": "# OAuthenticator\n\nOAuth + JupyterHub Authenticator = OAuthenticator\n\nOAuthenticator currently supports the following authentication services:\n\n- [Auth0](oauthenticator/auth0.py)\n- [Azure](#azure-setup)\n- [Bitbucket](oauthenticator/bitbucket.py)\n- [CILogon](oauthenticator/cilogon.py)\n- [GitHub](#github-setup)\n- [GitLab](#gitlab-setup)\n- [Globus](#globus-setup)\n- [Google](#google-setup)\n- [MediaWiki](oauthenticator/mediawiki.py)\n- [Moodle](#moodle-setup)\n- [Okpy](#okpyauthenticator)\n- [OpenShift](#openshift-setup)\n\nA [generic implementation](oauthenticator/generic.py), which you can use with\nany provider, is also available.\n\n## Examples\n\nFor an example docker image using OAuthenticator, see the [examples](examples)\ndirectory.\n\n[Another example](https://github.com/jupyterhub/dockerspawner/tree/master/examples/oauth)\nis using GitHub OAuth to spawn each user's server in a separate docker\ncontainer.\n\n## Installation\n\nInstall with pip:\n\n pip3 install oauthenticator\n\nOr clone the repo and do a dev install:\n\n git clone https://github.com/jupyterhub/oauthenticator.git\n cd oauthenticator\n pip3 install -e .\n\n## General setup\n\nThe first step is to tell JupyterHub to use your chosen OAuthenticator. Each\nauthenticator is provided in a submodule of `oauthenticator`, and each\nauthenticator has a variant with `Local` (e.g. `LocalGitHubOAuthenticator`),\nwhich will map OAuth usernames onto local system usernames.\n\n### Set chosen OAuthenticator\n\nIn `jupyterhub_config.py`, add:\n\n```python\nfrom oauthenticator.github import GitHubOAuthenticator\nc.JupyterHub.authenticator_class = GitHubOAuthenticator\n```\n\n### Set callback URL, client ID, and client secret\n\nAll OAuthenticators require setting a callback URL, client ID, and client\nsecret. You will generally get these when you register your OAuth application\nwith your OAuth provider. Provider-specific details are available in sections\nbelow. When registering your oauth application with your provider, you will\nprobably need to specify a callback URL.\nThe callback URL should look like:\n\n http[s]://[your-host]/hub/oauth_callback\n\nwhere `[your-host]` is where your server will be running. Such as\n`example.com:8000`.\n\nWhen JupyterHub runs, these values will be retrieved from the **environment variables**:\n\n```bash\n$OAUTH_CALLBACK_URL\n$OAUTH_CLIENT_ID\n$OAUTH_CLIENT_SECRET\n```\n\nYou can also set these values in your **configuration file**, `jupyterhub_config.py`:\n\n```python\nc.MyOAuthenticator.oauth_callback_url = 'http[s]://[your-host]/hub/oauth_callback'\nc.MyOAuthenticator.client_id = 'your-client-id'\nc.MyOAuthenticator.client_secret = 'your-client-secret'\n```\n\n\n## Azure Setup\n\n\n#### _Prereqs_:\n\n* Requires: **`PyJWT>=1.5.3`**\n\n```\n> pip3 install PyJWT\n```\n\n* BE SURE TO SET THE **`AAD_TENANT_ID`** environment variable\n\n```\n> export AAD_TENANT_ID='{AAD-TENANT-ID}'\n```\n\n* Sample code is provided for you in `examples > azuread > sample_jupyter_config.py` \n* Just add the code below to your `jupyterhub_config.py` file\n* Making sure to replace the values in `'{}'` with your APP, TENANT, DOMAIN, etc. values\n\n> ***Follow this [link to create an AAD APP](https://www.netiq.com/communities/cool-solutions/creating-application-client-id-client-secret-microsoft-azure-new-portal/)***\n\n> CLIENT_ID === Azure `Application ID` - found in `Azure portal --> AD --> App Registrations --> App`\n\n> TENANT_ID === Azure `Directory ID` - found in `Azure portal --> AD --> Properties`\n\n\n\n**jupyterhub_config.py:**\n\n```\nimport os\nfrom oauthenticator.azuread import AzureAdOAuthenticator\nc.JupyterHub.authenticator_class = AzureAdOAuthenticator\n\nc.Application.log_level = 'DEBUG'\n\nc.AzureAdOAuthenticator.tenant_id = os.environ.get('AAD_TENANT_ID')\n\nc.AzureAdOAuthenticator.oauth_callback_url = 'http://{your-domain}/hub/oauth_callback'\nc.AzureAdOAuthenticator.client_id = '{AAD-APP-CLIENT-ID}'\nc.AzureAdOAuthenticator.client_secret = '{AAD-APP-CLIENT-SECRET}'\n\n```\n\n#### _Run via_:\n\n```\nsudo jupyterhub -f ./path/to/jupyterhub_config.py\n```\n\n> See `run.sh` for an [example](./examples/azuread/)\n\n* [Source Code](oauthenticator/azuread.py)\n\n\n## GitHub Setup\n\nFirst, you'll need to create a [GitHub OAuth\napplication](https://github.com/settings/applications/new).\n\nThen, add the following to your `jupyterhub_config.py` file:\n\n from oauthenticator.github import GitHubOAuthenticator\n c.JupyterHub.authenticator_class = GitHubOAuthenticator\n\nYou can also use `LocalGitHubOAuthenticator` to map GitHub accounts onto local users.\n\nYou can use your own Github Enterprise instance by setting the `GITHUB_HOST` environment variable.\n\nYou can set `GITHUB_HTTP` environment variable to true or anything if your GitHub Enterprise supports http only.\n\nGitHub allows expanded capabilities by\nadding [GitHub-Specific Scopes](github_scope.md) to the requested token.\n\n## GitLab Setup\n\nFirst, you'll need to create a [GitLab OAuth\napplication](http://docs.gitlab.com/ce/integration/oauth_provider.html).\n\n\nThen, add the following to your `jupyterhub_config.py` file:\n\n from oauthenticator.gitlab import GitLabOAuthenticator\n c.JupyterHub.authenticator_class = GitLabOAuthenticator\n\nYou can also use `LocalGitLabOAuthenticator` to map GitLab accounts onto local users.\n\nYou can use your own GitLab CE/EE instance by setting the `GITLAB_HOST` environment\nflag.\n\n## Google Setup\n\nVisit https://console.developers.google.com to set up an OAuth client ID and secret. See [Google's documentation](https://developers.google.com/identity/protocols/OAuth2) on how to create OAUth 2.0 client credentials. The `Authorized JavaScript origins` should be set to to your hub's public address while `Authorized redirect URIs` should be set to the same but followed by `/hub/oauth_callback`.\n\nThen, add the following to your `jupyterhub_config.py` file:\n\n from oauthenticator.google import GoogleOAuthenticator\n c.JupyterHub.authenticator_class = GoogleOAuthenticator\n\nBy default, any domain is allowed to login but you can restrict authorized domains with a list (recommended):\n```python\nc.GoogleOAuthenticator.hosted_domain = ['mycollege.edu', 'mycompany.com']\n```\n\nYou can customize the sign in button text (optional):\n```python\nc.GoogleOAuthenticator.login_service = 'My College'\n```\n\n## OpenShift Setup\n\nIn case you have an OpenShift deployment with OAuth properly configured (see the\nfollowing sections for a quick reference), you should set the client ID and\nsecret by the environment variables `OAUTH_CLIENT_ID`, `OAUTH_CLIENT_SECRET` and\n`OAUTH_CALLBACK_URL`.\n\nPrior to OpenShift 4.0, the OAuth provider and REST API URL endpoints can\nbe specified by setting the single environment variable `OPENSHIFT_URL`. From\nOpenShift 4.0 onwards, these two endpoints are on different hosts. You need to\nset `OPENSHIFT_AUTH_API_URL` to the OAuth provider URL, and\n`OPENSHIFT_REST_API_URL` to the REST API URL endpoint.\n\nThe `OAUTH_CALLBACK_URL` should match `http[s]://[your-app-route]/hub/oauth_callback`\n\n\n### Global OAuth (admin)\n\nAs a cluster admin, you can create a global [OAuth client](https://docs.openshift.org/latest/architecture/additional_concepts/authentication.html#oauth-clients)\nin your OpenShift cluster creating a new OAuthClient object using the API:\n```\n$ oc create -f - <\nredirectURIs:\n- \nsecret: \nEOF\n```\n\n### Service Accounts as OAuth Clients\n\nAs a project member, you can use the [Service Accounts as OAuth Clients](https://docs.openshift.org/latest/architecture/additional_concepts/authentication.html#service-accounts-as-oauth-clients)\nscenario. This gives you the possibility of defining clients associated with\nservice accounts. You just need to create the service account with the\nproper annotations:\n```\n$ oc create -f - <\n annotations:\n serviceaccounts.openshift.io/oauth-redirecturi.1: ''\nEOF\n```\n\nIn this scenario your `OAUTH_CLIENT_ID` will be `system:serviceaccount::`,\nthe OAUTH_CLIENT_SECRET is the API token of the service account (`oc sa get-token `)\nand the OAUTH_CALLBACK_URL is the value of the annotation `serviceaccounts.openshift.io/oauth-redirecturi.1`.\nMore details can be found in the upstream documentation.\n\n## OkpyAuthenticator\n\n[Okpy](https://github.com/Cal-CS-61A-Staff/ok-client) is an auto-grading tool that\nis widely used in UC Berkeley EECS and Data Science courses. This authenticator\nenhances its support for Jupyter Notebook by enabling students to authenticate with\nthe [Hub](http://datahub.berkeley.edu/hub/home) first and saving relevant user states\nto the `env` (the feature is redacted until a secure state saving mechanism is developed).\n\n\n### Configuration\n\nIf you want to authenticate your Hub using OkpyAuthenticator, you need to specify\nthe authenticator class in your `jupyterhub_config.py` file:\n\n```python\nfrom oauthenticator.okpy import OkpyOAuthenticator\nc.JupyterHub.authenticator_class = OkpyOAuthenticator\n```\n\nand set your `OAUTH_` environment variables.\n\n## Globus Setup\n\nVisit https://developers.globus.org/ to set up your app. Ensure _Native App_ is\nunchecked and make sure the callback URL looks like:\n\n https://[your-host]/hub/oauth_callback\n\nSet scopes for authorization and transfer. The defaults include:\n\n openid profile urn:globus:auth:scope:transfer.api.globus.org:all\n\nSet the above settings in your `jupyterhub_config`:\n\n```python\n# Tell JupyterHub to create system accounts\nfrom oauthenticator.globus import LocalGlobusOAuthenticator\nc.JupyterHub.authenticator_class = LocalGlobusOAuthenticator\nc.LocalGlobusOAuthenticator.enable_auth_state = True\nc.LocalGlobusOAuthenticator.oauth_callback_url = 'https://[your-host]/hub/oauth_callback'\nc.LocalGlobusOAuthenticator.client_id = '[your app client id]'\nc.LocalGlobusOAuthenticator.client_secret = '[your app client secret]'\n```\n\nAlternatively you can set env variables for the following: `OAUTH_CALLBACK_URL`, `OAUTH_CLIENT_ID`,\nand `OAUTH_CLIENT_SECRET`. Setting `JUPYTERHUB_CRYPT_KEY` is required, and can be generated\nwith OpenSSL: `openssl rand -hex 32`\n\nYou are all set by this point! Be sure to check below for tweaking settings\nrelated to User Identity, Transfer, and additional security.\n\n### User Identity\n\nBy default, all users are restricted to their *Globus IDs* (example@globusid.org)\nwith the default Jupyterhub config:\n\n```python\nc.GlobusOAuthenticator.identity_provider = 'globusid.org'\n```\n\nIf you want to use a _Linked Identity_ such as `malcolm@universityofindependence.edu`,\ngo to your [App Developer page](http://developers.globus.org) and set\n*Required Identity Provider* for your app to ``, and set the\nfollowing in the config:\n\n```python\nc.GlobusOAuthenticator.identity_provider = 'universityofindependence.edu'\n```\n\n### Globus Scopes and Transfer\n\nThe default configuration will automatically setup user environments with tokens,\nallowing them to start up python notebooks and initiate Globus Transfers. If you\nwant to transfer data onto your JupyterHub server, it's suggested you install\n[Globus Connect Server](https://docs.globus.org/globus-connect-server-installation-guide/#install_section) and add the `globus_local_endpoint` uuid below. If you want\nto change other behavior, you can modify the defaults below:\n\n```python\n# Allow Refresh Tokens in user notebooks. Disallow these for increased security,\n# allow them for better usability.\nc.LocalGlobusOAuthenticator.allow_refresh_tokens = True\n# Default scopes are below if unspecified. Add a custom transfer server if you have one.\nc.LocalGlobusOAuthenticator.scope = ['openid', 'profile', 'urn:globus:auth:scope:transfer.api.globus.org:all']\n# Default tokens excluded from being passed into the spawner environment\nc.LocalGlobusOAuthenticator.exclude_tokens = ['auth.globus.org']\n# If the JupyterHub server is an endpoint, for convenience the endpoint id can be\n# set here. It will show up in the notebook kernel for all users as 'GLOBUS_LOCAL_ENDPOINT'.\nc.LocalGlobusOAuthenticator.globus_local_endpoint = ''\n# Set a custom logout URL for your identity provider\nc.LocalGlobusOAuthenticator.logout_redirect_url = 'https://auth.globus.org/v2/web/logout'\n# For added security, revoke all service tokens when users logout. (Note: users must start\n# a new server to get fresh tokens, logging out does not shut it down by default)\nc.LocalGlobusOAuthenticator.revoke_tokens_on_logout = False\n```\n\nIf you only want to authenticate users with their Globus IDs but don't want to\nallow them to do transfers, you can remove `urn:globus:auth:scope:transfer.api.globus.org:all`.\nConversely, you can add an additional scope for another transfer server if you wish.\n\nUse `c.GlobusOAuthenticator.exclude` to prevent tokens from being passed into a\nusers environment. By default, `auth.globus.org` is excluded but `transfer.api.globus.org`\nis allowed. If you want to disable transfers, modify `c.GlobusOAuthenticator.scope`\ninstead of `c.GlobusOAuthenticator.exclude` to avoid procuring unnecessary tokens.\n\n## Moodle Setup\n\nFirst install the [OAuth2 Server Plugin](https://github.com/projectestac/moodle-local_oauth) for Moodle.\n\nUse the `GenericOAuthenticator` for Jupyterhub by editing your `jupyterhub_config.py` accordingly:\n\n```python\nfrom oauthenticator.generic import GenericOAuthenticator\nc.JupyterHub.authenticator_class = GenericOAuthenticator\n\nc.GenericOAuthenticator.oauth_callback_url = 'http://YOUR-JUPYTERHUB.com/hub/oauth_callback'\nc.GenericOAuthenticator.client_id = 'MOODLE-CLIENT-ID'\nc.GenericOAuthenticator.client_secret = 'MOODLE-CLIENT-SECRET-KEY'\nc.GenericOAuthenticator.login_service = 'NAME-OF-SERVICE'\nc.GenericOAuthenticator.userdata_url = 'http://YOUR-MOODLE-DOMAIN.com/local/oauth/user_info.php'\nc.GenericOAuthenticator.token_url = 'http://YOUR-MOODLE-DOMAIN.com/local/oauth/token.php'\nc.GenericOAuthenticator.userdata_method = 'POST'\nc.GenericOAuthenticator.extra_params = {\n 'scope': 'user_info',\n 'client_id': 'MOODLE-CLIENT-ID',\n 'client_secret': 'MOODLE-CLIENT-SECRET-KEY'}\n```\n\nAnd set your environmental variable `OAUTH2_AUTHORIZE_URL` to:\n\n`http://YOUR-MOODLE-DOMAIN.com/local/oauth/login.php?client_id=MOODLE-CLIENT-ID&response_type=code`\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://jupyter.org", "keywords": "Interactive,Interpreter,Shell,Web", "license": "BSD", "maintainer": "", "maintainer_email": "", "name": "oauthenticator", "package_url": "https://pypi.org/project/oauthenticator/", "platform": "Linux", "project_url": "https://pypi.org/project/oauthenticator/", "project_urls": { "Homepage": "https://jupyter.org" }, "release_url": "https://pypi.org/project/oauthenticator/0.9.0/", "requires_dist": [ "jupyterhub (>=0.5)" ], "requires_python": ">=3.5", "summary": "OAuthenticator: Authenticate JupyterHub users with common OAuth providers", "version": "0.9.0" }, "last_serial": 5609584, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "8633309e06bab05b1e765407f556d1eb", "sha256": "466f760eddae61b6bb04b8b9e4687455ef3be9c7042d3fcb605c2a51608114c0" }, "downloads": -1, "filename": "oauthenticator-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "8633309e06bab05b1e765407f556d1eb", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 10663, "upload_time": "2015-12-22T13:52:55", "url": "https://files.pythonhosted.org/packages/2c/4c/3dbccc1cfae23a747dd8a345d53f7957da20e611dfb6108dca38d7c38760/oauthenticator-0.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a516369488b75aa336baadcb061ba936", "sha256": "459b8a98641ab712211a382988b3758d472de9b4559f76a7825462c34f732b3a" }, "downloads": -1, "filename": "oauthenticator-0.1.0.tar.gz", "has_sig": false, "md5_digest": "a516369488b75aa336baadcb061ba936", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10287, "upload_time": "2015-12-22T13:53:03", "url": "https://files.pythonhosted.org/packages/00/e8/825f4650f5574524e9cfbbaa3b7c657755a1b2c1dcaea27d3e225336f985/oauthenticator-0.1.0.tar.gz" }, { "comment_text": "", "digests": { "md5": "6331d9b031da3fbe24b0af3fb0637e24", "sha256": "6b20305f2f23d909866dfe5daa197a142066b7fc45d89be4aa6ef65ae438c174" }, "downloads": -1, "filename": "oauthenticator-0.1.0.zip", "has_sig": false, "md5_digest": "6331d9b031da3fbe24b0af3fb0637e24", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15270, "upload_time": "2015-12-22T13:53:19", "url": "https://files.pythonhosted.org/packages/a6/1b/29c0918cd817faba3605438f0cbbe5f1243e674f39d76050dcc58ae3208e/oauthenticator-0.1.0.zip" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "1a314790737f45cc375a5f69a0580fdd", "sha256": "1b56c9f4a786e9b1377cfa4098226b34a1b39a1c2b91bb7ea1d9042ea10fa008" }, "downloads": -1, "filename": "oauthenticator-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "1a314790737f45cc375a5f69a0580fdd", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 12190, "upload_time": "2016-01-04T11:09:21", "url": "https://files.pythonhosted.org/packages/19/32/d867507ee1b65af6f10cd3e12fa59c0740222ec4771f4a7a269cf29bf701/oauthenticator-0.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9432d21502985a5a785f7959e8def2c4", "sha256": "8153220776413f35bb241ddcfd92e49fd3a57d7b2e87ef748f8592a6a12a04e0" }, "downloads": -1, "filename": "oauthenticator-0.2.0.tar.gz", "has_sig": false, "md5_digest": "9432d21502985a5a785f7959e8def2c4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11317, "upload_time": "2016-01-04T11:09:32", "url": "https://files.pythonhosted.org/packages/90/d9/fd782d5ce23ace882b4b032efac9a6b3d09c1a0d94d4f7e6d088b0c01b61/oauthenticator-0.2.0.tar.gz" }, { "comment_text": "", "digests": { "md5": "b34645acfffd38d29c93225f9b635bd4", "sha256": "047695340b27e324ef4c5ce1d0085eef983b1a05b9f0268c0f44a6128a5685a4" }, "downloads": -1, "filename": "oauthenticator-0.2.0.zip", "has_sig": false, "md5_digest": "b34645acfffd38d29c93225f9b635bd4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16797, "upload_time": "2016-01-04T11:09:46", "url": "https://files.pythonhosted.org/packages/db/e3/42fde595ac1accd821d3744f5546f8435688909d42be4df50f6135f321f1/oauthenticator-0.2.0.zip" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "082762c2a27c5a78a8f38d7c2d21125d", "sha256": "9a23c3da35c4e49e009097c39c7226bdf12c89426ce71634621c3978e72e615e" }, "downloads": -1, "filename": "oauthenticator-0.3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "082762c2a27c5a78a8f38d7c2d21125d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 13968, "upload_time": "2016-04-20T20:54:24", "url": "https://files.pythonhosted.org/packages/36/9c/ef76ea9e6a32b1e5073458198d7aecc988131d9dbe0dc6d634deaad92e13/oauthenticator-0.3.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "456bed1c6a9137e8bacd7c160239c5ec", "sha256": "9b538e9d85e6e6aee01c6e59dad2d0043226a25764d458d16c75f6e8b38f12db" }, "downloads": -1, "filename": "oauthenticator-0.3.0.tar.gz", "has_sig": false, "md5_digest": "456bed1c6a9137e8bacd7c160239c5ec", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12658, "upload_time": "2016-04-20T20:54:31", "url": "https://files.pythonhosted.org/packages/3f/40/1206b6763a82795e45cdab92637945b846024d71082fee9098079248e094/oauthenticator-0.3.0.tar.gz" }, { "comment_text": "", "digests": { "md5": "c7634bbf594f9e180b66cea4da2e0ab6", "sha256": "ce5c90314641c76eefebe3bff7f51f70766d022ee8cbc42bc0f4c662fcd5a6ad" }, "downloads": -1, "filename": "oauthenticator-0.3.0.zip", "has_sig": false, "md5_digest": "c7634bbf594f9e180b66cea4da2e0ab6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18867, "upload_time": "2016-04-20T20:54:36", "url": "https://files.pythonhosted.org/packages/9c/9b/236e973d017c6138dd3b1dccd1c2a9292dd4714fd919963eb3c5fe6eb582/oauthenticator-0.3.0.zip" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "695e8fae44c1d768760a34171052ee42", "sha256": "e05f35382b681b19014aba1e54d03f1f4038d809f0e86a57ed879377acc5497b" }, "downloads": -1, "filename": "oauthenticator-0.4.0-py3-none-any.whl", "has_sig": false, "md5_digest": "695e8fae44c1d768760a34171052ee42", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 13775, "upload_time": "2016-05-11T07:54:09", "url": "https://files.pythonhosted.org/packages/84/08/94e4813ea63910f0155e2be3a393c74f13d2e5dee6cdeaf21a93314eebf6/oauthenticator-0.4.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "125cf9c43745430cb0d090987a44b41c", "sha256": "dd36671685c2c029e153d28e747530a29a2412b0d913471ac18c1b1b8f0cb3af" }, "downloads": -1, "filename": "oauthenticator-0.4.0.tar.gz", "has_sig": false, "md5_digest": "125cf9c43745430cb0d090987a44b41c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12578, "upload_time": "2016-05-11T07:54:20", "url": "https://files.pythonhosted.org/packages/70/68/d07612bb594ed7bdaae78b1d09a02582e50aa688c2e78f0cfb45288c25f1/oauthenticator-0.4.0.tar.gz" } ], "0.4.1": [ { "comment_text": "", "digests": { "md5": "1c40b32b363801ccfc20a90800bf9d2b", "sha256": "9341a8aead901f20b19ee5589b59658a7a49daf9f8a397bdc0efb4e3d45a57c2" }, "downloads": -1, "filename": "oauthenticator-0.4.1-py3-none-any.whl", "has_sig": false, "md5_digest": "1c40b32b363801ccfc20a90800bf9d2b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 13782, "upload_time": "2016-05-18T08:13:00", "url": "https://files.pythonhosted.org/packages/25/53/3105a45d3c22f67b09b8cff27ecfd43acbb0469fe72cfda8fb55f3a9cae1/oauthenticator-0.4.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "29db7145f9ceb6e2ed02e62c68161c81", "sha256": "facaff4a9f9d499c56f67f6d6e5c4500acdf67122fde21cb0f15c695d8be9acf" }, "downloads": -1, "filename": "oauthenticator-0.4.1.tar.gz", "has_sig": false, "md5_digest": "29db7145f9ceb6e2ed02e62c68161c81", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12628, "upload_time": "2016-05-18T08:13:42", "url": "https://files.pythonhosted.org/packages/6e/45/924ce726971fa6534da33821c666e9b8c906351b85df735a2ab4581d78b5/oauthenticator-0.4.1.tar.gz" } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "1283e8af5a230da78ef9b52150365721", "sha256": "a3d7baa1e7cecd489ae7f9990b1949ca3a5939408d42602c2feb933f4740c38f" }, "downloads": -1, "filename": "oauthenticator-0.5.0-py3-none-any.whl", "has_sig": false, "md5_digest": "1283e8af5a230da78ef9b52150365721", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 15195, "upload_time": "2016-09-02T13:31:30", "url": "https://files.pythonhosted.org/packages/15/7d/f28f15a891e72b34df74a880f22b87ac028cc908d4c561d3bbe6f5caa474/oauthenticator-0.5.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f23c9e8f30585bcfbebc86393bce7d5b", "sha256": "1784ffb95dde8430a5fc741816ae9c57e5bff107e9a989d3776a3cc16795cd21" }, "downloads": -1, "filename": "oauthenticator-0.5.0.tar.gz", "has_sig": false, "md5_digest": "f23c9e8f30585bcfbebc86393bce7d5b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13383, "upload_time": "2016-09-02T13:31:32", "url": "https://files.pythonhosted.org/packages/1b/f3/abf50fcd144231ebf0bb63e07f187791e95b3a57963dc4d6dbb92de05e86/oauthenticator-0.5.0.tar.gz" } ], "0.5.1": [ { "comment_text": "", "digests": { "md5": "940a083a6a88c9cd8934301dfc343e1b", "sha256": "dc3b75e1f155254825fade57ee203f103b09855e74e28b7aa5f093d18a30b44f" }, "downloads": -1, "filename": "oauthenticator-0.5.1-py3-none-any.whl", "has_sig": false, "md5_digest": "940a083a6a88c9cd8934301dfc343e1b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 15233, "upload_time": "2016-10-05T11:45:03", "url": "https://files.pythonhosted.org/packages/7d/5c/b5fc08900a6b670b1389560576faa30268768a5fb10549cc7f38ec1f5991/oauthenticator-0.5.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b55cee43e646507aa49d2edeedc820bc", "sha256": "ab7ad2671c47f9e30b0d160f42ab2186d4ab077c692a4d6bdfa3f0b11d3bacbb" }, "downloads": -1, "filename": "oauthenticator-0.5.1.tar.gz", "has_sig": false, "md5_digest": "b55cee43e646507aa49d2edeedc820bc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13459, "upload_time": "2016-10-05T11:45:05", "url": "https://files.pythonhosted.org/packages/8b/87/3a7228d3ed2db15fe1f727f8e0415cf02e484adefd87ebc9bb9ee33e65cf/oauthenticator-0.5.1.tar.gz" } ], "0.6.0": [ { "comment_text": "", "digests": { "md5": "68330b9f02e2a645e617f21595e2f99a", "sha256": "2c7e8524ed70e3a11935dbbe5c77452226a49fdf518bdcd4555ee92075b9e7a7" }, "downloads": -1, "filename": "oauthenticator-0.6.0-py3-none-any.whl", "has_sig": false, "md5_digest": "68330b9f02e2a645e617f21595e2f99a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 25724, "upload_time": "2017-07-27T14:51:09", "url": "https://files.pythonhosted.org/packages/b9/03/daee2455ad198f88738b67e936469010f41c6fe143f409952420391e92d7/oauthenticator-0.6.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d0ac8ac9036126857e693e99d76b14ac", "sha256": "fca141b18d4ad88b2eb8ec61e1472660751722f1b8334d53f4da348224e42d87" }, "downloads": -1, "filename": "oauthenticator-0.6.0.tar.gz", "has_sig": false, "md5_digest": "d0ac8ac9036126857e693e99d76b14ac", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22698, "upload_time": "2017-07-27T14:51:11", "url": "https://files.pythonhosted.org/packages/da/34/783a0ef3993ee52a5839882b0af841c907e9e0c8c9d55b10c206e2ac8ede/oauthenticator-0.6.0.tar.gz" } ], "0.6.1": [ { "comment_text": "", "digests": { "md5": "f2d6605806f69a72ec20310405c7442e", "sha256": "12dbb63beeaefc2150323a3469ef3217f687f20ec5cd6342f436aac178e68e10" }, "downloads": -1, "filename": "oauthenticator-0.6.1-py3-none-any.whl", "has_sig": false, "md5_digest": "f2d6605806f69a72ec20310405c7442e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 26246, "upload_time": "2017-08-11T14:35:50", "url": "https://files.pythonhosted.org/packages/a4/90/97cc63d20f601a100f80d04253b1757884d13841297c57e1a49e3fdb3960/oauthenticator-0.6.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f72315e7a595e2d836235ad373002f16", "sha256": "f8af02e4615ff4458f9b911afc845ca1a72716bc6b1080b063b50941d484db2c" }, "downloads": -1, "filename": "oauthenticator-0.6.1.tar.gz", "has_sig": false, "md5_digest": "f72315e7a595e2d836235ad373002f16", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23465, "upload_time": "2017-08-11T14:35:51", "url": "https://files.pythonhosted.org/packages/9e/1f/92e34421a4a4aaef75cdc6819ff54340265b78abaffa0d1a4c81699c2508/oauthenticator-0.6.1.tar.gz" } ], "0.6.2": [ { "comment_text": "", "digests": { "md5": "816bbaf07d7a0d858b1c74a71fde0575", "sha256": "40a4f4d3d9db3ae925b41053f1ff8c53152c40bc1c221ff95524b8a844aad31a" }, "downloads": -1, "filename": "oauthenticator-0.6.2-py3-none-any.whl", "has_sig": false, "md5_digest": "816bbaf07d7a0d858b1c74a71fde0575", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 26032, "upload_time": "2018-02-16T21:53:08", "url": "https://files.pythonhosted.org/packages/01/ac/830ad20c8bbb32d4ca2a4edf73bb12b2b6fc674e99f2b60fe6c80badc1f2/oauthenticator-0.6.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ab1571bf54f7e598be862c0e31c2b9b3", "sha256": "7dd3e1ab7238ae62746e969160f204e2f247345eed0e6a6e3c68bf3f831bc310" }, "downloads": -1, "filename": "oauthenticator-0.6.2.tar.gz", "has_sig": false, "md5_digest": "ab1571bf54f7e598be862c0e31c2b9b3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23428, "upload_time": "2018-02-16T21:53:12", "url": "https://files.pythonhosted.org/packages/e6/cf/cd8e7752a526ee972849f1ec6260fa48f53a75cfadb09f01ae958907ddd6/oauthenticator-0.6.2.tar.gz" } ], "0.7.0": [ { "comment_text": "", "digests": { "md5": "b7b003d7fb1274f9516cd96362a70915", "sha256": "51703aff5a1b19ae25590da20232c66395761ed68651ec892716d0bcf73ff452" }, "downloads": -1, "filename": "oauthenticator-0.7.0-py3-none-any.whl", "has_sig": false, "md5_digest": "b7b003d7fb1274f9516cd96362a70915", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 26253, "upload_time": "2017-10-03T11:46:21", "url": "https://files.pythonhosted.org/packages/32/d9/7a82161ab611818f7f6629ef8249f587b9e01bc65dde2d306f49fe96b0f0/oauthenticator-0.7.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fa331baa9d5a12016f4fd036b82d56b2", "sha256": "25637f4b61d9c1acdb6ce15bf8f39c3e4dfa9e6df2e846a5062460e74193b807" }, "downloads": -1, "filename": "oauthenticator-0.7.0.tar.gz", "has_sig": false, "md5_digest": "fa331baa9d5a12016f4fd036b82d56b2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21691, "upload_time": "2017-10-03T11:46:23", "url": "https://files.pythonhosted.org/packages/c7/1a/a38f415ecef650efded744955b7b2f353198db12371fdd7eb79331f6a101/oauthenticator-0.7.0.tar.gz" } ], "0.7.1": [ { "comment_text": "", "digests": { "md5": "4063836ef9654ab3727181d06d814311", "sha256": "b24e6c0f9bbaac29d6fa45a27d345daefb7af8954fadb362099a91462c3b2bb6" }, "downloads": -1, "filename": "oauthenticator-0.7.1-py3-none-any.whl", "has_sig": false, "md5_digest": "4063836ef9654ab3727181d06d814311", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 26250, "upload_time": "2017-10-04T12:16:19", "url": "https://files.pythonhosted.org/packages/f2/3c/b07ae4bf5d0658de05008e2fe813a1b1d47a4dfec573adfbeca6606864ff/oauthenticator-0.7.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "94e2c94acfd2c93eec46da3eb06dbc10", "sha256": "653d8e1e8ca75b34522c0cc0e3e31994c25e37b1bee5516be0b746002aa13983" }, "downloads": -1, "filename": "oauthenticator-0.7.1.tar.gz", "has_sig": false, "md5_digest": "94e2c94acfd2c93eec46da3eb06dbc10", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21755, "upload_time": "2017-10-04T12:16:21", "url": "https://files.pythonhosted.org/packages/df/07/b6ca294c3eaa7bc8bc7cf53a8d18176beb18e9516b08154e07d47a138009/oauthenticator-0.7.1.tar.gz" } ], "0.7.2": [ { "comment_text": "", "digests": { "md5": "2e4a435f003f7ab23493fdcc5ef4b6f6", "sha256": "5a614c5bafdf3d7a7098e9925953df8c84afcccdfdafce1243c7aa675be8a6fd" }, "downloads": -1, "filename": "oauthenticator-0.7.2-py3-none-any.whl", "has_sig": false, "md5_digest": "2e4a435f003f7ab23493fdcc5ef4b6f6", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 26377, "upload_time": "2017-10-27T15:01:23", "url": "https://files.pythonhosted.org/packages/3d/74/968e637568b4ce18a05646d10c875ba690c4cb9820b4cd2f29ed6dac0b28/oauthenticator-0.7.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "696c2f0def834e4a60f5c7c712aaf217", "sha256": "a52cc22c4bbb41b3c54b187c056a436aecd7c3e4a65bd1540fb2eb13e3308f66" }, "downloads": -1, "filename": "oauthenticator-0.7.2.tar.gz", "has_sig": false, "md5_digest": "696c2f0def834e4a60f5c7c712aaf217", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22494, "upload_time": "2017-10-27T15:01:24", "url": "https://files.pythonhosted.org/packages/5d/5e/481d632c7ce2842087591b7cc2e97c5765bb50d72e89ec8e9851b9cda482/oauthenticator-0.7.2.tar.gz" } ], "0.7.3": [ { "comment_text": "", "digests": { "md5": "289b483ae71e87c93d3383d36b83240a", "sha256": "60853edbc79df2f9b0702fd35d110904340777716dfd809bc72d9e4259b9fdb2" }, "downloads": -1, "filename": "oauthenticator-0.7.3-py3-none-any.whl", "has_sig": false, "md5_digest": "289b483ae71e87c93d3383d36b83240a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 26118, "upload_time": "2018-02-16T21:53:10", "url": "https://files.pythonhosted.org/packages/aa/e1/fddca666b1ad2c24e3e03e03e5fa73db3d07ff50679971992437fcb99a08/oauthenticator-0.7.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a8e16bfb5cb1aa5a9de15222af242fea", "sha256": "cb0b2564e46db28350693bc3e6457333c4ee21af5066ac743730e3f3173ea7ed" }, "downloads": -1, "filename": "oauthenticator-0.7.3.tar.gz", "has_sig": false, "md5_digest": "a8e16bfb5cb1aa5a9de15222af242fea", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22515, "upload_time": "2018-02-16T21:53:13", "url": "https://files.pythonhosted.org/packages/c6/7c/e4a80f5382b7b9000783bffdf0174dcd901c52ef934f9dec4b3eba3c60b9/oauthenticator-0.7.3.tar.gz" } ], "0.8.0": [ { "comment_text": "", "digests": { "md5": "f4dbdc98f178160738b9abd607e596e9", "sha256": "6e6feffe675d8c4629b7f793c3912c155b6bc67ca78c3b0e87cd85bd50aa5ae7" }, "downloads": -1, "filename": "oauthenticator-0.8.0-py3-none-any.whl", "has_sig": false, "md5_digest": "f4dbdc98f178160738b9abd607e596e9", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 32324, "upload_time": "2018-08-11T12:47:14", "url": "https://files.pythonhosted.org/packages/9d/60/cbe06e8e4113120e018b287ebb18d0c3c626e75fc1fa29e705fd7d4a0ce0/oauthenticator-0.8.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "cd359fa6142b2645ac8cb8aab61f0841", "sha256": "39908f01cda98186c0fedc350b68342d6016ee325615f4c8475c1e64a55d9e4f" }, "downloads": -1, "filename": "oauthenticator-0.8.0.tar.gz", "has_sig": false, "md5_digest": "cd359fa6142b2645ac8cb8aab61f0841", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 30924, "upload_time": "2018-08-11T12:47:16", "url": "https://files.pythonhosted.org/packages/b7/0d/877004b115607dec17abf8ac5724e41100d0fbf2651fd6e43ee3bac54ab9/oauthenticator-0.8.0.tar.gz" } ], "0.8.1": [ { "comment_text": "", "digests": { "md5": "3bae34697e477d77e9fa10a2ffaa341a", "sha256": "dcfec9d0af28893951eaa9dbd1a53e45f2ca8d59c0b0dc4d0ecdbb731c6e2557" }, "downloads": -1, "filename": "oauthenticator-0.8.1-py3-none-any.whl", "has_sig": false, "md5_digest": "3bae34697e477d77e9fa10a2ffaa341a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 34987, "upload_time": "2019-02-28T12:12:12", "url": "https://files.pythonhosted.org/packages/2a/3b/81e2e8adbbf2e2efee97ca75dcca5393c1838f97517b4f6831ac4171b235/oauthenticator-0.8.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d52574e9b504ecf185e57bba24c88ef4", "sha256": "f174c7b2fa20028717aa10e778f66ffa896a2fbcb2ee8a78b135d5aa8a5d56ff" }, "downloads": -1, "filename": "oauthenticator-0.8.1.tar.gz", "has_sig": false, "md5_digest": "d52574e9b504ecf185e57bba24c88ef4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 32902, "upload_time": "2019-02-28T12:12:13", "url": "https://files.pythonhosted.org/packages/ab/8a/e28f36a483f185f88bdb7f5591869b5bb4e9e50b3bd2a78c2cfe1379357f/oauthenticator-0.8.1.tar.gz" } ], "0.8.2": [ { "comment_text": "", "digests": { "md5": "d10976095ba3a5e4012d18fbb7b25e62", "sha256": "fb34f35b3e158bdf5d6c90a7cb139c4efb9f2cd1de5fd145bf8a8a37b5a8ac25" }, "downloads": -1, "filename": "oauthenticator-0.8.2-py3-none-any.whl", "has_sig": false, "md5_digest": "d10976095ba3a5e4012d18fbb7b25e62", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 35209, "upload_time": "2019-04-16T14:36:00", "url": "https://files.pythonhosted.org/packages/ae/6e/381e28f0b19052f696ec57cf1e909fd45bf7dad1078069050db50a88aae0/oauthenticator-0.8.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "132ce0ac7084a08f49bd1f2338a4fef5", "sha256": "5195b5d66808787894590926b038381eb47495c9df4fd0d907c84d86cb35132f" }, "downloads": -1, "filename": "oauthenticator-0.8.2.tar.gz", "has_sig": false, "md5_digest": "132ce0ac7084a08f49bd1f2338a4fef5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 33182, "upload_time": "2019-04-16T14:36:01", "url": "https://files.pythonhosted.org/packages/50/f9/6107ceb8a1739e2aa99b54ff206ab2ab27d76135e0f9310c6d137317c1fa/oauthenticator-0.8.2.tar.gz" } ], "0.9.0": [ { "comment_text": "", "digests": { "md5": "c1d11b2eaa912abd1064e976a14e8478", "sha256": "1dca872f460c335105c06695d904ca8f56159116695464e9c18763778975fdbc" }, "downloads": -1, "filename": "oauthenticator-0.9.0-py3-none-any.whl", "has_sig": false, "md5_digest": "c1d11b2eaa912abd1064e976a14e8478", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 35485, "upload_time": "2019-07-30T19:17:58", "url": "https://files.pythonhosted.org/packages/12/e3/3c197a335322ba68d9a609cfbf396a8387a0070e5ba2b84b18bfa1a7e3a9/oauthenticator-0.9.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8fd411dde3055ed27e842dd9c9e256c0", "sha256": "0ce31c929bb456ad8734b9b8a7f539e44ab3afff07169e25e974ca576f4c836c" }, "downloads": -1, "filename": "oauthenticator-0.9.0.tar.gz", "has_sig": false, "md5_digest": "8fd411dde3055ed27e842dd9c9e256c0", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 33641, "upload_time": "2019-07-30T19:18:00", "url": "https://files.pythonhosted.org/packages/63/9d/6f4a9f12cf78bf1024bb153d655fccd3c3dfbe37c75f565819ae84bb9caa/oauthenticator-0.9.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "c1d11b2eaa912abd1064e976a14e8478", "sha256": "1dca872f460c335105c06695d904ca8f56159116695464e9c18763778975fdbc" }, "downloads": -1, "filename": "oauthenticator-0.9.0-py3-none-any.whl", "has_sig": false, "md5_digest": "c1d11b2eaa912abd1064e976a14e8478", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 35485, "upload_time": "2019-07-30T19:17:58", "url": "https://files.pythonhosted.org/packages/12/e3/3c197a335322ba68d9a609cfbf396a8387a0070e5ba2b84b18bfa1a7e3a9/oauthenticator-0.9.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8fd411dde3055ed27e842dd9c9e256c0", "sha256": "0ce31c929bb456ad8734b9b8a7f539e44ab3afff07169e25e974ca576f4c836c" }, "downloads": -1, "filename": "oauthenticator-0.9.0.tar.gz", "has_sig": false, "md5_digest": "8fd411dde3055ed27e842dd9c9e256c0", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 33641, "upload_time": "2019-07-30T19:18:00", "url": "https://files.pythonhosted.org/packages/63/9d/6f4a9f12cf78bf1024bb153d655fccd3c3dfbe37c75f565819ae84bb9caa/oauthenticator-0.9.0.tar.gz" } ] }