我正在关注这个 Cordova ADAL tutorial.我能够在我的原生应用程序上成功执行目录搜索.我想扩展应用程序的功能并添加一个azure web api资源并在同一个应用程序中使用它. 我使用VS2015模板创建
我使用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的权限