2017-09-06 12 views
1

Excelアドインには、SharePoint REST APIを呼び出す一部の関数のOAUTHトークンが必要です。ExcelアドインでSharepointトークンを取得する

アドインはリボンコマンドを使用しており、タスクペインはありません。

var dhi = dhi || {}; 
dhi.adal = (function (mod) { 

    var settings = { 
     clientId: "xxxyyyyzzzz", 
     url: "https://company.sharepoint.com" 
    }; 


    mod.getToken = function() { 

     var dfd = $.Deferred(); 
     //fix origin for IE 
     if (!window.location.origin) { 
      window.location.origin = window.location.protocol + "//" + window.location.hostname + (window.location.port ? ':' + window.location.port : ''); 
     } 

     var configOptions = { 
      clientId: settings.clientId, 
      postLogoutRedirectUri: window.location.origin, 
      cacheLocation: 'localStorage', 
     } 

     window.authContext = new AuthenticationContext(configOptions); 

     var isCallback = authContext.isCallback(window.location.hash); 
     authContext.handleWindowCallback(); 

     var user = authContext.getCachedUser(); 

     if (!user) { 
      authContext.login(); 

     } else { 

      var cachedToken = authContext.getCachedToken(user.profile.aud); 
      if (!cachedToken) { 
       authContext.login(); 
      } else { 


       var url = settings.url; 

       var tok = authContext.acquireToken(url, function (error, token) { 
        console.log(error); 
        if (token != null) { 
         console.log(token); 
         sharedtoken = token; 
         dfd.resolve(token); 
        } else { 
         if (cachedToken != "" && cachedToken != null && cachedToken != undefined) { 
          dfd.resolve(cachedToken); 
         } else { 
          dfd.reject("Unable to obtain token. Please contact [email protected] with the following error : " + error); 
         } 
        } 
       }); 
      } 
     } 
     return dfd.promise(); 
    } 
    return mod; 
})(dhi.adal || {}); 

、私たちはこの初期化を呼び出す(リボンボタンのハンドラが定義されている)functions.jsファイル内:

(function() { 
    "use strict"; 
    $(document).ready(function() { 

     dhi.adal.getToken.then(
      function (token) { 
       sharedtoken = token; 
       Office.initialize = function (reason) { 

        // some code here 

       } 
      }, 
      function (error) { 
       app.showNotification("Problem occured", error); 
      }); 
    }); 
})(); 

我々が直面していると私たちは他のプロジェクトからトークンを取得するには、次のコードを持っています次のような問題が発生します。

1)トークンがすでにキャッシュされている場合、それは機能します。ただし、authContext.login()に電話する必要があるときは、メッセージは表示されません。ログインダイアログをどこに表示するのかはわかりません(このアドインの最初のバージョンでは作業ウィンドウを使用していましたが、ログインページが表示されましたが、いくつかの理由からコマンドを使用する必要があります)

2)Office.initializeが呼び出される前に呼び出す必要があります。それ以外の場合は機能しません(私はgetTokenを必要とする機能だけに入れようとしましたが、成功しませんでした)。これには副作用があり、トークンを必要としないときには、ボタンアクションに対しても常にgetToken()と呼ぶ必要があります。

3)トークンを取得するためのダイアログを作成しようとしましたが、いくつかの問題があります。 adal.js ...

だから、私はお願いしたいと思います - いくつかのサンプルがあった場合Office.jas

にActive DirectoryからSharePointのトークンを取得するためにどのように任意の簡単な方法があり、それは私たちの助けになりますロット。

答えて

0

SharePointのトークンを取得する方法はありません。

認証ダイアログを開くには、Dialog APIを使用する必要があります。 Dialog APIを使用してGraph:PowerPoint-Add-in-Microsoft-Graph-ASPNET-InsertChartに対して認証するサンプルPowerPointアドインがあります。ここで使用されるプリンシパルとコンポーネントは、ExcelとSharePointに簡単に変換する必要があります。

認証ライブラリについては、microsoft-authentication-library-for-jsをご覧ください。

また、ファンクションファイルでページロード時にすぐにOffice.initializeが割り当てられるようにする必要があります。これは、init関数へのアウトバウンド呼び出しではなく、init関数を割り当てているプロパティです。 Officeはこのメソッドを自動的に呼び出しますが、関数を割り当てていない場合はエラーになります。

関連する問題