Пользовательский провайдер аутентификации
Вы можете реализовать пользовательский провайдер аутентификации, наследуясь от класса ниже и реализуя необходимые методы.
Bases: ABC
Basic class for all Auth providers.
Constructor is called by FastAPI, and can use Dependency injection mechanism.
See :obj:~setup for more details.
Source code in data_rentgen/server/providers/auth/base_provider.py
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 | |
get_current_user(access_token, request)
abstractmethod
async
This method should return currently logged in user.
Parameters
access_token : str
JWT token got from Authorization: Bearer <token> header.
Returns
:obj:data_rentgen.db.models.User
Current user object
Source code in data_rentgen/server/providers/auth/base_provider.py
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | |
get_token_authorization_code_grant(code)
abstractmethod
async
Obtain a token using the Authorization Code grant.
Source code in data_rentgen/server/providers/auth/base_provider.py
98 99 100 101 102 103 104 105 | |
get_token_password_grant(login, password)
abstractmethod
async
This method should perform authentication and return JWT token.
Parameters
See: * https://auth0.com/docs/get-started/authentication-and-authorization-flow/call-your-api-using-resource-owner-password-flow * https://connect2id.com/products/server/docs/api/token
Returns
Dict: .. code-block:: python
{
"access_token": "some.jwt.token",
"token_type": "bearer",
"expires_in": 3600,
}
Source code in data_rentgen/server/providers/auth/base_provider.py
70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 | |
logout(user, refresh_token)
abstractmethod
async
This method should implement user logout logic
Source code in data_rentgen/server/providers/auth/base_provider.py
107 108 109 110 111 112 113 | |
setup(app)
abstractmethod
classmethod
This method is called by :obj:data_rentgen.server.application_factory.
Here you should add dependency overrides for auth provider,
and return new app object.
Examples
.. code-block::
from fastapi import FastAPI
from my_awesome_auth_provider.settings import MyAwesomeAuthProviderSettings
from data_rentgen.dependencies import Stub
class MyAwesomeAuthProvider(AuthProvider):
def setup(app):
app.dependency_overrides[AuthProvider] = MyAwesomeAuthProvider
# `settings_object_factory` returns MyAwesomeAuthProviderSettings object
app.dependency_overrides[MyAwesomeAuthProviderSettings] = settings_object_factory
return app
def __init__(
self,
settings: Annotated[MyAwesomeAuthProviderSettings, Depends(Stub(MyAwesomeAuthProviderSettings))],
):
# settings object is set automatically by FastAPI's dependency_overrides
self.settings = settings
Source code in data_rentgen/server/providers/auth/base_provider.py
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | |