Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ADAL JS - Acquire token: Token Renewal Operation failed due to timeout

I'm working in order to leverage the usage of the AD for authentication and authorization of several applications, and I'm currently studying how to implement said process.

This is for a Web-Browser to Web-Application flow.

I create an AuthenticationContext instance and use it to sign in, and that much functions normally. (Code organization simplified for demo purposes)

this.adal = new AuthenticationContext({
    tenant: this.tenantId,
    clientId: this.clientId,
    redirectUri: this.redirectUri,
    callback: this.loginCallback,
    popUp: true
});

this.adal.login();

It is when I try to acquire a Token that the behaviour becomes fishy. It is relevant to say that this application's registry in the AD has the permission "Sign in and read user profile" on Microsoft Graph API.

this.adal.acquireToken("https://graph.microsoft.com", function(error, token) {
    console.log(error);
    console.log(token);
});

The error is written to the console as follows: "Token renewal operation failed due to timeout"; whilest token is written as a null object. A brief look at the "Network" tab while inspecting the page with Chrome reveals such a resource:

authorize?response_type=token&client_id=xxxxx&resource=xxxxx&redirect_uri=http://localhost:8080(.....)

The Status for said resource is 302.

Got any clues? Thanks!

like image 857
Nuno Valente Avatar asked Oct 29 '22 03:10

Nuno Valente


1 Answers

Ok.. it seems like I've figured it out, with a little help from this article click for article and this click for very cool info

I've replaced the following bit of code, in the login callback

this.adal.acquireToken("https://graph.microsoft.com", function(error, token) {
    console.log(error);
    console.log(token);
});

for this:

var cachedToken = this.adal.getCachedToken(client_id_goes_here);
    if (cachedToken) {
        this.adal.acquireToken("https://graph.microsoft.com", function(error, token) {
            console.log(error);
            console.log(token);
        });
    }

And finally just add this line of code to a function that is run after the acquireToken method redirects to the page:

this.adal.handleWindowCallback();

Hope this is helpful for others who run by this issue!

like image 63
Nuno Valente Avatar answered Nov 11 '22 06:11

Nuno Valente