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.
Background
Při tichém získávání tokenů může vaše aplikace obdržet chybové zprávy, pokud rozhraní API, ke kterému se pokoušíte získat přístup, vyžaduje výzvu k deklaracím identity v rámci podmíněného přístupu, například kvůli zásadám vícefaktorového ověřování.
Vzor pro zpracování této chyby spočívá v interaktivním získání tokenu pomocí knihovny MSAL. Interaktivní získání tokenu vyzve uživatele a poskytne mu možnost splnit požadované zásady podmíněného přístupu.
Note
Existují některé zásady podmíněného přístupu, které nevyžadují interakci uživatele, aby bylo možné vyhovět zásadě. V takových případech se doporučuje použít metodu acquire_token_silent ke zpracování vrácené výzvy claims a zabránit vyžadování interakce uživatele.
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.
Zpracování výzvy deklarace identity v Python MSAL
Při volání rozhraní API, které vyžaduje podmíněný přístup, bude vaše aplikace muset zpracovat chybu výzvy k deklaraci identity. To se zobrazí jako chybová odpověď knihovny MSAL Python, v níž vlastnost Claims nebude prázdná.
Abyste mohli zpracovat ověřovací výzvu deklarace identity, budete muset použít parametr claims_challenge metody get_authorization_request_url(). V případech, které nevyžadují interakce, budete muset použít claims_challenge parametr v acquire_token_silent() metodě a metoda použije obnovovací token k získání nového tokenu.
Výzva deklarací identity je direktiva v hlavičce www-authenticate , se kterou bude poskytovatel prostředků (např. MS Graph) reagovat, pokud přístupový token není autorizovaný a vyžaduje se nový přístupový token. Příklad výzvy deklarací identity od poskytovatele prostředků (např. MS Graph) by měl vypadat takto. Skládá se ze stavového kódu HTTP, který musí být 401 a hlavička www-authenticate , která obsahuje pole uvedená výše.
HTTP 401; Unauthorized
www-authenticate=Bearer realm="",
authorization_uri="https://login.microsoftonline.com/common/oauth2/authorize",
error="insufficient_claims",
claims="returned_claims"
Klienti musí extrahovat claimy a poté je předat metodě acquire_token_by_*. Pokud je hodnota claims vrácená z prostředku zakódovaná v kódování Base64, je nutné ji před voláním knihovny MSAL dekódovat. Metody acquire_token v MSAL přijímají claims ve formě řetězce JSON. Toto je příklad toho, jak lze claimy vrácené poskytovatelem prostředku zpracovat pomocí autorizačního toku s kódem.
claims_challenge = "claims returned from resource provider"
# if claims parameter is encoded, decode it and use the decoded claims
# decoded_claims_challenge = str(base64.b64decode(claims), "utf-8")
result = None
# Since you were using your previous AT and then met a claims challenge,
# you should've already be in a context with the current signed-in user.
# Here we assume you somehow already have that account,
# or you could possibly get it like this:
accounts = app.get_accounts()
assert accounts
account = accounts[0]
result = app.acquire_token_silent(scope, account=account, claims_challenge=claims_challenge)
if not result:
# Auth endpoint call for interactive login (you can use auth url helper)
auth_url = app.get_authorization_request_url(..., claims_challenge=claims_challenge)
# Make a request to this auth_url to get back authorization_code
result = app.acquire_token_by_authorization_code(..., claims_challenge=claims_challenge)
- Tento nový přístupový token se teď dá použít v požadavku na prostředek.