Как повторно получить токен из AAD, используя vue -msal, после того, как я закрою вкладку браузера и снова открою страницу? - PullRequest
0 голосов
/ 02 августа 2020

У меня есть следующий код для одностраничного приложения на основе Vue JS, подключающегося к Azure AD через vue -msal, который работает, когда я:

  • открываю Интернет приложение в первый раз
    • переводит меня на страницу входа в AAD
    • после входа в систему перенаправляет меня обратно в мое приложение
  • Затем я могу выполните console.log() и распечатайте мой токен доступа и c, чтобы убедиться, что вход в систему был успешным и токен был успешно получен

Теперь предположим, что я закрываю вкладку браузера. Мой сеанс входа в систему все еще существует (в конце концов, я не удалил никаких файлов cookie!), Но теперь мой токен доступа пропал (вероятно, потому, что он был сохранен как переменная, а не в cook ie). Как мне повторно получить токен доступа, когда я открываю новую вкладку и перехожу к своему приложению?

# main.js
import Vue from 'vue'
import App from './App.vue'
import router from './router'
import msal from 'vue-msal';

Vue.config.productionTip = false

Vue.use(msal, {
  auth: {
    clientId: "CLIENT_ID_OF_MY_SINGLE_PAGE_APPLICATION"
    authority: "https://login.microsoftonline.com/TENANT_ID/",
    redirectUri: "http://localhost:8080/",
    requireAuthOnInitialize: true
  },
  request: {
    scopes: [ `user.read`, `https://backend-api-hosted-on-functionapp.azurewebsites.net/user_impersonation` ]
  },
  graph: {
    callAfterInit: true,
  },
  cache: {
    cacheLocation: "sessionStorage"
  }
});

new Vue({
  router,
  render: h => h(App),
  data: function() {
    return {
      dummyVariable: 'dummyValue',
    }
  },
  created() {
    console.log("User auth status is: " + this.$msal.isAuthenticated());
    console.log("User data object: " + JSON.stringify(this.$msal)) // shows the bearer token the first time, but when I then close the tab and re-open the tab, I see nothing here
  }

}}).$mount('#app')

Итак, у меня есть несколько вопросов:

  1. Я «должен» повторно приобретать новый токен, если приложение загружается снова? Это обычная практика?

  2. Если да, то как мне go это сделать? Я пробовал использовать:

    if ((this.$msal.data.isAuthenticated == false) || (this.$msal.data.accessToken == false)) {
      console.log("New token required");
      this.$msal.signIn();
      console.log("User data object: " + JSON.stringify(this.$msal))
    }

Но, к сожалению, это мне ничего не вернуло.

1 Ответ

1 голос
/ 03 августа 2020

Если кто-то еще в конечном итоге обратится к этому вопросу, это не проблема моего кода как такового, а постоянная проблема между vue -msal и пакетами msal, как объясняется в этой проблеме GH: https://github.com/mvertopoulos/vue-msal/issues/33

...