MSAL 2.0 JS 浏览器:重定向到空白页面并挂在那里(没有重定向回主应用程序)

发布于 2025-01-18 13:26:57 字数 3185 浏览 0 评论 0原文

我正在尝试通过VUE JS中的重定向实现MSAL AUTH。

我遵循了官方指南,但是当我打开一个应用程序时,启动了处理,然后将其重定向到空白页并悬挂在那里,控制台看起来像这样:

  • handlerledirectPromise称为“称为handlerledectRomise”,但没有进行交互,返回无效。
  • 发射事件:MSAL:AcceAireTokenStart
  • 发射事件:MSAL:HANDLEREDIRECTERD
  • NULL,无响应
  • 发射事件:MSAL:AcceAireTokenStart

我无法获得如何实现重定向流(弹出流程不是一个选项)。

我的配置:

// login
var msalConfig = { 
    auth: {
        clientId: clientId, 
        authority: this.authority, //https://login.microsoftonline.com/common/ default
        redirectUri: this.redirect + 'redirects/login-msal-powerbi/index.html', // blank page
        postLogoutRedirectUri: null
    }, 
    cache: {
        cacheLocation: "localStorage", // This configures where your cache will be stored
        storeAuthStateInCookie: false, // Set this to "true" if you are having issues on IE11 or Edge
    },
    allowRedirectInIframe: true
}

我的主要登录器函数:


// login
loginUser: function() {
    var that = this;
    // Prepare config
    this.msalInstance = new msal.PublicClientApplication(msalConfig); 
    // Register Callbacks for Redirect flow
    var request = this.msalGetRequestLoginRedirect(this.powerbi.scopes, this.login.aadTenant); // returns an object with authority and scopes
    this.msalInstance.handleRedirectPromise()
    .then(function(responce) {
        that.msalHandleResponse(responce, that.msalInstance);
    })
    .catch((error) => {
        console.log(error);
    });

我的msalhandleresponse函数:

msalHandleResponse: function(response, msalInstance) {
    if (response !== null) {
        console.log(response);
    }else {
        console.error('null!!') // returns null
        return msalInstance.loginRedirect({scopes:[
                    "https://analysis.windows.net/powerbi/api/Dashboard.Read.All",
                    "https://analysis.windows.net/powerbi/api/Dataset.Read.All",
                    "https://analysis.windows.net/powerbi/api/Report.Read.All",
                    "https://analysis.windows.net/powerbi/api/Group.Read.All",
                    "https://analysis.windows.net/powerbi/api/Workspace.Read.All",
                    "https://analysis.windows.net/powerbi/api/UserState.ReadWrite.All"       
                ], responseMode:"query"});
    }
},

我的AccearireTokenRedirect函数:

msalGetTokenRedirect: function(msalInstance) {
    var that = this;
    msalInstance.acquireTokenSilent(this.requestsObj.silentRequest)
    .then(function(tokenResponse) {
        // Optionally make something with tokenResponse    
        console.log("Access token acquired silently...");
        return tokenResponse;
    }).catch(function(error) {
        if (error instanceof InteractionRequiredAuthError) {
            // fallback to interaction when silent call fails
            return msalInstance.acquireTokenRedirect(this.requestsObj.request)
            .then(function(tokenResponse) {
                console.log('TOKEN RESPONSE',tokenResponse);
            }).catch(function(error) {
                console.error(error);
            });
        }
    });
},

I am trying to implement MSAL auth via Redirect in Vue js.

I have followed the official guide but when I open an app, handleRedirect is started, then it redirects to a blank page and hangs there, the console looks like this:

  • handleRedirectPromise called but there is no interaction in progress, returning null.
  • Emitting event: msal:acquireTokenStart
  • Emitting event: msal:handleRedirectEnd
  • Null, no response
  • Emitting event: msal:acquireTokenStart

I cannot get how to implement the redirect flow (popup flow is not an option).

My config:

// login
var msalConfig = { 
    auth: {
        clientId: clientId, 
        authority: this.authority, //https://login.microsoftonline.com/common/ default
        redirectUri: this.redirect + 'redirects/login-msal-powerbi/index.html', // blank page
        postLogoutRedirectUri: null
    }, 
    cache: {
        cacheLocation: "localStorage", // This configures where your cache will be stored
        storeAuthStateInCookie: false, // Set this to "true" if you are having issues on IE11 or Edge
    },
    allowRedirectInIframe: true
}

My main LoginUser function:


// login
loginUser: function() {
    var that = this;
    // Prepare config
    this.msalInstance = new msal.PublicClientApplication(msalConfig); 
    // Register Callbacks for Redirect flow
    var request = this.msalGetRequestLoginRedirect(this.powerbi.scopes, this.login.aadTenant); // returns an object with authority and scopes
    this.msalInstance.handleRedirectPromise()
    .then(function(responce) {
        that.msalHandleResponse(responce, that.msalInstance);
    })
    .catch((error) => {
        console.log(error);
    });

My msalHandleResponse function:

msalHandleResponse: function(response, msalInstance) {
    if (response !== null) {
        console.log(response);
    }else {
        console.error('null!!') // returns null
        return msalInstance.loginRedirect({scopes:[
                    "https://analysis.windows.net/powerbi/api/Dashboard.Read.All",
                    "https://analysis.windows.net/powerbi/api/Dataset.Read.All",
                    "https://analysis.windows.net/powerbi/api/Report.Read.All",
                    "https://analysis.windows.net/powerbi/api/Group.Read.All",
                    "https://analysis.windows.net/powerbi/api/Workspace.Read.All",
                    "https://analysis.windows.net/powerbi/api/UserState.ReadWrite.All"       
                ], responseMode:"query"});
    }
},

My acquireTokenRedirect function:

msalGetTokenRedirect: function(msalInstance) {
    var that = this;
    msalInstance.acquireTokenSilent(this.requestsObj.silentRequest)
    .then(function(tokenResponse) {
        // Optionally make something with tokenResponse    
        console.log("Access token acquired silently...");
        return tokenResponse;
    }).catch(function(error) {
        if (error instanceof InteractionRequiredAuthError) {
            // fallback to interaction when silent call fails
            return msalInstance.acquireTokenRedirect(this.requestsObj.request)
            .then(function(tokenResponse) {
                console.log('TOKEN RESPONSE',tokenResponse);
            }).catch(function(error) {
                console.error(error);
            });
        }
    });
},

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

枯叶蝶 2025-01-25 13:26:57

您是否在您的redirectUri(空白页)上调用handleRedirectPromise?

Are you calling handleRedirectPromise on your redirectUri (blank page)?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文