Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Ve službě MSAL pro Python se většina chyb předává jako návratová hodnota z volání rozhraní API. Chyba je reprezentována jako slovník obsahující odpověď JSON z Microsoft identity platform.
- Úspěšná odpověď obsahuje
"access_token"klíč. Formát odpovědi je definován protokolem OAuth2. Další informace naleznete v tématu 5.1 Úspěšná odpověď - Chybová odpověď obsahuje
"error"a obvykle"error_description". Formát odpovědi je definován protokolem OAuth2. Další informace naleznete v tématu 5.2 Chybová odpověď
Když se vrátí chyba, "error" klíč obsahuje strojově čitelný kód.
"error" Pokud je to například příkaz "interaction_required", můžete uživatele vyzvat k zadání dalších informací k dokončení procesu ověřování. Pokud je "error""invalid_grant", můžete uživatele vyzvat k opětovnému zadání přihlašovacích údajů. Následující fragment kódu je příkladem zpracování chyb v knihovně MSAL pro Python.
from msal import ConfidentialClientApplication
authority_url = "https://login.microsoftonline.com/your_tenant_id"
client_id = "your_client_id"
client_secret = "your_client_secret"
scopes = ["https://graph.microsoft.com/.default"]
app = ConfidentialClientApplication(client_id, authority=authority_url, client_credential=client_secret)
result = app.acquire_token_silent(scopes=scopes, account=None)
if not result:
result = app.acquire_token_silent(scopes=scopes)
if "access_token" in result:
print("Access token: %s" % result["access_token"])
else:
print("Error: %s" % result.get("error"))
Když se vrátí chyba, "error_description" klíč obsahuje také zprávu čitelnou pro člověka a obvykle existuje také "error_code" klíč, který obsahuje strojově čitelný kód chyby Microsoft identity platform. Další informace o různých kódech chyb Microsoft identity platform naleznete v tématu Kódy chyb ověřování a autorizace.
V msAL pro Python jsou výjimky vzácné, protože většina chyb se zpracovává vrácením chybové hodnoty. Výjimka ValueError se vyvolá jenom v případě, že dojde k problému s tím, jak se pokoušíte knihovnu použít, například když jsou parametry rozhraní API poškozené.
Podmíněný přístup a problémy s claimy
Při tichém získávání tokenů může ve vaší aplikaci docházet k chybám, pokud rozhraní API, ke kterému se pokoušíte získat přístup, vyžaduje výzvu deklarací podmíněného přístupu, například kvůli zásadám MFA.
Vzor pro zpracování této chyby spočívá v interaktivním získání tokenu pomocí knihovny MSAL. Tím uživatele vyzvete a získáte mu možnost splnit požadované zásady podmíněného přístupu.
V některých případech můžete při volání rozhraní API, které vyžaduje podmíněný přístup, obdržet v chybové odpovědi z rozhraní API výzvu deklarací. Pokud například zásada podmíněného přístupu vyžaduje spravované zařízení (Intune), chybová zpráva bude vypadat přibližně takto: AADSTS53000: Aby bylo možné získat přístup k tomuto prostředku, musí být vaše zařízení spravované nebo podobně. V takovém případě můžete ve volání pro získání tokenu předat claims, aby byl uživatel vyzván ke splnění příslušných zásad.
Opakování po chybách a výjimkách
MsAL provádí volání HTTP do služby Microsoft Entra a občas může dojít k selháním. Například síť může jít dolů nebo je server přetížen.
MSAL Python 1.11+ automaticky provede jeden pokus o opakování za vás.
Toto chování můžete přizpůsobit podle pokynů k http_client přizpůsobení.
HTTP 429
Pokud je server tokenů služby (STS) přetížen příliš mnoha požadavky, vrátí chybu HTTP 429 s nápovědou o tom, jak dlouho, než to můžete zkusit znovu v Retry-After poli odpovědi.
Od vaší aplikace se očekávalo, že omezí rychlost následných požadavků a zopakuje je až po uplynutí zadané doby.
MSAL Python 1.16+ usnadňuje opakování žádosti o ověření na vyžádání (například pokaždé, když koncový uživatel znovu klikne na tlačítko pro přihlášení), nástroj MSAL Python 1.16+ automaticky omezí tyto pokusy o opakování vrácením stejné chybové odpovědi z mezipaměti HTTP a pouze odesláním skutečného volání HTTP v případě pokusu o volání po zadaném období.
Ve výchozím nastavení tento mechanismus omezení funguje tak, že ukládá údaje o omezení do integrované paměťové mezipaměti HTTP.
Jako mezipaměť HTTP můžete použít vlastní objekt podobný dict, u kterého můžete řídit, jak se bude jeho obsah uchovávat.
Další podrobnosti najdete v dokumentaci k rozhraní MSAL Python API.
Další kroky
- Zvažte povolení protokolování v MSAL pro Python, které vám pomůže diagnostikovat a ladit problémy.