<!DOCTYPE html> <html> <head> <title>Microsoft Authentication</title> <script src="https://cdnjs.cloudflare.com/ajax/libs/bluebird/3.3.4/bluebird.min.js"></script> <script src="https://secure.aadcdn.microsoftonline-p.com/lib/0.2.3/js/msal.js"></script> <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script> </head> <body> <h4 id="WelcomeMessage"></h4> <button id="SignIn" onclick="signIn()">Sign In</button> <br/><br/> <pre id="json"></pre> <script> var applicationConfig = { clientID: "24d81a32-6a9a-4f5c-b7cc-53bc1ba178c7", authority: "https://login.microsoftonline.com/common", graphScopes: ["user.read"], graphEndpoint: "https://graph.microsoft.com/v1.0/me" }; var myMSALObj = new Msal.UserAgentApplication(applicationConfig.clientID, applicationConfig.authority, acquireTokenRedirectCallBack, {storeAuthStateInCookie: true, cacheLocation: "localStorage"}); function signIn() { myMSALObj.loginPopup(applicationConfig.graphScopes).then(function (idToken) { //Login Success showWelcomeMessage(); acquireTokenPopupAndCallMSGraph(); }, function (error) { console.log(error); }); } function signOut() { myMSALObj.logout(); } function acquireTokenPopupAndCallMSGraph() { //Call acquireTokenSilent (iframe) to obtain a token for Microsoft Graph myMSALObj.acquireTokenSilent(applicationConfig.graphScopes).then(function (accessToken) { callMSGraph(applicationConfig.graphEndpoint, accessToken, graphAPICallback); }, function (error) { console.log(error); // Call acquireTokenPopup (popup window) in case of acquireTokenSilent failure due to consent or interaction required ONLY if (error.indexOf("consent_required") !== -1 || error.indexOf("interaction_required") !== -1 || error.indexOf("login_required") !== -1) { myMSALObj.acquireTokenPopup(applicationConfig.graphScopes).then(function (accessToken) { callMSGraph(applicationConfig.graphEndpoint, accessToken, graphAPICallback); }, function (error) { console.log(error); }); } }); } function callMSGraph(theUrl, accessToken, callback) { var xmlHttp = new XMLHttpRequest(); xmlHttp.onreadystatechange = function () { if (this.readyState == 4 && this.status == 200) callback(JSON.parse(this.responseText)); } xmlHttp.open("GET", theUrl, true); // true for asynchronous xmlHttp.setRequestHeader('Authorization', 'Bearer ' + accessToken); xmlHttp.send(); } function graphAPICallback(data) { //Display user data on DOM var divWelcome = document.getElementById('WelcomeMessage'); //divWelcome.innerHTML += " to Microsoft Graph API!!"; document.getElementById("json").innerHTML = JSON.stringify(data, null, 2); } function showWelcomeMessage() { var divWelcome = document.getElementById('WelcomeMessage'); //divWelcome.innerHTML += 'Welcome ' + myMSALObj.getUser().name; var loginbutton = document.getElementById('SignIn'); loginbutton.innerHTML = 'Sign Out'; loginbutton.setAttribute('onclick', 'signOut();'); } // This function can be removed if you do not need to support IE function acquireTokenRedirectAndCallMSGraph() { //Call acquireTokenSilent (iframe) to obtain a token for Microsoft Graph myMSALObj.acquireTokenSilent(applicationConfig.graphScopes).then(function (accessToken) { callMSGraph(applicationConfig.graphEndpoint, accessToken, graphAPICallback); }, function (error) { console.log(error); //Call acquireTokenRedirect in case of acquireToken Failure if (error.indexOf("consent_required") !== -1 || error.indexOf("interaction_required") !== -1 || error.indexOf("login_required") !== -1) { myMSALObj.acquireTokenRedirect(applicationConfig.graphScopes); } }); } function acquireTokenRedirectCallBack(errorDesc, token, error, tokenType) { if(tokenType === "access_token") { callMSGraph(applicationConfig.graphEndpoint, token, graphAPICallback); } else { console.log("token type is:"+tokenType); } } // Browser check variables var ua = window.navigator.userAgent; var msie = ua.indexOf('MSIE '); var msie11 = ua.indexOf('Trident/'); var msedge = ua.indexOf('Edge/'); var isIE = msie > 0 || msie11 > 0; var isEdge = msedge > 0; //If you support IE, our recommendation is that you sign-in using Redirect APIs //If you as a developer are testing using Edge InPrivate mode, please add "isEdge" to the if check if (!isIE) { if (myMSALObj.getUser()) {// avoid duplicate code execution on page load in case of iframe and popup window. showWelcomeMessage(); acquireTokenPopupAndCallMSGraph(); } } else { document.getElementById("SignIn").onclick = function () { myMSALObj.loginRedirect(applicationConfig.graphScopes); }; if (myMSALObj.getUser() && !myMSALObj.isCallback(window.location.hash)) {// avoid duplicate code execution on page load in case of iframe and popup window. showWelcomeMessage(); acquireTokenRedirectAndCallMSGraph(); } } </script> </body> </html>