{ "info": { "author": "Dmitrii Lapshukov", "author_email": "lapshukov@gmail.com", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 3" ], "description": "[![CircleCI](https://circleci.com/gh/dmi3y/flask-jwt-consumer.svg?style=svg)](https://circleci.com/gh/dmi3y/flask-jwt-consumer) [![Maintainability](https://api.codeclimate.com/v1/badges/2012c48af0e1d47d7f3a/maintainability)](https://codeclimate.com/github/dmi3y/flask-jwt-consumer/maintainability)\n\n## Flask JWT consumer\n\n> Flask extension for JWT token validation\n\nBased on [pyJWT](https://github.com/jpadilla/pyjwt). Supports multi public key validation in form of simplified `authorized_keys` format, with only keys, and comments, no options. Good for key rotations or when you need multi issuer support.\n\n### Rational\nInspired by [Flask JWT Simple](https://github.com/vimalloc/flask-jwt-simple), nice package I was enjoying until the need for multi key support. So that's where many backward compatible settings came from.\n\n### Configuration\n\n- `JWT_ALGORITHM` default `RS256`, algorithm used to decode JWT. As current iteration only asymmetric algorithms are considered. So anything symmetric will likely fail.\n- `JWT_HEADER_NAME` default `Authorization`, header where JWT expected to be.\n- `JWT_HEADER_TYPE` default `Bearer`, type of the token, part of the header's value.\n- `JWT_IDENTITY` optional, if provided JWT will use it.\n- `JWT_AUTHORIZED_KEYS` new line separated list of OpenSSH formatted keys.\n- `VERIFY_AUD` disable verification of `aud` during JWT decoding.\n\n### Decorators\n\n*@requires_jwt* - use on the flask endpoint that is desired to be protected, accepts additional parameter `pass_token_payload` which will add named parameter `token_payload` at the very end of the parameters accepted by decorated function.\n\n```py\n@requires_jwt\ndef get(search):\n # ...GET logic with search parameter\n\n@requires_jwt(pass_token_payload=True)\ndef post(data, token_payload):\n # ...POST logic with data parameter and token payload\n```\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://github.com/dmi3y/flask-jwt-consumer", "keywords": "jwt,jwt-consumer,jwt-validation,authentication,autherization,multi-issuer", "license": "", "maintainer": "", "maintainer_email": "", "name": "flask-jwt-consumer", "package_url": "https://pypi.org/project/flask-jwt-consumer/", "platform": "", "project_url": "https://pypi.org/project/flask-jwt-consumer/", "project_urls": { "Homepage": "https://github.com/dmi3y/flask-jwt-consumer" }, "release_url": "https://pypi.org/project/flask-jwt-consumer/1.1.0/", "requires_dist": [ "Flask", "PyJWT", "cryptography" ], "requires_python": "", "summary": "Flask JWT consumer with multi public key support", "version": "1.1.0" }, "last_serial": 5575814, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "ee776ae0182ddf2dd16d9d8973f45f4a", "sha256": "b32ef793f472b5c2b5ee45b4e4c698a325d923020f40580576817c28076aede2" }, "downloads": -1, "filename": "flask_jwt_consumer-0.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "ee776ae0182ddf2dd16d9d8973f45f4a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 4271, "upload_time": "2018-07-18T19:36:14", "url": "https://files.pythonhosted.org/packages/79/fd/92f8a6c04e2c0284176baa053749883119d82a823d91857bc81b8e7bd808/flask_jwt_consumer-0.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "10f51bc6d7dee53f69c9b0e89524ced3", "sha256": "61ca9984b39e8a7246a299a8184f0eb8227a752df15d5a4831a215b6821ae77d" }, "downloads": -1, "filename": "flask_jwt_consumer-0.0.1.tar.gz", "has_sig": false, "md5_digest": "10f51bc6d7dee53f69c9b0e89524ced3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3595, "upload_time": "2018-07-18T19:36:15", "url": "https://files.pythonhosted.org/packages/3a/a7/55b26354ec42eff351c5f99a7f26502d2e6e7f9c4745cd5d56c3d70bdd04/flask_jwt_consumer-0.0.1.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "78f7818286431ccb1880948b9e257b1d", "sha256": "fd0789d179011dd0a26d5128209212ac953c874681d38508bf7829dc5f55a2e6" }, "downloads": -1, "filename": "flask_jwt_consumer-0.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "78f7818286431ccb1880948b9e257b1d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 4272, "upload_time": "2018-07-19T18:31:30", "url": "https://files.pythonhosted.org/packages/81/6e/f7bf4051908796cf8189489fa67b0571ebf4a4599043ea7f980345c2499b/flask_jwt_consumer-0.0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "eaec51cb8a0910cbfa081581c85ace83", "sha256": "f9c7e8aa5e1d33b869ab529818b54acdf5362438435d31d1709900dc552562bc" }, "downloads": -1, "filename": "flask_jwt_consumer-0.0.2.tar.gz", "has_sig": false, "md5_digest": "eaec51cb8a0910cbfa081581c85ace83", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3593, "upload_time": "2018-07-19T18:31:32", "url": "https://files.pythonhosted.org/packages/a2/d3/84337ae1c94d77247c55201a198d16497f1df53b79eb3cc9e0519cb709d4/flask_jwt_consumer-0.0.2.tar.gz" } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "c5f3765324f05c3e77643d1d92404a0d", "sha256": "368bb2052b28099f9246130a1cf95ec107bae27544165360f82d29e5cfe37f79" }, "downloads": -1, "filename": "flask_jwt_consumer-0.0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "c5f3765324f05c3e77643d1d92404a0d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 4389, "upload_time": "2018-07-19T18:37:08", "url": "https://files.pythonhosted.org/packages/3f/72/8a90dbf92ee1489f632b261743df7f12d9137176399131dbe0f08d1d34d4/flask_jwt_consumer-0.0.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fab2572e9139eec27ea3705cb5c854ba", "sha256": "2b08fb8d7cac27143fcdcfc5c87bef628cafb5ccd6b721fb00c6f4738d428252" }, "downloads": -1, "filename": "flask_jwt_consumer-0.0.3.tar.gz", "has_sig": false, "md5_digest": "fab2572e9139eec27ea3705cb5c854ba", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3713, "upload_time": "2018-07-19T18:37:09", "url": "https://files.pythonhosted.org/packages/da/d2/fbdff1799de165ca194a93555cf42b42f5c41a4c24b9cf4abe5effd9bb19/flask_jwt_consumer-0.0.3.tar.gz" } ], "1.0.0": [ { "comment_text": "", "digests": { "md5": "946a02a11731680447001163c246286f", "sha256": "f00054532ed0bff68b752461ace561ed2af73384310fb9640fc6231dccb43851" }, "downloads": -1, "filename": "flask_jwt_consumer-1.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "946a02a11731680447001163c246286f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 5825, "upload_time": "2018-07-23T17:48:13", "url": "https://files.pythonhosted.org/packages/45/ed/7cf1c9803995e49652ff6c07c55cdfe29a2ac56d7aee17e7934575047228/flask_jwt_consumer-1.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "131e71e068384dc91cc5f0de520ee931", "sha256": "1ff2f7ebf8459a9e766d692c6175661d9b496135b8784779e63a080ef096bb4d" }, "downloads": -1, "filename": "flask_jwt_consumer-1.0.0.tar.gz", "has_sig": false, "md5_digest": "131e71e068384dc91cc5f0de520ee931", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4032, "upload_time": "2018-07-23T17:48:14", "url": "https://files.pythonhosted.org/packages/82/70/d216c50291f0994dadbcca2cb565294656c1a4acad5d136f7217ac21df74/flask_jwt_consumer-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "980bac6dbee6f1a1282685d8b07da0f1", "sha256": "c9f1d86183bd136ac2dac8bf663511d73484914952eaa3e81cf950d035258196" }, "downloads": -1, "filename": "flask_jwt_consumer-1.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "980bac6dbee6f1a1282685d8b07da0f1", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 6257, "upload_time": "2018-08-08T03:43:00", "url": "https://files.pythonhosted.org/packages/7a/8b/edb19d5ffd886bc5b3b2af5e8d51f36777a1e0537d40f88fd70929538234/flask_jwt_consumer-1.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8f52f40a365ad931c26f1de1503e8a63", "sha256": "c9c6feb6129173eefb6b2ac88853223ef05593e8ffe1ac4d05174710e401b56a" }, "downloads": -1, "filename": "flask_jwt_consumer-1.0.1.tar.gz", "has_sig": false, "md5_digest": "8f52f40a365ad931c26f1de1503e8a63", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4634, "upload_time": "2018-08-08T03:43:02", "url": "https://files.pythonhosted.org/packages/01/70/a802f8551321f878461e6f6860d90bbaffab5dc0cefb85407f94cef1c96b/flask_jwt_consumer-1.0.1.tar.gz" } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "de8313b81073105dec71e4c717907bad", "sha256": "8192ba78dfabe2884a7b8ddfb60e29c4ad2030d96082f9d5f2a68907766da1e0" }, "downloads": -1, "filename": "flask_jwt_consumer-1.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "de8313b81073105dec71e4c717907bad", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 6347, "upload_time": "2018-09-04T21:57:10", "url": "https://files.pythonhosted.org/packages/8a/21/ee99974aa03d948b000c946a6fb3abd093de4d1677ea27f259b968031fa3/flask_jwt_consumer-1.0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7bbc10bdad572c5b62cf2a77fb2aa425", "sha256": "b3888a74e2c39a66ff0a8dd9c05253281272d813b467228dc26a1cca280573b8" }, "downloads": -1, "filename": "flask_jwt_consumer-1.0.2.tar.gz", "has_sig": false, "md5_digest": "7bbc10bdad572c5b62cf2a77fb2aa425", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4674, "upload_time": "2018-09-04T21:57:11", "url": "https://files.pythonhosted.org/packages/98/67/b71c1eb7b738ed20b2a845cb9bf7d0233ecfa064ba49197003e7d9730f14/flask_jwt_consumer-1.0.2.tar.gz" } ], "1.0.3": [ { "comment_text": "", "digests": { "md5": "f79816043e848a84b4c1f0a476c560aa", "sha256": "387f58c9ff65c9d18a4c8de66363b3b67bbb53e45c378a16c9a8c770cfce945b" }, "downloads": -1, "filename": "flask_jwt_consumer-1.0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "f79816043e848a84b4c1f0a476c560aa", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 7481, "upload_time": "2018-11-09T20:35:21", "url": "https://files.pythonhosted.org/packages/8d/e4/05a13118ee87ae0e6a09654c6e57c6f303c4d591adfb6d4f3f366702cb0e/flask_jwt_consumer-1.0.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6da4b922eea39792b92b4f0eada117ad", "sha256": "67f7c92883f4f981c0eb7cebbe886512a843eda5c4bc494fd52d3c3dff3100f1" }, "downloads": -1, "filename": "flask_jwt_consumer-1.0.3.tar.gz", "has_sig": false, "md5_digest": "6da4b922eea39792b92b4f0eada117ad", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5046, "upload_time": "2018-11-09T20:35:22", "url": "https://files.pythonhosted.org/packages/7d/88/2aea0bb3e63d55063dcbfcd58cfa1dc9a2c57567d08b1835459b3dfc5cd6/flask_jwt_consumer-1.0.3.tar.gz" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "5d366344ac2c127213c64b0d96f0cffd", "sha256": "f2425cfaf7b512361c26e6eda8d796fac328fb8e296df5af18ff626780322ede" }, "downloads": -1, "filename": "flask_jwt_consumer-1.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "5d366344ac2c127213c64b0d96f0cffd", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 7658, "upload_time": "2019-07-24T05:10:00", "url": "https://files.pythonhosted.org/packages/01/03/89c5beb924268e2f11a6bfb4cfc07db3d29d2de3345085c071286839c93a/flask_jwt_consumer-1.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5b27f427d80d7b7d45e2ffc4962aa143", "sha256": "53a9f890907f764f28743c659a55615dbfa100f145299be36bd70530347c4afb" }, "downloads": -1, "filename": "flask_jwt_consumer-1.1.0.tar.gz", "has_sig": false, "md5_digest": "5b27f427d80d7b7d45e2ffc4962aa143", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5195, "upload_time": "2019-07-24T05:10:01", "url": "https://files.pythonhosted.org/packages/4e/d4/8f492c1854327f62681a51fddc82c8acc38fd47ae3e2ecedac8f20f9f287/flask_jwt_consumer-1.1.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "5d366344ac2c127213c64b0d96f0cffd", "sha256": "f2425cfaf7b512361c26e6eda8d796fac328fb8e296df5af18ff626780322ede" }, "downloads": -1, "filename": "flask_jwt_consumer-1.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "5d366344ac2c127213c64b0d96f0cffd", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 7658, "upload_time": "2019-07-24T05:10:00", "url": "https://files.pythonhosted.org/packages/01/03/89c5beb924268e2f11a6bfb4cfc07db3d29d2de3345085c071286839c93a/flask_jwt_consumer-1.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5b27f427d80d7b7d45e2ffc4962aa143", "sha256": "53a9f890907f764f28743c659a55615dbfa100f145299be36bd70530347c4afb" }, "downloads": -1, "filename": "flask_jwt_consumer-1.1.0.tar.gz", "has_sig": false, "md5_digest": "5b27f427d80d7b7d45e2ffc4962aa143", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5195, "upload_time": "2019-07-24T05:10:01", "url": "https://files.pythonhosted.org/packages/4e/d4/8f492c1854327f62681a51fddc82c8acc38fd47ae3e2ecedac8f20f9f287/flask_jwt_consumer-1.1.0.tar.gz" } ] }