Сохраняется ли кэш MSAL между вызовами в Django

Из Django мне нужно вызвать Business Central API через Active Directory Oauth2, используя пакет msal от Microsoft.

HTML -> Django -> вызывает API из бэкенда -> Business Central

Это экстракт моего кода, основанного на примере из документации microsoft. Он работает в ванильном python

import msal
import requests
import json

# GET OAUTH2 TOKEN WITH CLIENT ID/CLIENT SECRET
login_url = 'https://login.microsoftonline.com/<tenant>/oauth2/token'
authority = 'https://login.microsoftonline.com/<tenant>'
client_id = '<client ID from AAD>'

scope = ['https://api.businesscentral.dynamics.com/.default']
client_secret = '<secret from AAD'
grant_type = 'client_credentials'
resource = 'https://api.businesscentral.dynamics.com'
app = msal.ConfidentialClientApplication(
    client_id,
    authority=authority,
    client_credential=client_secret,
)
result = app.acquire_token_silent(scope, account=None)
if not result:
    print("No suitable token exists in cache. Let's get a new one from AAD.")
    result = app.acquire_token_for_client(scopes=scope)

if "access_token" in result:
    token = result["access_token"]

# CALL A BUSINESS CENTRAL API
base_url = 'https://api.businesscentral.dynamics.com/v2.0/<tenant>/Sandbox'
endpoint = base_url + "/ODataV4/Company('<company name>')/<service name>"
response = requests.get(endpoint, headers={'Authorization': 'Bearer ' + token},).json()

Теперь я собираюсь добавить эту логику в существующий проект Django и, читая msal.ConfidentialClientApplication код, обнаружил комментарий:

def acquire_token_silent(
        self,
        scopes,  # type: List[str]
        account,  # type: Optional[Account]
        authority=None,  # See get_authorization_request_url()
        force_refresh=False,  # type: Optional[boolean]
        claims_challenge=None,
        **kwargs):
    """Acquire an access token for given account, without user interaction.

    It is done either by finding a valid access token from cache,
    or by finding a valid refresh token from cache and then automatically
    use it to redeem a new access token.

Похоже, что пакет сначала ищет действительный токен доступа в своем кэше; только если он отсутствует или не действителен, мы можем вызвать метод acquire_token_for_client для получения нового

Мне интересно, сохраняется ли кэш MSAL (и, соответственно, маркер доступа) между двумя вызовами запроса Django.

Если нет, то какова лучшая практика в этом случае? Может быть, вручную хранить токен доступа в Django DB?

(обратите внимание, что я не могу хранить маркер доступа в HTTP-сессии, поскольку вызовы полностью выполняются в бэкенде)

Вернуться на верх