Azure AD authentication for Fast API
Project description
FastAPI authentication with Microsoft Identity
The Microsoft Identity library for Python's FastAPI provides Azure Active Directory token authentication and authorization through a set of convenience functions. It enables any FastAPI applications to authenticate with Azure AD to validate JWT tokens and API permissions
Install the package
Install the Microsoft Identity for FastAPI library with pip:
pip install fastapi-microsoft-identity
Prerequisites
- An Azure Active Directory Get one Free
- Python 3.6 or later
Usage
1. Azure AD App Registration Configuration
First create an Azure Active Directory Application Registration
in the Azure AD portal using the following steps:
- Sign in to your Azure AD Tenant (link)
- Navigate to
Applications
->Create a new application
. - Enter a name for your application.
- Leave everything else as default.
- Click
Create
. - Copy the
Client ID
andTenant ID
from theApplication Registration
Overview page. - Navigate to the
Expose API
tab. - Click
Set
next to the Application ID URI field. - Click Add a scope
- Give the scope a name like
access_as_user
. - Select
Admin and User
for consent - Provide meaningful descriptions for the admin and user consents
- Ensure
State
is set to Enabled - Client Add scope
- Give the scope a name like
The scope should look like this:
api://279cfdb1-0000-0000-0000-291dcd4b561a/access_as_user
2. Using the Microsoft Identity for FastAPI library
In your FastAPI application, you need to initialize the authentication library using the Client ID
and Tenant ID
values from the Application Registration
Overview page.
initialize(tenant_id, client_id)
You can now decorate any API endpoint with the requires_auth
decorator as per the example below
from fastapi_microsoft_identity import requires_auth, validate_scope, AuthError
expected_scope = "<your expected scope e.g access_as_user>"
@router.get('/api/weather/{city}')
@requires_auth
async def weather(request: Request, loc: Location = Depends(), units: Optional[str] = 'metric'):
try:
validate_scope(expected_scope, request)
return await openweather_service.get_report_async(loc.city, loc.state, loc.country, units)
except AuthError as ae:
return fastapi.Response(content=ae.error_msg, status_code=ae.status_code)
except ValidationError as ve:
return fastapi.Response(content=ve.error_msg, status_code=ve.status_code)
except Exception as x:
return fastapi.Response(content=str(x), status_code=500)
The requires_auth
decorator will check if the JWT Access Token in the request is a valid token and then raise an AuthError
(HTTP 401) if the token is invalid (expired, not right audience etc).
The library also provides a helper function: validate_scope
that can be used to validate the scope of the JWT token.
validate_scope(expected_scope, request)
The validate_scope
method will throw an AuthError
(HTTP 403) if the token doesn't contain the right scope / api permission.
Compatibility
Requires Python 3.x
Licence
MIT
Provide feedback
If you encounter bugs or have suggestions, please open an issue.
Contributing
This project welcomes contributions and suggestions. Most contributions require you to agree to a Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us the rights to use your contribution. For details, visit https://cla.microsoft.com.
This project has adopted the Microsoft Open Source Code of Conduct. For more information, see the Code of Conduct FAQ or contact opencode@microsoft.com with any additional questions or comments.
Authors
The fastapi_microsoft_identity
was written by Christos Matskas <christos.matskas@microsoft.com>
.
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
Built Distribution
File details
Details for the file fastapi_microsoft_identity-0.1.1.tar.gz
.
File metadata
- Download URL: fastapi_microsoft_identity-0.1.1.tar.gz
- Upload date:
- Size: 5.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/32.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.62.3 importlib-metadata/4.10.1 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.10.1
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 520e8b69b976ee5e40395bd3da50212baeb46a89b1260c91730e306a1fe0c495 |
|
MD5 | 3c72dfdcb99db2a25231d50fbd538e6c |
|
BLAKE2b-256 | 8c2f934dd4bf3c2e3e42f6df9ec324e8de24d8be527c31acf18557c907acef51 |
File details
Details for the file fastapi_microsoft_identity-0.1.1-py3-none-any.whl
.
File metadata
- Download URL: fastapi_microsoft_identity-0.1.1-py3-none-any.whl
- Upload date:
- Size: 6.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/32.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.62.3 importlib-metadata/4.10.1 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.10.1
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | ca4e45b7b5c0f2acd781015676545b4c7f6d5e23bede0b2447589fc43cd5277d |
|
MD5 | ab6121af2a8a1557c735d55c4f3ddc4f |
|
BLAKE2b-256 | 34603e2f83cd1cf2fcae13d7ed1497ab21d47b183b2272fcb728605f53cf81a1 |