簡體   English   中英

從Javascript刷新Office365授權令牌

[英]Refresh Office365 Authorization Token from Javascript

我的一個應用目前存在問題。

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

我擁有適用於該應用程序的所有標准身份驗證。 但是,我相信要執行此操作,單擊提交按鈕時,我需要在javascript中獲取刷新的令牌,並將此令牌發送到api方法以進行訪問。

這可能嗎,有人知道該怎么做嗎?

它是一個使用Owin O365安全性和Microsoft Azure AD的MVC ASP.NET應用程序。

我不確定這里有什么信息或代碼片段有用,所以如果我能提供什么,請詢問。

我發現了使用角度獲取令牌等的多個示例,但是,這不是SPA,也不使用角度。

提前謝謝了。

更新

我嘗試使用以下代碼使用ADAL JS檢索令牌,但它似乎無法識別AuthorizationContext(config)調用:

    <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

更新

我沒有通過未定義的錯誤。 這是因為我正在調用AuthorizationContext而不是AuthenticationContext 小學生錯誤。 但是現在,每當我檢查上下文的用戶屬性時,它始終為null。 而且我不知道解決此問題的方法,因為上下文是在頁面加載時初始化的。

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

代替

new AuthorizationContext(window.config);

嘗試

new AuthenticationContext(window.config);

該代碼運行得很好,表明用戶未通過身份驗證。

您的代碼中缺少一個步驟,這是一個簡單的代碼示例,希望對您有所幫助:

<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>

該代碼示例來自帶有Microsoft Online Auth的No'Access-Control-Allow-Origin'標頭的答案。 問題是不同的,但是它們在相同的情況下。

如有任何其他疑問,請隨時告訴我。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM