Zpracování chyb a výjimek v MSAL pro Javu

Tento článek obsahuje přehled různých typů chyb a doporučení pro zpracování běžných chyb přihlašování.

Základy zpracování chyb MSAL

Výjimky v knihovně MICROSOFT Authentication Library (MSAL) jsou určené vývojářům aplikací k řešení potíží, nikoli pro zobrazení koncovým uživatelům. Zprávy o výjimce nejsou lokalizované.

Při zpracování výjimek a chyb můžete použít samotný typ výjimky a kód chyby k rozlišení mezi výjimkami. Seznam kódů chyb najdete v tématu Kódy chyb ověřování a autorizace Azure AD.

Během přihlašování můžete narazit na chyby týkající se souhlasů, podmíněného přístupu (MFA, Správa zařízení, omezení na základě polohy), vystavování a uplatnění tokenů a vlastností uživatelů.

V následující části najdete další podrobnosti o zpracování chyb pro vaši aplikaci.

Zpracování chyb v MSAL pro Javu

V MSAL pro Javu existují tři typy výjimek: MsalClientException, MsalServiceExceptiona MsalInteractionRequiredException; všechny, které dědí z MsalException.

  • MsalClientException vyvolá se, když dojde k chybě, která je místní pro knihovnu nebo zařízení.
  • MsalServiceException vyvolá se, když služba zabezpečení tokenu (STS) vrátí chybovou odpověď nebo dojde k jiné síťové chybě.
  • MsalInteractionRequiredException vyvolá se, když je pro úspěšné ověření vyžadována interakce uživatelského rozhraní.

MsalServiceException

MsalServiceException zveřejňuje hlavičky HTTP vrácené v požadavcích na stS. Přístup k nim prostřednictvím MsalServiceException.headers()

MsalInteractionRequiredException

Jeden z běžných stavových kódů vrácených z MSAL pro Javu při volání AcquireTokenSilently() je InvalidGrantError. To znamená, že před vydáním ověřovacího tokenu je vyžadována další interakce uživatele. Aplikace by měla znovu volat knihovnu ověřování, ale v interaktivním režimu odesláním AuthorizationCodeParameters nebo DeviceCodeParameters pro veřejné klientské aplikace.

Ve většině případů, kdy AcquireTokenSilently dojde k selhání, je to proto, že mezipaměť tokenů nemá token odpovídající vašemu požadavku. Platnost přístupových tokenů vyprší za jednu hodinu a AcquireTokenSilently pokusí se získat nový na základě obnovovacího tokenu. V termínech OAuth2 se jedná o tok obnovovacího tokenu. Tento tok může také selhat z různých důvodů, například když správce tenanta nakonfiguruje přísnější zásady přihlášení.

Některé podmínky, které vedou k této chybě, jsou pro uživatele snadno vyřešené. Můžou například potřebovat přijmout podmínky použití nebo požadavek nemůže být splněný s aktuální konfigurací, protože počítač se musí připojit ke konkrétní podnikové síti.

MSAL zveřejňuje reason pole, které můžete použít k zajištění lepšího uživatelského prostředí. Pole vás může například vést k tomu, reason že uživateli vypršela platnost hesla nebo že bude muset poskytnout souhlas s používáním některých prostředků. Podporované hodnoty jsou součástí výčtu InteractionRequiredExceptionReason :

Důvod Význam Doporučené zpracování
BasicAction Podmínku lze vyřešit interakcí uživatele během interaktivního ověřovacího toku. Volání acquireToken s interaktivními parametry
AdditionalAction Podmínku lze vyřešit další nápravnou interakcí se systémem mimo interaktivní ověřovací tok. Volání acquireToken s interaktivními parametry k zobrazení zprávy, která vysvětluje nápravnou akci, která se má provést. Volající aplikace se může rozhodnout skrýt toky, které vyžadují další akci, pokud uživatel pravděpodobně dokončí nápravnou akci.
MessageOnly Podmínku nelze v tuto chvíli vyřešit. Spusťte interaktivní ověřovací tok a zobrazte zprávu s vysvětlením podmínky. Volání acquireToken s interaktivními parametry zobrazí zprávu, která vysvětluje podmínku. acquireToken vrátí UserCanceled chybu po přečtení zprávy uživatelem a zavře okno. Aplikace se může rozhodnout skrýt toky, které mají za následek zprávu, pokud uživatel pravděpodobně nebude mít prospěch ze zprávy.
ConsentRequired Chybí souhlas uživatele nebo byl odvolán. Volání acquireToken s interaktivními parametry, aby uživatel mohl udělit souhlas.
UserPasswordExpired Vypršela platnost hesla uživatele. Volání acquireToken pomocí interaktivního parametru, aby uživatel mohl resetovat heslo.
None Další podrobnosti jsou uvedeny. Podmínku může vyřešit interakce uživatele během interaktivního ověřovacího toku. Volání acquireToken s interaktivními parametry

Příklad kódu

        IAuthenticationResult result;
        try {
            PublicClientApplication application = PublicClientApplication
                    .builder("clientId")
                    .b2cAuthority("authority")
                    .build();

            SilentParameters parameters = SilentParameters
                    .builder(Collections.singleton("scope"))
                    .build();

            result = application.acquireTokenSilently(parameters).join();
        }
        catch (Exception ex){
            if(ex instanceof MsalInteractionRequiredException){
                // AcquireToken by either AuthorizationCodeParameters or DeviceCodeParameters
            } else{
                // Log and handle exception accordingly
            }
        }

Úskalí podmíněného přístupu a deklarace identity

Při bezobslužném získávání tokenů může vaše aplikace obdržet chyby, když je výzva k deklarace identity podmíněného přístupu , jako je zásada MFA, vyžaduje rozhraní API, ke které se pokoušíte získat přístup.

Vzorem pro zpracování této chyby je interaktivní získání tokenu pomocí msAL. Tím se uživateli zobrazí výzva a poskytne jim možnost splnit požadované zásady podmíněného přístupu.

V některých případech při volání rozhraní API vyžadujícího podmíněný přístup můžete z rozhraní API obdržet výzvu deklarací identity. Pokud například zásady podmíněného přístupu mají spravované zařízení (Intune), bude chyba podobná jako AADSTS53000: Aby bylo možné spravovat tento prostředek , nebo něco podobného, vyžaduje se, aby bylo zařízení spravované. V takovém případě můžete předat deklarace identity ve volání získaného tokenu, aby se uživateli zobrazila výzva k splnění příslušných zásad.

Opakování po chybách a výjimkách

Při volání MSAL byste měli implementovat vlastní zásady opakování. MSAL provádí volání HTTP do služby Azure AD a občas může dojít k selháním. Například síť může přejít dolů nebo je server přetížen.

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 se můžete zkusit znovu v Retry-After poli odpovědi.

Další kroky

Zvažte povolení protokolování v MSAL pro Javu , abyste mohli diagnostikovat a ladit problémy.