【问题标题】:Acquire Token to access Azure Resources获取令牌以访问 Azure 资源
【发布时间】:2017-08-30 09:37:52
【问题描述】:

我已使用 ADAL.js 获取 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 应用程序。

【问题讨论】:

    标签: azure azure-active-directory adal adal.js


    【解决方案1】:

    请确保在 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>
    

    如果有帮助请告诉我。

    【讨论】:

    • 是的,它奏效了。但我不明白handleWindowCallback 的逻辑。这个函数在做什么?假设我想在成功登录时自动调用clickme(),我该如何实现呢?
    • handleWindowCallback 方法将令牌保存在缓存中,并使用错误或令牌调用回调。以上代码会在页面加载时自动调用handleWindowCallback
    • 可以设置authContext.callback = onSuccessLogin,也可以定义自己的回调,authContext.login()作为回调调用。原型:function onSuccessLogin(error, token, msg)
    猜你喜欢
    • 1970-01-01
    • 2018-06-18
    • 2016-03-26
    • 2018-02-17
    • 2019-09-09
    • 2019-07-12
    • 2018-02-06
    • 2019-05-15
    • 1970-01-01
    相关资源
    最近更新 更多