2016-07-26 194 views
0

我目前有一個我的應用程序的問題。刷新從YouTube的Office365授權令牌

問題是,用戶可以在輸入任何數據前長時間保持頁面打開,所以偶爾當他們輸入數據並點擊提交按鈕時,他們被重定向到o365進行身份驗證,因此會丟失輸入數據。

我有適用於應用程序的所有標準身份驗證。然而,我相信爲了做到這一點,我需要在點擊提交按鈕時在javascript中獲得刷新令牌,並將此令牌發送給api方法以授予訪問權限。

這是可能的,是否有人知道如何去做?

這是一個MVC ASP.NET應用程序,使用微軟Azure AD的Owin O365安全性。

我不確定哪些信息或代碼片段在這裏是相關的,所以如果有什麼我可以提供的,請詢問。

我發現有多個獲取令牌等與角度的例子,但是,這不是一個SPA和不使用角。

很多預先感謝。

UPDATE

我試圖檢索使用下面的代碼使用ADAL JS令牌,但它似乎沒有認識到AuthorizationContext(配置)電話:

<script src="https://secure.aadcdn.microsoftonline-p.com/lib/1.0.0/js/adal.min.js"></script> 

    $('#btnSubmit').on('click', function (e) { 
     e.preventDefault(); 
     CheckUserAuthorised(); 
    }); 

    function CheckUserAuthorised() { 
     window.config = { 
      instance: 'https://login.microsoftonline.com/', 
      tenant: '##################', 
      clientId: '###################', 
      postLogoutRedirectUri: window.location.origin, 
      cacheLocation: 'localStorage' 
     }; 
     var authContext = new AuthorizationContext(config); //THIS LINE FAILS 
     var user = authContext.getCachedUser(); 
     if (!user) { 
      alert("User Not Authorised"); 
      authContext.login(); 
     } 
     else { 
      alert('User Authorized'); 
     } 
    } 

這提供了以下錯誤在控制檯:

'AuthorizationContext' is undefined

UPDATE

我沒有通過未定義的錯誤。這是因爲我打電話給AuthorizationContext而不是AuthenticationContext。小學生錯誤。但是現在,無論何時我檢查上下文的用戶屬性,它始終爲空。我不知道解決這個問題的方法是在頁面加載時初始化上下文。

+0

您的代碼中存在拼寫錯誤。嘗試將AuthorisationContext更改爲AuthorizationContext。 – n0m4d

+0

好點,謝謝你,但我仍然得到錯誤:'AuthorizationContext是未定義的' – DaRoGa

+0

你從哪裏得到這個代碼示例?另一件事:不要傳遞給AuthorizationContext這個配置,而是將其作爲window.config傳遞,因爲配置是在窗口對象中定義的。 – n0m4d

回答

0

目前缺乏在你的代碼中的一步,這裏是一個簡單的代碼示例,希望它會幫助你:

<script src="https://secure.aadcdn.microsoftonline-p.com/lib/1.0.10/js/adal.min.js"></script> 

<body> 
<a href="#" onclick="login();">login</a> 
<a href="#" onclick="getToken()">access token</a> 
<a href="#" onclick="getUser()">get user</a> 
</body> 
<script type="text/javascript"> 
    var configOptions = { 
     tenant: "<tenant_id>", // Optional by default, it sends common 
     clientId: "<client_id>", 
     postLogoutRedirectUri: window.location.origin, 
    } 
    window.authContext = new AuthenticationContext(configOptions); 

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

    function getToken(){ 
     authContext.acquireToken("https://graph.microsoft.com",function(error, token){ 
      console.log(error); 
      console.log(token); 
     }) 
    } 
    function login(){ 
     authContext.login(); 
    } 
    function getUser(){ 
     var user = authContext.getCachedUser(); 
     console.log(user); 
    } 
</script> 

的代碼示例是從No 'Access-Control-Allow-Origin' header with Microsoft Online Auth答案。問題是不同的,但他們是在相同的情況。

任何進一步的關注,請隨時讓我知道。

+0

非常感謝,我現在就試試。關於IE的問題,是否也適用於Edge,並且僅限於本地主機,因此部署時不需要考慮哪個瀏覽器?作爲我的大部分用戶,使用IE還是Edge?再次感謝 – DaRoGa

+0

,有沒有一種方法可以在不將瀏覽器重定向到微軟的情況下獲取令牌/登錄?基本上我正在嘗試這樣做,以便我不會丟失輸入到頁面上的數據,並且我可以獲取令牌,並將其作爲參數傳遞給API方法。謝謝, – DaRoGa

+0

對不起,如果我在這裏很幼稚,但我不明白它是如何工作的,當你第一次加載頁面時,authContext被初始化,此時用戶將爲空,因此在獲取令牌之前需要登錄。登錄它重定向到microsoftonline登錄並重定向回原始頁面authContext重新初始化和用戶將再次爲null?或者我錯過了什麼? – DaRoGa

0

我在網上發現了一個類似的example,您的問題似乎與您正在實例化的對象有關。

而不是

new AuthorizationContext(window.config); 

嘗試

new AuthenticationContext(window.config); 

代碼跑就好示出用戶未通過身份驗證。

+0

嗨是的,我也發現了這一點,我不再收到未定義的錯誤,但是,現在用戶是總是爲空,我傳遞參數,如果(!用戶){authContext.login()}等,但因爲實例化總是在頁面加載完成,用戶始終爲空。我怎樣才能解決這個問題? – DaRoGa

+0

當你將參數傳遞給url並嘗試在瀏覽器上運行時,你會得到任何迴應嗎? – n0m4d

+0

當我調用.login()時,瀏覽器重定向並返回格式爲「https:// localhost:44300 /通信/添加#id_token = ey ............」的url中的id_token。 。&session_state = .....' – DaRoGa

相關問題