当前位置 : 主页 > 手机开发 > cordova >

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

来源:互联网 收集:自由互联 发布时间:2021-06-10
我正在关注这个 Cordova ADAL tutorial.我能够在我的原生应用程序上成功执行目录搜索.我想扩展应用程序的功能并添加一个azure web api资源并在同一个应用程序中使用它. 我使用VS2015模板创建
我正在关注这个 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的权限

网友评论