微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用刷新令牌使用ADAL for Cordova请求多个资源

我正在关注这个 Cordova & ADAL tutorial.我能够在我的原生应用程序上成功执行目录搜索.我想扩展应用程序的功能添加一个azure web api资源并在同一个应用程序中使用它.

我使用VS2015模板创建了azure web api,将其发布到Azure,将其添加为Azure Active Directory中的Web应用程序,并在Azure AD的“其他应用程序的权限”部分中授予我的本机应用程序访问权限.

我现在想扩展示例目录搜索器应用程序,以便在不让用户再次登录的情况下使用api.根据我的研究,我发现我可以使用刷新令牌消耗多个资源,但是如果不将用户第二次签名到Azure AD以获取web api资源的令牌,我就无法弄清楚如何执行此操作.

任何例子或帮助将不胜感激.这是我的jsFiddle,让您了解我正在尝试做什么.

// Requests some data from an Azure Web API
requestWebApiData: function (authResult) {
    var req = new XMLHttpRequest();
    var url = webApiResourceUri + "/api/values";

    req.open("GET",url,true);
    req.setRequestHeader('Authorization','Bearer ' + authResult.accesstoken);

    req.onload = function (e) {
        if (e.target.status >= 200 && e.target.status < 300) {
            // This is where I'd like to get my data back from the Azure Web API
            console.log(JSON.stringify(e.target.response));
            return;
        }
        app.error('API Data request Failed: ' + e.target.response);
    };
    req.onerror = function (e) {
        app.error('API Data request Failed: ' + e.error);
    }

    req.send();
},

解决方法

我意识到这是一个老问题,但对于其他任何人:

分配Azure中的客户端应用程序(ClientA)所需的分离权限,使用acquiretokenAsync进行验证,然后通过acquiretokenSilentAsync请求您的其他资源(ClientB),提供ClientB的资源名称以及ClientAs客户端ID.

this.authContext.acquiretokenSilentAsync(
  clientBResourceUri,clientAId
);

这将返回一个用于clientB的JWT和一个将存储在tokenCache中的刷新令牌.如果系统提示用户需要登录,请确保已授予ClientA应用程序访问ClientB的权限

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐