2017-09-04 8 views
2

J'utilise ADAL.js (qui appelle Azure Active Directory) comme bibliothèque javascript pour vérifier l'utilisateur. J'utilise le code suivant pour cela:Le rappel après la connexion() de ADAL.js n'est pas appelé dans Edge

<!DOCTYPE html> 
<html> 
<head> 
    <meta charset="utf-8" /> 
    <title></title> 
</head> 
<body> 
    <script src="https://secure.aadcdn.microsoftonline-p.com/lib/1.0.15/js/adal.min.js"></script> 
    <script> 
     var endpoints = { 
      "https://management.core.windows.net": "https://management.core.windows.net" 
     }; 
     var config = { 
      clientId: 'e333d3fe-a73a-4476-8121-8a57f9a972ca', 
      endpoints: endpoints, 
     }; 
     var authContext = new AuthenticationContext(config); 
     authContext.handleWindowCallback(); 

     function onSuccessLogin(error, token, msg) { 

      console.log("Inside Call back"); 

      if (!!token) { 
       console.log("Log-in to Azure successfully done", token); 
      } 
      else { 
       console.log("Error while log-in to Azure", error); 
      } 

      if (!!authContext._user) { 
       console.log("You are connected to Azure ")   
      } 
     } 

     function login() { 
      authContext.popUp = true; 
      authContext.callback = onSuccessLogin; 
      authContext.login(); 
      // authContext.handleWindowCallback(); 
      var user = authContext.getCachedUser(); 
      console.log(user); 
     }; 

     function logout() { 
      authContext.logout(); 
     }; 

    </script> 
    <input id="Button1" type="button" value="clickme" onclick="clickme()" /> 
    <input id="Button3" type="button" value="login" onclick="login()" /> 
    <input id="Button2" type="button" value="logout" onclick="logout()" /> 

    // These are the text-boxes whose value I want to retain. 
    First name:<br> 
    <input id=fname" type="text" name="firstname" value="Mickey"> 
    <br> 
    Last name:<br> 
    <input id="lname" type="text" name="lastname" value="Mouse"> 
</body> 
</html> 

Ce sont quelques problème avec ce code Edge, bien que tout fonctionne bien en chrome:

  1. Pourquoi onSuccessLogin() n'est pas toujours invoqua bord?
  2. Pourquoi la fenêtre contextuelle de connexion n'apparaît-elle pas toujours?
  3. Parfois après avoir entré les informations d'identification, le pop ne se fermera pas.

Répondre

1

Ce qui a fonctionné pour moi est:

  • régler la config.callback et popUp=true avant d'appeler AuthenticationContext (config)

Aussi, vous ne devez pas appeler handleWindowCallback() si l'URL ne contient pas #. Le code doit être: if (authenticationContext.isCallback(window.location.hash)) { authenticationContext.handleWindowCallback();

Je vous suggère de jeter un oeil et adaptez l'exemple suivant je l'ai testé et travaillé Edge (et bien sûr Chrome) dans les deux cas (avec et sans popup): https://github.com/Azure-Samples/active-directory-dotnet-webapi-onbehalfof-ca/blob/master/TodoListSPA/app.js (la la configuration est dans https://github.com/Azure-Samples/active-directory-dotnet-webapi-onbehalfof-ca/blob/master/TodoListSPA/appconfig.js)

+0

J'ai vérifié le lien d'échantillon et fait exactement comme vous l'avez suggéré. Maintenant, les choses fonctionnent bien pour les utilisateurs connectés. Mais dans une fenêtre privée de bord, le rappel n'est jamais appelé. Le pop ne se fermera pas et l'URL de la pop-up deviendra: https: // localhost: 44315/# id_token = eyJ0eXsV1cQiLPCJhxbGciOiJSUzI1NiIsI ....................... –

+1

Oui, il existe des problèmes connus avec Edge (non dus à la bibliothèque): le stockage local et de session est perdu lorsque vous redirigez d'une zone à l'autre dans InPrivate. Edge travaille sur la réparation de leur stockage dans une future version. En attendant, vous pouvez contourner le problème en supprimant la redirection à travers les zones en vous assurant que les sites référencés et redirigés se trouvent dans la même zone. –

+0

Il ne fonctionne même pas dans les fenêtres non privées de bord. –