我为ios / android构建了一个VS2015 Cordova应用程序。该应用程序在此Microsoft Azure tutorial之后使用与Azure Active Directory绑定的Azure移动服务。这很好用。当我尝试进行目录搜索时,Azure会提示我使用我的租户凭据进行身份验证。
下一步:
一旦用户使用ADAL Cordova库进行了身份验证(工作正常并且我收到了令牌),我想对我的Web API执行GET请求并返回数据。
这是我遇到麻烦而不确定如何构造API请求的地方,因此它传递令牌/凭证以从API返回数据而无需进一步登录。以下是我成功验证Azure Active Directory后所拥有的内容:
我尝试将ADAL返回的持有者令牌传递给jQuery GET请求的标头,但这不起作用。 jQuery完成回调中的数据变量(来自上面的屏幕截图)在返回时包含HTML。在检查HTML时,它是Microsoft Azure登录页面,这意味着我没有获得被动身份验证流程。
任何帮助将非常感激!我假设我没有正确构建jQuery,或者没有正确地传递令牌或信用,但是找不到如何使用javascript完成此操作的示例。我认为我的Azure设置很好,但可以添加帮助诊断问题所需的任何进一步信息的示例。
@vibronet我非常希望你能回答我的问题。谢谢你这样做!我确实按照你指出的cordova样本。这是我的出发点的基础。根据您的建议,我更改了我的Azure Web API清单并将隐式流程设置回false,我最初将其设置为true。如何使用/共享相同的accessToken查询图形api和我的web api?在index.js文件中(来自github示例),app.requestData函数使用authResult中的accessToken。这个authResult来自获取资源“https://graph.windows.net”的令牌。我现在想使用相同的accessToken从我的Web API获取数据,该数据位于“https://mywebapi.azurewebsites.net”。我无法做到这一点,并在xhr响应中收到HTML。
我在google docs有这个例子。这将工作并从图api获取数据,但不会从webApiResourceUri的资源获取数据。如果我单独验证Web API和图形API并获得单独的accessTokens,它可以工作,但会设置两个登录屏幕。这就是为什么jsFiddle在两个不同的函数中具有authenticateGraphApi和authenticateWebApi的原因,因为我不理解如何组合和使用相同的令牌。
在此先感谢您的帮助!
Arthur,您不需要隐式流也不需要密钥来调用您的Web API。请参阅Azure AD cordova示例here,特别是https://github.com/Azure-Samples/active-directory-cordova-multitarget/blob/master/DirSearchClient/js/index.js
更新以解决问题的第二部分:您从不使用相同的访问令牌来访问两个不同的资源。获得第一个访问令牌后,ADAL还获得了一个刷新令牌 - 可用于静默获取应用程序声明为必需资源的其他资源的新访问令牌。您可以通过调用AcquireTokenSilent来避免第二次登录屏幕