Выход из системы не очищает весь процесс с использованием клиента oidc с сервером идентификации 4

Мы используем Office.context.ui.displayDialogAsync для аутентификации с помощью библиотеки OAUTH (Oidc-client), и ниже представлены результаты. Пожалуйста, помогите в том же.

  1. Согласно приложенному коду мы смогли получить токен доступа в файле taskpane.ts как аргументы в messageHandler...
  2. Но когда я вошел в новый браузер, тогда открылось только окно входа в службу Secure Token Service (STS).
  3. Если я выхожу из системы и очищаю токен доступа, то снова пытаюсь войти в систему в этот раз напрямую, войдя как зарегистрированный пользователь, не открывая окно службы безопасных токенов (STS).
  4. Как только я очистил кеш браузера, и все, тогда только я смогу снова получить окно Secure Token Service (STS)... Не могли бы вы посоветовать сценарий для обработки? Нам что-нибудь нужно.

Текущий сценарий

displayDialogAsync открывается в качестве входа в STS в первый раз и может успешно войти в систему. Но при последующем входе в систему не появляется всплывающее окно, а данные напрямую загружаются токенами.

Ожидаемый сценарий

displayDialogAsync должен открываться не только при первом входе в систему, но также должен открываться для последующего входа в систему, что означает, что если пользователь вышел из системы и попытается снова войти в систему в этот раз, он также должен появиться. Нужно ли что-нибудь очистить кеш для displayDialogAsync? Пожалуйста, помогите.

auth.ts

Office.initialize = function () {

    var settings = {
      authority: "https://xxxxxx.com/xxxx/xx",      
      client_id: "https://xxxxxxx.com/",
      redirect_uri: "https://localhost:3000/taskpane.html",
      // silent_redirect_uri:"https://localhost:3000/taskpane.html", 
      post_logout_redirect_uri: "https://xxxxxxx.com/",       
      response_type: "id_token token",
      scope: "openid read:xxxx read:xxxxxx read:xxxxxxx",
      state: true,
      clearHashAfterLogin: false,
      filterProtocolClaims: true,  
      loadUserInfo: true,
      nonce:true,       
    };
    Oidc.Log.logger = console;
    var mgr = new Oidc.UserManager(settings); 
    mgr.signinRedirect();
    mgr.signinRedirectCallback().then((user) => {       
      if (user) {
        console.log(user);

      } else {
        mgr.signinPopupCallback().then(function (user) {
          window.location.href = '../';
        }).catch(function (err) {
          console.log(err);
        });
        throw new Error('user is not logged in');
      }
    });    
  };

taskpane.ts

const loginpopup = function () {
      if (OfficeHelpers.Authenticator.isAuthDialog())
        return;     
      Office.context.ui.displayDialogAsync(
        url,
        { height: 60, width: 60, /*displayInIframe:true*/ },
        dialogCallback);
      function dialogCallback(asyncResult) {
        if (asyncResult.status == "failed") {
         
          switch (asyncResult.error.code) {
            case 12004:
              console.log("Domain is not trusted");
              break;
            case 12005:
              console.log("HTTPS is required");
              break;
            case 12007:
              console.log("A dialog is already opened.");
              break;
            default:
              console.log(asyncResult.error.message);
              break;
          }
        }
        else {
          dialog = asyncResult.value; 
          dialog.addEventHandler(Office.EventType.DialogMessageReceived, messageHandler);
        }
      }
      function messageHandler(arg: any) {
        if (arg != "jsonMessage") {
          $(".loader").show();
          var test = JSON.parse(arg.message).value.split("#")[1].split("&")[1].split("=");         
          dialog.close();
        };
      }
}

logout.ts

Office.initialize = () => {

  var settings = {    
    authority: "https://xxxxxx.com/xxxxxx/v1",     
    client_id: "https://xxxxxxx.com/",
    redirect_uri: "https://localhost:3000/logout.html",    
    post_logout_redirect_uri: "https://localhost:3000/logout.html", 
    metadata: {        
      issuer: 'https://xxxxxx.com/xxxxxx/v1',  
      authorization_endpoint:  "https://xxxxxx.com/xxxxxxx/v1/xxxxx"      
  }    
  };  
  var mgr = new Oidc.UserManager(settings);   
  mgr.signoutRedirect();
  mgr.removeUser();
  mgr.revokeAccessToken();
  mgr.clearStaleState();
  $("document").ready(function () {    
  localStorage.removeItem('accessToken');  
  localStorage.clear();
  });  

0 ответов

Другие вопросы по тегам