2017-08-30 178 views
0

我已使用ADAL.js獲取Azure資源的令牌。獲取令牌以訪問Azure資源

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

我寫了下面的代碼,爲了做到這一點:

var endpoints = { 
    "https://management.core.windows.net": "https://management.core.windows.net" 
}; 
var config = { 
    clientId: '634c7103-b43e-4384-b345-db0116058ac3', 
    endpoints: endpoints, 
}; 
var authContext = new AuthenticationContext(config); 

function login() { 
    authContext.popUp = true; 
    authContext.login(); 
    authContext.handleWindowCallback(); 
}; 

function clickme() { 
    var user = authContext.getCachedUser(); 
    console.log(user); 

    authContext.acquireToken('https://management.core.windows.net', function (error, token) { 
     console.log(error); 
     console.log(token); 
    }); 
}; 

現在,當我呼籲登錄後clickme(),得到了以下錯誤消息:由於令牌更新操作失敗超時。我錯過了什麼嗎?

我的最終目標是創建一個Web應用程序,該Web應用程序可以列出與用戶對應的所有訂閱,資源組和Vault。

回答

0

請確保在AAD將響應發送到redirectUri時調用handleWindowCallback方法。無論在加載redirectUri頁面時執行的代碼應該確保調用handlewindowcallback方法。

請嘗試以下代碼,它工作在我身邊罰款:

<!DOCTYPE html> 
<html> 
<head> 
    <meta charset="utf-8" /> 
    <title></title> 
</head> 
<body> 
    <script src="https://secure.aadcdn.microsoftonline-p.com/lib/1.0.15/js/adal.min.js"></script> 
    <script> 
     var endpoints = { 
      "https://management.core.windows.net": "https://management.core.windows.net" 
     }; 
     var config = { 
      clientId: 'e333d3fe-a73a-4476-8121-8a57f9a972ca', 
      endpoints: endpoints, 
     }; 
     var authContext = new AuthenticationContext(config); 
     authContext.handleWindowCallback(); 

     function login() { 
      authContext.popUp = true; 
      authContext.login(); 
      // authContext.handleWindowCallback(); 
      var user = authContext.getCachedUser(); 
      console.log(user); 
     }; 

     function clickme() { 
      var user = authContext.getCachedUser(); 
      console.log(user); 

      authContext.acquireToken('https://management.core.windows.net', function (error, token) { 
       console.log(error); 
       console.log(token); 
      }); 
     }; 
    </script> 
    <input id="Button1" type="button" value="clickme" onclick="clickme()" /> 
    <input id="Button1" type="button" value="login" onclick="login()" /> 

</body> 
</html> 

請讓我知道,如果它幫助。

+0

是的,它的工作。但我不明白'handleWindowCallback'的邏輯。這個功能在做什麼?假設我想在成功登錄時自動調用'clickme()',我該如何實現? –

+0

handleWindowCallback方法將令牌保存在緩存中,並使用錯誤或令牌調用回調。上面的代碼會在頁面加載時自動調用handleWindowCallback –

+0

可以設置'authContext.callback = onSuccessLogin'並且可以定義自己的回調,它將被'authContext.login()'調用回調。 ProtoType:'function onSuccessLogin(error,token,msg)' –