如何使用刷新令牌来请求使用ADAL的科尔多瓦多个资源

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用刷新令牌来请求使用ADAL的科尔多瓦多个资源相关的知识,希望对你有一定的参考价值。

我下面这个Cordova & ADAL tutorial。我能够成功地执行我的本机应用程序的目录搜索。我想延长应用程序的功能,并添加了天蓝色的网页API资源和消费它在相同的应用程序。

我创建使用VS2015模板湛蓝的网络API,它发布到蔚蓝,增加一条,作为在Azure中的Active Directory中的Web应用程序,并给它我的本机应用程序的访问,在“权限到其他应用程序” Azure的AD内部分。

我现在想延长例如目录搜索应用也消耗API无需再具有用户登录。从我的研究,我发现我可以使用刷新标记消耗多的资源,但我无法弄清楚如何做到这一点无需登录用户Azure的AD第二次获得该网页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中的客户端应用程序(客户端A)的delagated权限,autheticate与acquireTokenAsync,然后通过acquireTokenSilentAsync请求您的其他资源(ClientB)与ClientAs客户端ID一起提供ClientB的资源名称。

this.authContext.acquireTokenSilentAsync(
  clientBResourceUri,
  clientAId
);

这将返回你JWT为clientB和刷新令牌,该令牌将被存储在tokenCache内。如果您收到提示用户需要登录,确保你已经授予的权限为您的客户端A应用访问ClientB

以上是关于如何使用刷新令牌来请求使用ADAL的科尔多瓦多个资源的主要内容,如果未能解决你的问题,请参考以下文章

使用过期令牌发出同时 API 请求时如何避免多个令牌刷新请求

ADAL使用AcquireTokenAsync和现有JWT令牌续订令牌

使用多个请求刷新访问令牌

AquireTokenAsync 与旧访问令牌 ADAL

如何配置 Azure AD 访问令牌的过期时间(使用 ADAL)?

如何在资源请求上重新生成刷新令牌和访问令牌?