Сохраняется ли кэш 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-сессии, поскольку вызовы полностью выполняются в бэкенде)