0

我们正在使用 Office.context.ui.displayDialogAsync 通过 OAUTH 库(Oidc 客户端)进行身份验证,以下是调查结果。请提供同样的帮助。

  1. 根据附加的代码,我们能够在 taskpane.ts 文件中获取访问令牌作为 messageHandler 中的 args ...
  2. 但是当我登录新的浏览器时,只有安全令牌服务(STS)登录窗口才会打开。
  3. 如果我注销并清除了访问令牌,然后再次尝试以登录用户身份直接登录,而无需打开安全令牌服务 (STS) 窗口。
  4. 一旦我清除了浏览器缓存,然后只有我能够再次获得安全令牌服务 (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');
      }
    });    
  };

任务窗格.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();
        };
      }
}

注销.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();
  });  
4

0 回答 0