Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Wanneer u uitzonderingen verwerkt, kunt u het uitzonderingstype zelf en het lid ErrorCode gebruiken om onderscheid te maken tussen uitzonderingen. Er zijn drie soorten uitzonderingen: MsalClientException, MsalServiceExceptionen MsalInteractionRequiredException, die allemaal overnemen van MsalException.
- MsalClientException wordt gegenereerd wanneer er een fout optreedt die lokaal is voor de bibliotheek of het apparaat.
- MsalServiceException wordt gegenereerd wanneer de STS-service een foutreactie retourneert of een andere netwerkfout optreedt.
- MsalInteractionRequiredException wordt gegenereerd wanneer gebruikersinterface-interactie is vereist voor een geslaagde verificatie.
MsalServiceException
MsalServiceException toont HTTP-headers die de aanvragen hebben geretourneerd naar de STS. U kunt ze openen via MsalServiceException.headers()
MsalInteractionRequiredException
Een van de algemene statuscodes die worden geretourneerd door MSAL4J bij het aanroepen AcquireTokenSilently() is InvalidGrantError. Deze statuscode betekent dat de toepassing de authenticatiebibliotheek opnieuw moet aanroepen, maar in de interactieve modus (met AuthorizationCodeParameters of DeviceCodeParameters voor openbare clienttoepassingen). Dit komt doordat extra gebruikersinteractie is vereist voordat een verificatietoken kan worden uitgegeven.
Meestal mislukt AcquireTokenSilently, omdat de tokencache geen tokens heeft die overeenkomen met uw aanvraag. Toegangstokens verlopen na 1 uur en AcquireTokenSilently zal proberen een nieuw toegangstoken op te halen op basis van een verversingstoken (in OAuth2-termen is dit de 'refresh token'-stroom). Deze stroom kan ook om verschillende redenen mislukken, bijvoorbeeld als een tenantbeheerder strenger aanmeldingsbeleid configureert.
De interactie is gericht op het uitvoeren van een actie door de gebruiker. Sommige van deze voorwaarden zijn eenvoudig om gebruikers op te lossen (bijvoorbeeld gebruiksvoorwaarden accepteren met één klik) en sommige kunnen niet worden opgelost met de huidige configuratie (de betreffende computer moet bijvoorbeeld verbinding maken met een specifiek bedrijfsnetwerk).
MSAL maakt een reason veld beschikbaar, dat u kunt lezen om een betere gebruikerservaring te bieden, bijvoorbeeld om de gebruiker te laten weten dat het wachtwoord is verlopen of dat ze toestemming moeten geven om bepaalde resources te kunnen gebruiken. De ondersteunde waarden maken deel uit van de enum InteractionRequiredExceptionReason:
| Reden | Meaning | Aanbevolen verwerking |
|---|---|---|
| Basisactie | De voorwaarde kan worden opgelost door interactie van de gebruiker tijdens het interactieve authenticatieproces | acquireToken aanroepen met interactieve parameters |
| Aanvullende actie | Voorwaarde kan worden opgelost door aanvullende herstelinteractie met het systeem, buiten de interactieve verificatiestroom. | Roep acquireToken aan met interactieve parameters om een bericht weer te geven dat de herstelactie uitlegt. De aanroepende applicatie kan ervoor kiezen processen te verbergen die additional_action vereisen als de gebruiker de herstelactie waarschijnlijk niet zal voltooien. |
| MessageOnly | Dit probleem kan momenteel niet worden verholpen. Als u een interactieve verificatiestroom start, wordt een bericht weergegeven waarin de voorwaarde wordt uitgelegd. | Roep acquireToken aan met interactieve parameters om een bericht weer te geven waarin de voorwaarde wordt uitgelegd. acquireTokenCall retourneert userCanceled-fout nadat de gebruiker het bericht heeft gelezen en het venster sluit. De aanroepende toepassing kan ervoor kiezen stromen te verbergen die resulteren in message_only als de gebruiker waarschijnlijk geen baat heeft bij het bericht. |
| Toestemming vereist | Gebruikerstoestemming ontbreekt of is ingetrokken. | Roep alle acquireToken aan met interactieve parameters om de gebruiker toestemming te geven. |
| Gebruikerswachtwoord verlopen | Het wachtwoord van de gebruiker is verlopen. | AcquireToken aanroepen met interactieve parameter, zodat de gebruiker het wachtwoord opnieuw kan instellen |
| Toestemming vereist | Gebruikerstoestemming ontbreekt of is ingetrokken | AcquireToken aanroepen met interactieve parameters, zodat de gebruiker het wachtwoord opnieuw kan instellen |
| Geen | Er worden geen verdere details verstrekt. Deze situatie kan worden opgelost door interactie van de gebruiker tijdens het interactieve authenticatieproces. | Roep AcquireToken aan met interactieve parameters |
Codevoorbeeld
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
}
}